From 322080d4f114d0d27083729f3a2db53242ae3f4d Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 3 Aug 2022 17:56:24 +0200 Subject: [PATCH] Mesh: refactor MeshPy::writeInventor --- src/Mod/Mesh/App/Mesh.cpp | 30 ++++++++++++++++++++++++++++++ src/Mod/Mesh/App/Mesh.h | 1 + src/Mod/Mesh/App/MeshPyImp.cpp | 28 ++-------------------------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index 1a1ce46990..6111dc5271 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -564,6 +564,36 @@ void MeshObject::load(std::istream& in) #endif } +void MeshObject::writeInventor(std::ostream& str, float creaseangle) const +{ + const MeshCore::MeshPointArray& point = getKernel().GetPoints(); + const MeshCore::MeshFacetArray& faces = getKernel().GetFacets(); + + std::vector coords; + coords.reserve(point.size()); + std::copy(point.begin(), point.end(), std::back_inserter(coords)); + + std::vector indices; + indices.reserve(4 * faces.size()); + for (const auto& it : faces) { + indices.push_back(it._aulPoints[0]); + indices.push_back(it._aulPoints[1]); + indices.push_back(it._aulPoints[2]); + indices.push_back(-1); + } + + Base::InventorBuilder builder(str); + builder.beginSeparator(); + builder.addTransformation(getTransform()); + builder.addShapeHints(creaseangle); + builder.beginPoints(); + builder.addPoints(coords); + builder.endPoints(); + builder.addIndexedFaceSet(indices); + builder.endSeparator(); + builder.close(); +} + void MeshObject::addFacet(const MeshCore::MeshGeomFacet& facet) { _kernel.AddFacet(facet); diff --git a/src/Mod/Mesh/App/Mesh.h b/src/Mod/Mesh/App/Mesh.h index 922fffbe98..5e1f472c74 100644 --- a/src/Mod/Mesh/App/Mesh.h +++ b/src/Mod/Mesh/App/Mesh.h @@ -179,6 +179,7 @@ public: // Save and load in internal format void save(std::ostream&) const; void load(std::istream&); + void writeInventor(std::ostream& str, float creaseangle=0.0f) const; //@} /** @name Manipulation */ diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index eda2c9fcc9..b3df908f5c 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -25,7 +25,6 @@ #include #include -#include #include #include #include @@ -311,32 +310,9 @@ PyObject* MeshPy::writeInventor(PyObject *args) if (!PyArg_ParseTuple(args, "|f",&creaseangle)) return nullptr; - MeshObject* mesh = getMeshObjectPtr(); - const MeshCore::MeshFacetArray& faces = mesh->getKernel().GetFacets(); - std::vector indices; - std::vector coords; - coords.reserve(mesh->countPoints()); - for (MeshObject::const_point_iterator it = mesh->points_begin(); it != mesh->points_end(); ++it) - coords.emplace_back((float)it->x,(float)it->y,(float)it->z); - indices.reserve(4*faces.size()); - for (MeshCore::MeshFacetArray::_TConstIterator it = faces.begin(); it != faces.end(); ++it) { - indices.push_back(it->_aulPoints[0]); - indices.push_back(it->_aulPoints[1]); - indices.push_back(it->_aulPoints[2]); - indices.push_back(-1); - } - std::stringstream result; - Base::InventorBuilder builder(result); - builder.beginSeparator(); - builder.addShapeHints(creaseangle); - builder.beginPoints(); - builder.addPoints(coords); - builder.endPoints(); - builder.addIndexedFaceSet(indices); - builder.endSeparator(); - builder.close(); - + MeshObject* mesh = getMeshObjectPtr(); + mesh->writeInventor(result, creaseangle); return Py::new_reference_to(Py::String(result.str())); }