1 #ifndef OPENMESH_PYTHON_VECTOR_HH 2 #define OPENMESH_PYTHON_VECTOR_HH 9 template <
class Vector,
class Scalar>
10 void set_item(Vector& _vec,
int _index, Scalar _value) {
12 _index += _vec.size();
15 if ((
size_t)_index < _vec.size()) {
16 _vec[_index] = _value;
19 PyErr_SetString(PyExc_IndexError,
"Index out of range.");
20 throw_error_already_set();
24 template <
class Vector,
class Scalar>
25 Scalar get_item(Vector& _vec,
int _index) {
27 _index += _vec.size();
30 if ((
size_t)_index < _vec.size()) {
34 PyErr_SetString(PyExc_IndexError,
"Index out of range.");
35 throw_error_already_set();
42 template<
class Scalar>
48 static Vector2 *vec2_default() {
49 return new Vector2(Scalar(), Scalar());
51 static Vector2 *vec2_user_defined(
const Scalar& _v0,
const Scalar& _v1) {
52 return new Vector2(_v0, _v1);
54 static Vector3 *vec3_default() {
55 return new Vector3(Scalar(), Scalar(), Scalar());
57 static Vector3 *vec3_user_defined(
const Scalar& _v0,
const Scalar& _v1,
const Scalar& _v2) {
58 return new Vector3(_v0, _v1, _v2);
60 static Vector4 *vec4_default() {
61 return new Vector4(Scalar(), Scalar(), Scalar(), Scalar());
63 static Vector4 *vec4_user_defined(
const Scalar& _v0,
const Scalar& _v1,
const Scalar& _v2,
const Scalar& _v3) {
64 return new Vector4(_v0, _v1, _v2, _v3);
69 template<
class Scalar,
class Vector>
72 .def(
"__init__", make_constructor(&Factory<Scalar>::vec2_default))
73 .def(
"__init__", make_constructor(&Factory<Scalar>::vec2_user_defined))
77 template<
class Scalar,
class Vector>
79 Vector (Vector::*
cross)(
const Vector&)
const = &Vector::operator%;
81 .def(
"__init__", make_constructor(&Factory<Scalar>::vec3_default))
82 .def(
"__init__", make_constructor(&Factory<Scalar>::vec3_user_defined))
83 .def(
"__mod__",
cross)
88 template<
class Scalar,
class Vector>
91 .def(
"__init__", make_constructor(&Factory<Scalar>::vec4_default))
92 .def(
"__init__", make_constructor(&Factory<Scalar>::vec4_user_defined))
109 template<
class Scalar,
int N>
113 Scalar (Vector::*min_void)()
const = &Vector::min;
114 Scalar (Vector::*max_void)()
const = &Vector::max;
116 Vector (Vector::*max_vector)(
const Vector&)
const = &Vector::max;
117 Vector (Vector::*min_vector)(
const Vector&)
const = &Vector::min;
119 Scalar (Vector::*
dot )(
const Vector&)
const = &Vector::operator|;
120 Scalar (Vector::*norm )(void )
const = &Vector::norm;
121 Scalar (Vector::*length )(void )
const = &Vector::length;
122 Scalar (Vector::*sqrnorm )(void )
const = &Vector::sqrnorm;
123 Vector& (Vector::*normalize )(
void ) = &Vector::normalize;
124 Vector& (Vector::*normalize_cond)(
void ) = &Vector::normalize_cond;
126 #if (_MSC_VER >= 1900 || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)) && !defined(OPENMESH_VECTOR_LEGACY) 127 Vector (Vector::*normalized)()
const = &Vector::normalized;
129 const Vector (Vector::*normalized)()
const = &Vector::normalized;
132 class_<Vector> classVector = class_<Vector>(_name);
135 .def(
"__setitem__", &set_item<Vector, Scalar>)
136 .def(
"__getitem__", &get_item<Vector, Scalar>)
139 .def(
self *= Scalar())
140 .def(
self /= Scalar())
141 .def(
self * Scalar())
142 .def(Scalar() *
self)
143 .def(
self / Scalar())
154 .def(
"vectorize", &Vector::vectorize, return_internal_reference<>())
159 .def(
"length", length)
160 .def(
"sqrnorm", sqrnorm)
161 .def(
"normalized", normalized)
162 .def(
"normalize", normalize, return_internal_reference<>())
163 .def(
"normalize_cond", normalize_cond, return_internal_reference<>())
165 .def(
"l1_norm", &Vector::l1_norm)
166 .def(
"l8_norm", &Vector::l8_norm)
168 .def(
"max", max_void)
169 .def(
"max_abs", &Vector::max_abs)
170 .def(
"min", min_void)
171 .def(
"min_abs", &Vector::min_abs)
172 .def(
"mean", &Vector::mean)
173 .def(
"mean_abs", &Vector::mean_abs)
174 .def(
"minimize", &Vector::minimize, return_internal_reference<>())
175 .def(
"minimized", &Vector::minimized)
176 .def(
"maximize", &Vector::maximize, return_internal_reference<>())
177 .def(
"maximized", &Vector::maximized)
178 .def(
"min", min_vector)
179 .def(
"max", max_vector)
181 .def(
"size", &Vector::size)
182 .staticmethod(
"size")
183 .def(
"vectorized", &Vector::vectorized)
184 .staticmethod(
"vectorized")
187 defInitMod<Scalar, Vector>(classVector);
void expose_vec(const char *_name)
Expose a vector type to Python.
Definition: Vector.hh:110
osg::Vec3f cross(const osg::Vec3f &_v1, const osg::Vec3f &_v2)
Adapter for osg vector member computing a scalar product.
Definition: VectorAdapter.hh:196
Definition: Vector11T.hh:83
osg::Vec3f::ValueType dot(const osg::Vec3f &_v1, const osg::Vec3f &_v2)
Adapter for osg vector member computing a scalar product.
Definition: VectorAdapter.hh:181
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:64