From 9fc5c2d8e4ad0ca4190bbd20ea3b2606acecc499 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 2 Sep 2023 23:39:21 +0200 Subject: [PATCH] Base: fixes #10462: mesh.unite() causes segementaion fault --- src/Base/Builder3D.cpp | 18 +++++++++++++++++- src/Base/Builder3D.h | 20 +++++++++++++++++--- tests/src/Base/Builder3D.cpp | 9 +++++---- tests/src/Base/CMakeLists.txt | 1 + 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/Base/Builder3D.cpp b/src/Base/Builder3D.cpp index 391cc2ceb3..e2ab5b4673 100644 --- a/src/Base/Builder3D.cpp +++ b/src/Base/Builder3D.cpp @@ -955,7 +955,8 @@ void InventorBuilder::endSeparator() * A more elaborate description of the constructor. */ Builder3D::Builder3D() - : InventorBuilder(result) + : result{} + , builder{result} { } @@ -1008,6 +1009,21 @@ void Builder3D::saveToFile(const char* FileName) file << result.str(); } +void Builder3D::addNode(const NodeItem& item) +{ + builder.addNode(item); +} + +void Builder3D::beginSeparator() +{ + builder.beginSeparator(); +} + +void Builder3D::endSeparator() +{ + builder.endSeparator(); +} + // ----------------------------------------------------------------------------- template diff --git a/src/Base/Builder3D.h b/src/Base/Builder3D.h index bad25860c0..6ba785d179 100644 --- a/src/Base/Builder3D.h +++ b/src/Base/Builder3D.h @@ -608,7 +608,6 @@ public: * \brief Closes the last added separator node. */ void endSeparator(); - /** @name Appearance handling */ private: void increaseIndent(); @@ -648,11 +647,11 @@ private: * \endcode * \see Base::ConsoleSingleton */ -class BaseExport Builder3D : public InventorBuilder +class BaseExport Builder3D { public: Builder3D(); - ~Builder3D() override; + ~Builder3D(); /// clear the string buffer void clear(); @@ -665,9 +664,24 @@ public: void saveToFile(const char* FileName); //@} + /*! + * \brief addNode + * Writes the content of the added node to the output stream. + */ + void addNode(const NodeItem&); + /*! + * \brief Sets a separator node. + */ + void beginSeparator(); + /*! + * \brief Closes the last added separator node. + */ + void endSeparator(); + private: /// the result string std::stringstream result; + InventorBuilder builder; }; /** diff --git a/tests/src/Base/Builder3D.cpp b/tests/src/Base/Builder3D.cpp index 6acea40a74..1337ec76ab 100644 --- a/tests/src/Base/Builder3D.cpp +++ b/tests/src/Base/Builder3D.cpp @@ -1,9 +1,10 @@ #include "gtest/gtest.h" -#include "Base/Builder3D.h" -#include +#include -TEST(Builder, one) +TEST(Builder3D, openInventor) { - QString ss {}; + Base::Builder3D builder; + builder.beginSeparator(); + builder.endSeparator(); } diff --git a/tests/src/Base/CMakeLists.txt b/tests/src/Base/CMakeLists.txt index 7f2d163409..fcdb9ee032 100644 --- a/tests/src/Base/CMakeLists.txt +++ b/tests/src/Base/CMakeLists.txt @@ -4,6 +4,7 @@ target_sources( ${CMAKE_CURRENT_SOURCE_DIR}/Axis.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Bitmask.cpp ${CMAKE_CURRENT_SOURCE_DIR}/BoundBox.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/Builder3D.cpp ${CMAKE_CURRENT_SOURCE_DIR}/CoordinateSystem.cpp ${CMAKE_CURRENT_SOURCE_DIR}/DualNumber.cpp ${CMAKE_CURRENT_SOURCE_DIR}/DualQuaternion.cpp