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 <chennes@pioneerlibrarysystem.org>

* 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 <chennes@pioneerlibrarysystem.org>
This commit is contained in:
tetektoza
2025-09-03 07:17:24 +02:00
committed by GitHub
parent 028ec944b3
commit ed27c9947d
4 changed files with 25 additions and 0 deletions

View File

@@ -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<>

View File

@@ -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

View File

@@ -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)

View File

@@ -241,6 +241,17 @@ public:
}
};
class ViewProviderMeasureCOM: public ViewProviderMeasure
{
PROPERTY_HEADER(MeasureGui::ViewProviderMeasureCOM);
public:
ViewProviderMeasureCOM()
{
sPixmap = "Measurement-CenterOfMass";
}
};
} // namespace MeasureGui