diff --git a/src/Mod/PartDesign/App/Body.cpp b/src/Mod/PartDesign/App/Body.cpp index 2a799e5533..25948d3fb0 100644 --- a/src/Mod/PartDesign/App/Body.cpp +++ b/src/Mod/PartDesign/App/Body.cpp @@ -529,6 +529,11 @@ void Body::onDocumentRestored() static_cast(obj)->_Body.setValue(this); } _GroupTouched.setStatus(App::Property::Output,true); + + // trigger ViewProviderBody::copyColorsfromTip + if (Tip.getValue()) + Tip.touch(); + DocumentObject::onDocumentRestored(); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp index 3a4b0c2031..ccb67a677d 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp @@ -227,11 +227,22 @@ void ViewProviderBody::updateData(const App::Property* prop) static_cast(vp)->setTipIcon(feature == tip); } } + + if (tip) + copyColorsfromTip(tip); } PartGui::ViewProviderPart::updateData(prop); } +void ViewProviderBody::copyColorsfromTip(App::DocumentObject* tip) { + // update DiffuseColor + Gui::ViewProvider* vptip = Gui::Application::Instance->getViewProvider(tip); + if (vptip && vptip->isDerivedFrom(PartGui::ViewProviderPartExt::getClassTypeId())) { + auto colors = static_cast(vptip)->DiffuseColor.getValues(); + this->DiffuseColor.setValues(colors); + } +} void ViewProviderBody::slotChangedObjectApp ( const App::DocumentObject& obj, const App::Property& prop ) { diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.h b/src/Mod/PartDesign/Gui/ViewProviderBody.h index dc2a490c01..3650857d2f 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.h +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.h @@ -94,6 +94,10 @@ protected: void unifyVisualProperty(const App::Property* prop); /// Set Feature viewprovider into visual body mode void setVisualBodyMode(bool bodymode); + +private: + void copyColorsfromTip(App::DocumentObject* tip); + private: static const char* BodyModeEnum[];