diff --git a/src/Mod/Mesh/App/Core/MeshIO.cpp b/src/Mod/Mesh/App/Core/MeshIO.cpp index 402bdcb04a..c850f86c98 100644 --- a/src/Mod/Mesh/App/Core/MeshIO.cpp +++ b/src/Mod/Mesh/App/Core/MeshIO.cpp @@ -2699,36 +2699,41 @@ bool MeshOutput::SaveInventor (std::ostream &rstrOut) const builder.addNode(label); // write out the normals of the facets - builder.beginNormal(); + std::vector normals; + normals.reserve(_rclMesh.CountFacets()); clIter.Begin(); clEnd.End(); while (clIter < clEnd) { pclFacet = &(*clIter); - builder.addPoint(pclFacet->GetNormal()); + normals.push_back(pclFacet->GetNormal()); ++clIter; seq.next(true); // allow to cancel } - builder.endNormal(); - + Base::NormalItem normal; + normal.setVector(normals); + builder.addNode(normal); // coordinates of the vertices - builder.addNormalBinding("PER_FACE"); + Base::NormalBindingItem binding; + binding.setValue(Base::BindingElement::Binding::PerFace); + builder.addNode(binding); - builder.beginPoints(); + std::vector coords; + coords.reserve(_rclMesh.CountPoints()); clPtIter.Begin(); clPtEnd.End(); while (clPtIter < clPtEnd) { - builder.addPoint(*clPtIter); + coords.push_back(*clPtIter); ++clPtIter; seq.next(true); // allow to cancel } - builder.endPoints(); + builder.addNode(Base::Coordinate3Item{coords}); // and finally the facets with their point indices const MeshFacetArray& faces = _rclMesh.GetFacets(); @@ -2740,7 +2745,7 @@ bool MeshOutput::SaveInventor (std::ostream &rstrOut) const indices.push_back(static_cast(it->_aulPoints[2])); indices.push_back(-1); } - builder.addIndexedFaceSet(indices); + builder.addNode(Base::IndexedFaceSetItem{indices}); builder.endSeparator(); return true; diff --git a/src/Mod/Mesh/App/Mesh.cpp b/src/Mod/Mesh/App/Mesh.cpp index dd43f88e5d..3adf84be1b 100644 --- a/src/Mod/Mesh/App/Mesh.cpp +++ b/src/Mod/Mesh/App/Mesh.cpp @@ -554,10 +554,8 @@ void MeshObject::writeInventor(std::ostream& str, float creaseangle) const builder.addTransformation(getTransform()); Base::ShapeHintsItem shapeHints{creaseangle}; builder.addNode(shapeHints); - builder.beginPoints(); - builder.addPoints(coords); - builder.endPoints(); - builder.addIndexedFaceSet(indices); + builder.addNode(Base::Coordinate3Item{coords}); + builder.addNode(Base::IndexedFaceSetItem{indices}); builder.endSeparator(); } diff --git a/src/Mod/Part/App/TopoShape.cpp b/src/Mod/Part/App/TopoShape.cpp index db2892d768..0e8664526d 100644 --- a/src/Mod/Part/App/TopoShape.cpp +++ b/src/Mod/Part/App/TopoShape.cpp @@ -1099,10 +1099,10 @@ void TopoShape::exportFaceSet(double dev, double ca, builder.addNode(material); } - builder.beginPoints(); - builder.addPoints(vertices); - builder.endPoints(); - builder.addIndexedFaceSet(indices); + Base::Coordinate3Item coords{vertices}; + builder.addNode(coords); + Base::IndexedFaceSetItem faceSet{indices}; + builder.addNode(faceSet); builder.endSeparator(); } builder.endSeparator(); diff --git a/src/Mod/Points/App/PointsPyImp.cpp b/src/Mod/Points/App/PointsPyImp.cpp index 18bba559be..9b9112b240 100644 --- a/src/Mod/Points/App/PointsPyImp.cpp +++ b/src/Mod/Points/App/PointsPyImp.cpp @@ -127,12 +127,14 @@ PyObject* PointsPy::writeInventor(PyObject * args) std::stringstream result; Base::InventorBuilder builder(result); builder.beginSeparator(); - builder.beginPoints(); + std::vector points; PointKernel* kernel = getPointKernelPtr(); - for (Points::PointKernel::const_iterator it = kernel->begin(); it != kernel->end(); ++it) - builder.addPoint(Base::convertTo(*it)); - builder.endPoints(); - builder.addPointSet(); + points.reserve(kernel->size()); + for (Points::PointKernel::const_iterator it = kernel->begin(); it != kernel->end(); ++it) { + points.push_back(Base::convertTo(*it)); + } + builder.addNode(Base::Coordinate3Item{points}); + builder.addNode(Base::PointSetItem{}); builder.endSeparator(); return Py::new_reference_to(Py::String(result.str()));