mesh segmentation algorithm for surfaces

This commit is contained in:
wmayer
2018-12-08 15:53:58 +01:00
parent c3e7a8c55e
commit 1471bb49d2
8 changed files with 431 additions and 13 deletions

View File

@@ -1759,7 +1759,7 @@ PyObject* MeshPy::getPlanarSegments(PyObject *args)
return NULL;
Mesh::MeshObject* mesh = getMeshObjectPtr();
std::vector<Mesh::Segment> segments = mesh->getSegmentsFromType
std::vector<Mesh::Segment> segments = mesh->getSegmentsOfType
(Mesh::MeshObject::PLANE, dev, minFacets);
Py::List s;
@@ -1779,6 +1779,50 @@ PyObject* MeshPy::getPlanarSegments(PyObject *args)
return Py::new_reference_to(s);
}
PyObject* MeshPy::getSegmentsOfType(PyObject *args)
{
char* type;
float dev;
unsigned long minFacets=0;
if (!PyArg_ParseTuple(args, "sf|k",&type,&dev,&minFacets))
return NULL;
Mesh::MeshObject::GeometryType geoType;
if (strcmp(type, "Plane") == 0) {
geoType = Mesh::MeshObject::PLANE;
}
else if (strcmp(type, "Cylinder") == 0) {
geoType = Mesh::MeshObject::CYLINDER;
}
else if (strcmp(type, "Sphere") == 0) {
geoType = Mesh::MeshObject::SPHERE;
}
else {
PyErr_SetString(PyExc_ValueError, "Unsupported surface type");
return nullptr;
}
Mesh::MeshObject* mesh = getMeshObjectPtr();
std::vector<Mesh::Segment> segments = mesh->getSegmentsOfType
(geoType, dev, minFacets);
Py::List s;
for (std::vector<Mesh::Segment>::iterator it = segments.begin(); it != segments.end(); ++it) {
const std::vector<unsigned long>& segm = it->getIndices();
Py::List ary;
for (std::vector<unsigned long>::const_iterator jt = segm.begin(); jt != segm.end(); ++jt) {
#if PY_MAJOR_VERSION >= 3
ary.append(Py::Long((int)*jt));
#else
ary.append(Py::Int((int)*jt));
#endif
}
s.append(ary);
}
return Py::new_reference_to(s);
}
PyObject* MeshPy::getSegmentsByCurvature(PyObject *args)
{
PyObject* l;