From ed27c9947d353c5f2a92de00a7f2d17754ec9026 Mon Sep 17 00:00:00 2001 From: tetektoza Date: Wed, 3 Sep 2025 07:17:24 +0200 Subject: [PATCH] Measurement: Provide correct VP name for COM (#23329) * Measurement: Provide correct VP name for COM This patch tries to provide proper ViewProvider name for COM, which results in a proper pixmap assignment, which won't fallback to the default measurement's tool icon for COM. Since MeasurePython runs before actual COM python proxy assignments, we can't access proxy easily from this point of code. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Measure: Use starts_with instead of find Co-authored-by: Chris Hennes * Update src/Mod/Measure/App/MeasureBase.cpp --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Chris Hennes --- src/Mod/Measure/App/MeasureBase.cpp | 12 ++++++++++++ src/Mod/Measure/Gui/AppMeasureGui.cpp | 1 + src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp | 1 + src/Mod/Measure/Gui/ViewProviderMeasureBase.h | 11 +++++++++++ 4 files changed, 25 insertions(+) diff --git a/src/Mod/Measure/App/MeasureBase.cpp b/src/Mod/Measure/App/MeasureBase.cpp index 10bfb64f55..0a6fb205c9 100644 --- a/src/Mod/Measure/App/MeasureBase.cpp +++ b/src/Mod/Measure/App/MeasureBase.cpp @@ -209,6 +209,18 @@ PROPERTY_SOURCE_TEMPLATE(Measure::MeasurePython, Measure::MeasureBase) template<> const char* Measure::MeasurePython::getViewProviderName(void) const { + std::string objName = this->getNameInDocument(); + + // check object's name, this is brute-forceish way to determine + // VP name for COM, but at this point python assignments haven't + // been run, so we have no way to determine that easily + if (objName.starts_with("Center_of_mass") + + || objName.find("CenterOfMass") != std::string::npos + || objName.find("centerofmass") != std::string::npos) { + return "MeasureGui::ViewProviderMeasureCOM"; + } + return "MeasureGui::ViewProviderMeasure"; } template<> diff --git a/src/Mod/Measure/Gui/AppMeasureGui.cpp b/src/Mod/Measure/Gui/AppMeasureGui.cpp index e282e00f9c..65f77deb8e 100644 --- a/src/Mod/Measure/Gui/AppMeasureGui.cpp +++ b/src/Mod/Measure/Gui/AppMeasureGui.cpp @@ -101,6 +101,7 @@ PyMOD_INIT_FUNC(MeasureGui) MeasureGui::ViewProviderMeasureLength ::init(); MeasureGui::ViewProviderMeasurePosition ::init(); MeasureGui::ViewProviderMeasureRadius ::init(); + MeasureGui::ViewProviderMeasureCOM ::init(); // clang-format on // register preferences pages diff --git a/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp b/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp index c66580701a..45e60e815c 100644 --- a/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp +++ b/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp @@ -733,3 +733,4 @@ PROPERTY_SOURCE(MeasureGui::ViewProviderMeasureArea, MeasureGui::ViewProviderMea PROPERTY_SOURCE(MeasureGui::ViewProviderMeasureLength, MeasureGui::ViewProviderMeasure) PROPERTY_SOURCE(MeasureGui::ViewProviderMeasurePosition, MeasureGui::ViewProviderMeasure) PROPERTY_SOURCE(MeasureGui::ViewProviderMeasureRadius, MeasureGui::ViewProviderMeasure) +PROPERTY_SOURCE(MeasureGui::ViewProviderMeasureCOM, MeasureGui::ViewProviderMeasure) diff --git a/src/Mod/Measure/Gui/ViewProviderMeasureBase.h b/src/Mod/Measure/Gui/ViewProviderMeasureBase.h index f101068577..499908274c 100644 --- a/src/Mod/Measure/Gui/ViewProviderMeasureBase.h +++ b/src/Mod/Measure/Gui/ViewProviderMeasureBase.h @@ -241,6 +241,17 @@ public: } }; +class ViewProviderMeasureCOM: public ViewProviderMeasure +{ + PROPERTY_HEADER(MeasureGui::ViewProviderMeasureCOM); + +public: + ViewProviderMeasureCOM() + { + sPixmap = "Measurement-CenterOfMass"; + } +}; + } // namespace MeasureGui