From 9ba57683d59bc57d08b75d56f1c1f05971b922cf Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 10 Mar 2015 22:47:46 +0100 Subject: [PATCH] + method to get Eigensystem of mesh data --- src/Mod/Mesh/App/Mesh.cpp | 9 +++++++++ src/Mod/Mesh/App/Mesh.h | 1 + src/Mod/Mesh/App/MeshPy.xml | 5 +++++ src/Mod/Mesh/App/MeshPyImp.cpp | 13 +++++++++++++ 4 files changed, 28 insertions(+) diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index c7d623487..87807a88e 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -790,6 +790,15 @@ void MeshObject::transformToEigenSystem() this->setTransform(cMeshEval.Transform()); } +Base::Matrix4D MeshObject::getEigenSystem(Base::Vector3d& v) const +{ + MeshCore::MeshEigensystem cMeshEval(_kernel); + cMeshEval.Evaluate(); + Base::Vector3f uvw = cMeshEval.GetBoundings(); + v.Set(uvw.x, uvw.y, uvw.z); + return cMeshEval.Transform(); +} + void MeshObject::movePoint(unsigned long index, const Base::Vector3d& v) { // v is a vector, hence we must not apply the translation part diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index b66d223d4..d55d56711 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -200,6 +200,7 @@ public: /// clears the Mesh void clear(void); void transformToEigenSystem(); + Base::Matrix4D getEigenSystem(Base::Vector3d& v) const; void movePoint(unsigned long, const Base::Vector3d& v); void setPoint(unsigned long, const Base::Vector3d& v); void smooth(int iterations, float d_max); diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index 46d47a175..fd9949777 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -112,6 +112,11 @@ Example: Transform the mesh to its eigenbase + + + Get Eigen base of the mesh + + Add a facet to the mesh diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index a9d30451c..85ca92a02 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include "Mesh.h" #include "MeshPy.h" @@ -465,6 +466,18 @@ PyObject* MeshPy::transformToEigen(PyObject *args) Py_Return; } +PyObject* MeshPy::getEigenSystem(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + Base::Vector3d vec; + Base::Matrix4D mat = getMeshObjectPtr()->getEigenSystem(vec); + Py::Tuple t(2); + t.setItem(0, Py::Matrix(mat)); + t.setItem(1, Py::Vector(vec)); + return Py::new_reference_to(t); +} + PyObject* MeshPy::addFacet(PyObject *args) { double x1,y1,z1,x2,y2,z2,x3,y3,z3;