From c37c8658c4aa21eff3f1baccf41e2e11de99e3e9 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Mon, 18 Oct 2021 17:03:14 +0800 Subject: [PATCH] App/Gui: add new ObjectStatus TouchOnColorChange For triggering recompute on color changes --- src/App/DocumentObject.h | 1 + src/Gui/ViewProviderGeometryObject.cpp | 2 ++ src/Mod/Part/Gui/ViewProviderExt.cpp | 7 +++++++ 3 files changed, 10 insertions(+) diff --git a/src/App/DocumentObject.h b/src/App/DocumentObject.h index eb9a949d0b..b747d73eca 100644 --- a/src/App/DocumentObject.h +++ b/src/App/DocumentObject.h @@ -65,6 +65,7 @@ enum ObjectStatus { NoAutoExpand = 17, // disable tree item auto expand on selection for this object PendingTransactionUpdate = 18, // mark that the object expects a call to onUndoRedoFinished() after transaction is finished. RecomputeExtension = 19, // mark the object to recompute its extensions + TouchOnColorChange = 20, // inform view provider touch object on color change }; /** Return object for feature execution diff --git a/src/Gui/ViewProviderGeometryObject.cpp b/src/Gui/ViewProviderGeometryObject.cpp index 5d0f0c9b5d..3d621fac9f 100644 --- a/src/Gui/ViewProviderGeometryObject.cpp +++ b/src/Gui/ViewProviderGeometryObject.cpp @@ -157,6 +157,8 @@ void ViewProviderGeometryObject::onChanged(const App::Property* prop) } } else if (prop == &ShapeMaterial) { + if (getObject() && getObject()->testStatus(App::ObjectStatus::TouchOnColorChange)) + getObject()->touch(true); const App::Material& Mat = ShapeMaterial.getValue(); long value = (long)(100*Mat.transparency); if (value != Transparency.getValue()) diff --git a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp index 0bb3ee76d8..108dc5dc25 100644 --- a/src/Mod/Part/Gui/ViewProviderExt.cpp +++ b/src/Mod/Part/Gui/ViewProviderExt.cpp @@ -624,6 +624,9 @@ std::vector ViewProviderPartExt::getSelectionShape(const char* / void ViewProviderPartExt::setHighlightedFaces(const std::vector& colors) { + if (getObject() && getObject()->testStatus(App::ObjectStatus::TouchOnColorChange)) + getObject()->touch(true); + Gui::SoUpdateVBOAction action; action.apply(this->faceset); @@ -779,6 +782,8 @@ void ViewProviderPartExt::unsetHighlightedFaces() void ViewProviderPartExt::setHighlightedEdges(const std::vector& colors) { + if (getObject() && getObject()->testStatus(App::ObjectStatus::TouchOnColorChange)) + getObject()->touch(true); int size = static_cast(colors.size()); if (size > 1) { // Although indexed lineset is used the material binding must be PER_FACE! @@ -814,6 +819,8 @@ void ViewProviderPartExt::unsetHighlightedEdges() void ViewProviderPartExt::setHighlightedPoints(const std::vector& colors) { + if (getObject() && getObject()->testStatus(App::ObjectStatus::TouchOnColorChange)) + getObject()->touch(true); int size = static_cast(colors.size()); if (size > 1) { #if 0