diff --git a/modules/geom/pymod/export_mat2.cc b/modules/geom/pymod/export_mat2.cc index ff8159cab563a6dcf49a96cbff73ee12cb97fa93..fa1e382c9c62b7bc7ef789303d41cc88bcca6316 100644 --- a/modules/geom/pymod/export_mat2.cc +++ b/modules/geom/pymod/export_mat2.cc @@ -26,7 +26,13 @@ using namespace boost::python; const Real Mat2_getitem(const geom::Mat2& m, tuple i) {return m(extract<int> (i[0]),extract<int> (i[1]));} void Mat2_setitem(geom::Mat2& m,const tuple i,const Real val) {m(extract<int> (i[0]),extract<int> (i[1]))=val;} +String mat2_repr(const geom::Mat2& m) { + std::stringstream ss; + ss << "geom.Mat2(" << m(0,0) << ", " << m(0,1) << ", " + << m(1,0) << ", " << m(1,1) << ")"; + return ss.str(); +} void export_Mat2() { using namespace geom; @@ -36,6 +42,7 @@ void export_Mat2() .def(self += self) .def(self -= self) .def(self + self) + .def("__repr__", mat2_repr) .def(self - self) .def(self *= Real()) .def(self /= Real()) diff --git a/modules/geom/pymod/export_mat3.cc b/modules/geom/pymod/export_mat3.cc index 613c6f41b9713ea5bbaa50f3f32505034f7b3d78..4d86381a4db04b747f6834f6e56d5b3890c0de3c 100644 --- a/modules/geom/pymod/export_mat3.cc +++ b/modules/geom/pymod/export_mat3.cc @@ -53,6 +53,17 @@ void Mat3_setslice(geom::Mat3& m,const slice s,const Mat2& m2) m(start0+1,start1+1)=m2(1,1); } +String mat3_repr(const geom::Mat3& m) +{ + std::stringstream ss; + + ss << "geom.Mat3(" << m(0,0) << ", " << m(0,1) << ", " << m(0,2) << ", " + << m(1, 0) << ", " << m(1,1) << ", " << m(1, 2) << ", " + << m(2, 0) << "," << m(2, 1) << ", " << m(2, 2) << ")"; + return ss.str(); +} + + void export_Mat3() { class_<Mat3>("Mat3",init<>()) @@ -61,6 +72,7 @@ void export_Mat3() .def(init<Real,Real,Real>()) .def(self += self) .def(self -= self) + .def("__repr__", mat3_repr) .def(self + self) .def(self - self) .def(self *= Real()) diff --git a/modules/geom/pymod/export_mat4.cc b/modules/geom/pymod/export_mat4.cc index 071c46d58f5930211806480ca189d8acb78fb535..7a5805dc6c45305fcebc5742428065d9d49f2afe 100644 --- a/modules/geom/pymod/export_mat4.cc +++ b/modules/geom/pymod/export_mat4.cc @@ -74,6 +74,17 @@ void Mat4_setslice3(geom::Mat4& m,const slice s,const Mat3& m2) m(start0+2,start1+2)=m2(2,2); } +String mat4_repr(const geom::Mat4& m) { + std::stringstream ss; + + ss << "geom.Mat4(" + << m(0,0) << ", " << m(0,1) << ", " << m(0,2) << ", " << m(0,3) << ", " + << m(1,0) << ", " << m(1,1) << ", " << m(1,2) << ", " << m(1,3) << ", " + << m(2,0) << ", " << m(2,1) << ", " << m(2,2) << ", " << m(2,3) << ", " + << m(3,0) << ", " << m(3,1) << ", " << m(3,2) << ", " << m(3,3) << ")"; + return ss.str(); +} + void export_Mat4() { @@ -94,6 +105,7 @@ void export_Mat4() .def(self * Vec4()) .def(self / Real()) .def(self_ns::str(self)) + .def("__repr__", mat4_repr) .def("__getitem__",Mat4_getitem) .def("__getitem__",Mat4_getslice) .def("__setitem__",Mat4_setitem) diff --git a/modules/geom/pymod/export_vec2.cc b/modules/geom/pymod/export_vec2.cc index 586b9b9d6937300995c71657cdfb5c906270f816..eec194418d780663aab9ecfe8e09388067c7f28f 100644 --- a/modules/geom/pymod/export_vec2.cc +++ b/modules/geom/pymod/export_vec2.cc @@ -27,6 +27,14 @@ using namespace boost::python; const Real Vec2_getitem(const geom::Vec2& v, int i) {return v[i];} void Vec2_setitem(geom::Vec2& v,const int i,const Real val) {v[i]=val;} + +String vec2_repr(const geom::Vec2& v) +{ + std::stringstream ss; + ss << "geom.Vec2(" << v[0] << ", " << v[1] << ")"; + return ss.str(); +} + void export_Vec2() { using namespace geom; @@ -50,6 +58,7 @@ void export_Vec2() .def(self / Real()) .def(self + self) .def(self - self) + .def("__repr__", vec2_repr) .def(self_ns::str(self)) .def("__getitem__",Vec2_getitem) .def("__setitem__",Vec2_setitem) diff --git a/modules/geom/pymod/export_vec3.cc b/modules/geom/pymod/export_vec3.cc index ce7704ddfcce9691d8186dd4ca9987aa6b4871ca..623671de519d14f73d7843115a5d5b18e74c8da8 100644 --- a/modules/geom/pymod/export_vec3.cc +++ b/modules/geom/pymod/export_vec3.cc @@ -31,13 +31,13 @@ geom::Vec3 NormalizeV3(const geom::Vec3& v) { return geom::Normalize(v); } - -void vec_test(const geom::Vec3List& v) +String vec3_repr(const geom::Vec3& v) { - for (size_t i=0; i<v.size(); ++i) { - std::cout << i << v[i] << std::endl; - } + std::stringstream ss; + ss << "geom.Vec3(" << v[0] << ", " << v[1] << "," << v[2] << ")"; + return ss.str(); } + void export_Vec3() { using namespace geom; @@ -64,6 +64,7 @@ void export_Vec3() .def(self_ns::str(self)) .def("__getitem__",Vec3_getitem) .def("__setitem__",Vec3_setitem) + .def("__repr__", vec3_repr) .def("GetX", &Vec3::GetX) .def("GetY", &Vec3::GetY) .def("GetZ", &Vec3::GetZ) @@ -82,5 +83,4 @@ void export_Vec3() .add_property("inertia", &Vec3List::GetInertia) .add_property("principal_axes", &Vec3List::GetPrincipalAxes) ; - def("vec_test", &vec_test); } diff --git a/modules/geom/pymod/export_vec4.cc b/modules/geom/pymod/export_vec4.cc index 409cf1cc22e298024a0c05938078370c07b0726f..bb3d80f90cc62205ec40e6fd22a736d05c0b1d20 100644 --- a/modules/geom/pymod/export_vec4.cc +++ b/modules/geom/pymod/export_vec4.cc @@ -26,6 +26,13 @@ using namespace boost::python; const Real Vec4_getitem(const geom::Vec4& v, int i) {return v[i];} void Vec4_setitem(geom::Vec4& v,const int i,const Real val) {v[i]=val;} +String vec4_repr(const geom::Vec4& v) +{ + std::stringstream ss; + ss << "geom.Vec4(" << v[0] << ", " << v[1] << "," << v[2] + << ", " << v[3] << ")"; + return ss.str(); +} void export_Vec4() { @@ -40,6 +47,7 @@ void export_Vec4() .def(self /= Real()) .def(self += Real()) .def(self += self) + .def("__repr__", vec4_repr) .def(self -= self) .def(-self) .def(self * Real()) diff --git a/modules/geom/pymod/export_vecmat2_op.cc b/modules/geom/pymod/export_vecmat2_op.cc index 2e5b2e568e5e4de00c7013e03203a421624ae534..4215e25fdf4cbc28f0dfdc09f5820cb1adc5ea91 100644 --- a/modules/geom/pymod/export_vecmat2_op.cc +++ b/modules/geom/pymod/export_vecmat2_op.cc @@ -42,10 +42,10 @@ void export_VecMat2_op() def("Length",Vec2Length); def("Length2",Vec2Length2); - def("Equal",Vec2Equal); + def("Equal",Vec2Equal, (arg("v1"), arg("v2"), arg("epsilon")=EPSILON)); def("CompMultiply",Vec2CompMultiply); def("CompDivide",Vec2CompDivide); - def("Equal",Mat2Equal); + def("Equal",Mat2Equal, (arg("m1"), arg("m2"), arg("epsilon")=EPSILON)); def("Dot",Mat2Dot); def("Det",Mat2Det); def("Invert",Mat2Invert); diff --git a/modules/geom/pymod/export_vecmat3_op.cc b/modules/geom/pymod/export_vecmat3_op.cc index 9e66832f83a14203ca0d079237a6299b2a6f5eff..fe4444b75a176651a700c032895d04a926fc2257 100644 --- a/modules/geom/pymod/export_vecmat3_op.cc +++ b/modules/geom/pymod/export_vecmat3_op.cc @@ -44,11 +44,11 @@ void export_VecMat3_op() def("Length",Vec3Length); def("Length2",Vec3Length2); - def("Equal",Vec3Equal); + def("Equal",Vec3Equal, (arg("v1"), arg("v2"), arg("epsilon")=EPSILON)); def("CompMultiply",Vec3CompMultiply); def("CompDivide",Vec3CompDivide); def("Distance",Vec3Distance); - def("Equal",Mat3Equal); + def("Equal",Mat3Equal, (arg("m1"), arg("m2"), arg("epsilon")=EPSILON)); def("DihedralAngle", &DihedralAngle); def("Dot",Mat3Dot); def("Det",Mat3Det); diff --git a/modules/geom/pymod/export_vecmat4_op.cc b/modules/geom/pymod/export_vecmat4_op.cc index c4baaf63a5ddb7645eb9fe98fa32d38f318762b0..9d91f48bbf9c3e8f6378e6822fdeeeefcd10fd16 100644 --- a/modules/geom/pymod/export_vecmat4_op.cc +++ b/modules/geom/pymod/export_vecmat4_op.cc @@ -42,12 +42,12 @@ void export_VecMat4_op() { using namespace geom; - def("Length",Vec4Length); + def("Equal",Vec4Equal, (arg("v1"), arg("v2"), arg("epsilon")=EPSILON)); def("Length2",Vec4Length2); def("Equal",Vec4Equal); def("CompMultiply",Vec4CompMultiply); def("CompDivide",Vec4CompDivide); - def("Equal",Mat4Equal); + def("Equal",Mat4Equal, (arg("m1"), arg("m2"), arg("epsilon")=EPSILON)); def("Dot",Mat4Dot); def("Det",Mat4Det); def("Transpose",Mat4Transpose); diff --git a/modules/geom/tests/CMakeLists.txt b/modules/geom/tests/CMakeLists.txt index a7c4ab6c229fc7723c3af2ba76377c130e069e37..86c40f1bb247cc73c79918e7aa5195c7491673da 100644 --- a/modules/geom/tests/CMakeLists.txt +++ b/modules/geom/tests/CMakeLists.txt @@ -11,6 +11,7 @@ set(GEOM_UNITTESTS test_vec3.cc test_vec4.cc tests.cc + test_repr.py ) ost_unittest(geom "${GEOM_UNITTESTS}") diff --git a/modules/geom/tests/test_repr.py b/modules/geom/tests/test_repr.py new file mode 100644 index 0000000000000000000000000000000000000000..e69358f20f783c7f8b731de7f13deb569105a0fa --- /dev/null +++ b/modules/geom/tests/test_repr.py @@ -0,0 +1,39 @@ +import unittest +from ost import geom + +class TestRepr(unittest.TestCase): + def testReprVec2(self): + v=geom.Vec2(1,2) + v2=eval(repr(v)) + assert geom.Equal(v, v2) + + def testReprVec3(self): + v=geom.Vec3(1,2,3) + v2=eval(repr(v)) + assert geom.Equal(v, v2) + + def testReprVec4(self): + v=geom.Vec4(1,2,3,4) + v2=eval(repr(v)) + assert geom.Equal(v, v2) + + def testReprMat2(self): + m=geom.Mat2(1,2,3,4) + m2=eval(repr(m)) + assert geom.Equal(m, m2) + + def testReprMat3(self): + m=geom.Mat3(1,2,3,4,5,6,7,8,9) + m2=eval(repr(m)) + assert geom.Equal(m, m2) + + def testReprMat4(self): + m=geom.Mat4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) + m2=eval(repr(m)) + assert geom.Equal(m, m2) + +if __name__ == "__main__": + try: + unittest.main() + except Exception, e: + print e \ No newline at end of file