diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index 80df47a629..974b027428 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -491,7 +491,15 @@ mesh.getSegmentsByCurvature([c,p]) - + + + +getCurvaturePerVertex() -> list +The items in the list contains minimum and maximum curvature with their directions + + + + A collection of the mesh points With this attribute it is possible to get access to the points of the mesh diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 540394946e..eac9b096ac 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -1924,6 +1924,38 @@ PyObject* MeshPy::getSegmentsByCurvature(PyObject *args) return Py::new_reference_to(list); } +PyObject* MeshPy::getCurvaturePerVertex(PyObject* args) +{ + if (!PyArg_ParseTuple(args, "")) + return NULL; + + const MeshCore::MeshKernel& kernel = getMeshObjectPtr()->getKernel(); + MeshCore::MeshSegmentAlgorithm finder(kernel); + MeshCore::MeshCurvature meshCurv(kernel); + meshCurv.ComputePerVertex(); + + const std::vector& curv = meshCurv.GetCurvature(); + Py::List list; + for (const auto& it : curv) { + Py::Tuple tuple(4); + tuple.setItem(0, Py::Float(it.fMaxCurvature)); + tuple.setItem(1, Py::Float(it.fMinCurvature)); + Py::Tuple maxDir(3); + maxDir.setItem(0, Py::Float(it.cMaxCurvDir.x)); + maxDir.setItem(1, Py::Float(it.cMaxCurvDir.y)); + maxDir.setItem(2, Py::Float(it.cMaxCurvDir.z)); + tuple.setItem(2, maxDir); + Py::Tuple minDir(3); + minDir.setItem(0, Py::Float(it.cMinCurvDir.x)); + minDir.setItem(1, Py::Float(it.cMinCurvDir.y)); + minDir.setItem(2, Py::Float(it.cMinCurvDir.z)); + tuple.setItem(3, minDir); + list.append(tuple); + } + + return Py::new_reference_to(list); +} + Py::Long MeshPy::getCountPoints(void) const { return Py::Long((long)getMeshObjectPtr()->countPoints());