forked from jvan/pyvrui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeometry.i
105 lines (84 loc) · 2.53 KB
/
geometry.i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
%{
#include <Geometry/Vector.h>
#include <Geometry/Geoid.h>
#include <Geometry/OrthogonalTransformation.h>
%}
/*%ignore Geometry::ComponentArray::operator[];*/
/*%ignore Geometry::ComponentArray::ComponentArray(double&);*/
/*%ignore Geometry::ComponentArray::ComponentArray(double&, double&);*/
/*%ignore Geometry::ComponentArray::ComponentArray(double&, double&, double&, double&);*/
/*%import <Geometry/ComponentArray.h>*/
namespace Geometry
{
template <class ScalarParam,int dimensionParam>
class ComponentArray
{
};
template <class ScalarParam>
class ComponentArray<ScalarParam,3>
{
public:
typedef ScalarParam Scalar;
static const int dimension=3;
public:
ComponentArray(Scalar c0,Scalar c1,Scalar c2 =Scalar(0))
{
components[0]=c0;
components[1]=c1;
components[2]=c2;
}
};
}
%template() Geometry::ComponentArray<double, 3>;
/*%ignore Geometry::Vector::Vector(double&);*/
/*%ignore Geometry::Vector::Vector(double&, double&);*/
/*%ignore Geometry::Vector::Vector(double&, double&, double&, double&);*/
/*%include <Geometry/Vector.h>*/
namespace Geometry
{
template <class ScalarParam,int dimensionParam>
class Vector:public ComponentArray<ScalarParam,dimensionParam>
{
public:
Vector(ScalarParam sX,ScalarParam sY,ScalarParam sZ);
%extend {
double __getitem__(int index)
{
return $self->components[index];
}
}
};
}
%template(Vector3) Geometry::Vector<double,3>;
%typemap(in) const Geometry::Vector<double, 3>& {
PyObject* x = PyList_GetItem($input, 0);
PyObject* y = PyList_GetItem($input, 1);
PyObject* z = PyList_GetItem($input, 2);
double px = PyFloat_AsDouble(x);
double py = PyFloat_AsDouble(y);
double pz = PyFloat_AsDouble(z);
Geometry::Vector<double, 3>* v = new Geometry::Vector<double, 3>(px, py, pz);
$1 = v;
}
/* Free memory allocated in list -> Vrui::Point typemap */
%typemap(free) const Geometry::Vector<double, 3>& {
delete $1;
}
/*%rename(VruiGeoid) Geometry::Geoid;*/
%include <Geometry/Geoid.h>
%template(Geoidd) Geometry::Geoid<double>;
%pythoncode {
Geoid = Geoidd
}
/*%include <Geometry/OrthogonalTransformation.h>*/
namespace Geometry
{
template <class ScalarParam,int dimensionParam>
class OrthogonalTransformation
{
public:
OrthogonalTransformation(void);
const Vector<double,3>& getTranslation(void) const;
};
}
%template(OrthogonalTransformationd) Geometry::OrthogonalTransformation<double,3>;