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;