From 75236d4b13d03411ad3d84973b6e0f81dbd6b16f Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 16 Apr 2025 12:23:00 +0200 Subject: [PATCH] Measure: Allow any surface type for MeasureArea --- src/Mod/Measure/App/MeasureArea.cpp | 12 ++++++++++-- src/Mod/Measure/App/MeasureArea.h | 1 + src/Mod/Part/App/MeasureClient.cpp | 5 ++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Mod/Measure/App/MeasureArea.cpp b/src/Mod/Measure/App/MeasureArea.cpp index e7b5d2f271..474c11a7cd 100644 --- a/src/Mod/Measure/App/MeasureArea.cpp +++ b/src/Mod/Measure/App/MeasureArea.cpp @@ -53,6 +53,15 @@ MeasureArea::MeasureArea() MeasureArea::~MeasureArea() = default; +bool MeasureArea::isSupported(App::MeasureElementType type) +{ + // clang-format off + return (type == App::MeasureElementType::PLANE) || + (type == App::MeasureElementType::CYLINDER) || + (type == App::MeasureElementType::SURFACE) || + (type == App::MeasureElementType::VOLUME); + // clang-format on +} bool MeasureArea::isValidSelection(const App::MeasureSelection& selection) { @@ -68,8 +77,7 @@ bool MeasureArea::isValidSelection(const App::MeasureSelection& selection) return false; } - if ((type != App::MeasureElementType::PLANE && type != App::MeasureElementType::CYLINDER - && type != App::MeasureElementType::SURFACE)) { + if (!isSupported(type)) { return false; } } diff --git a/src/Mod/Measure/App/MeasureArea.h b/src/Mod/Measure/App/MeasureArea.h index ecf7be5efa..c7f98a3897 100644 --- a/src/Mod/Measure/App/MeasureArea.h +++ b/src/Mod/Measure/App/MeasureArea.h @@ -79,6 +79,7 @@ public: private: + static bool isSupported(App::MeasureElementType type); void onChanged(const App::Property* prop) override; }; diff --git a/src/Mod/Part/App/MeasureClient.cpp b/src/Mod/Part/App/MeasureClient.cpp index 42b53d40d8..08c14315fc 100644 --- a/src/Mod/Part/App/MeasureClient.cpp +++ b/src/Mod/Part/App/MeasureClient.cpp @@ -189,6 +189,9 @@ App::MeasureElementType PartMeasureTypeCb(App::DocumentObject* ob, const char* s return App::MeasureElementType::SURFACE; } } } + case TopAbs_SHELL: { + return App::MeasureElementType::SURFACE; + } case TopAbs_SOLID: { return App::MeasureElementType::VOLUME; } @@ -341,7 +344,7 @@ MeasureAreaInfoPtr MeasureAreaHandler(const App::SubObjectT& subject) } TopAbs_ShapeEnum sType = shape.ShapeType(); - if (sType != TopAbs_FACE) { + if (sType != TopAbs_FACE && sType != TopAbs_SHELL && sType != TopAbs_SOLID) { return std::make_shared(false, 0.0, Base::Matrix4D()); }