From 8b0d53358a89d6392b742e107f293b5e8a92c4ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Sat, 9 Apr 2016 10:54:26 +0200 Subject: [PATCH] PartDesign: Adopt primitive preview The preview was developed when the "one feature only" visibility rule was not yet introduced. This commit maks it work again. --- .../Gui/TaskPrimitiveParameters.cpp | 22 ++++--------------- src/Mod/PartDesign/Gui/ViewProvider.cpp | 10 +++++++++ src/Mod/PartDesign/Gui/ViewProvider.h | 6 +++++ src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp | 5 +++++ 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp b/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp index b09b99485..cc427a392 100644 --- a/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp @@ -621,10 +621,7 @@ TaskPrimitiveParameters::TaskPrimitiveParameters(ViewProviderPrimitive* Primitiv //make sure the relevant things are visible cs_visibility = vp->isVisible(); vp->Visibility.setValue(true); - if(prm->BaseFeature.getValue()) { - Gui::Application::Instance->activeDocument()->getViewProvider(prm->BaseFeature.getValue())->setVisible(true); - } - + parameter = new TaskDatumParameters(vp); Content.push_back(parameter); @@ -659,12 +656,7 @@ bool TaskPrimitiveParameters::accept() ViewProviderDatumCoordinateSystem* vp = static_cast( Gui::Application::Instance->activeDocument()->getViewProvider(cs)); vp->setVisible(cs_visibility); - - auto* prm = static_cast(vp_prm->getObject()); - if(prm->BaseFeature.getValue()) { - Gui::Application::Instance->activeDocument()->getViewProvider(prm->BaseFeature.getValue())->setVisible(false); - } - + connection.disconnect(); return true; } @@ -679,15 +671,9 @@ bool TaskPrimitiveParameters::reject() { ViewProviderDatumCoordinateSystem* vp = static_cast( Gui::Application::Instance->activeDocument()->getViewProvider(cs)); - if(vp) { + if(vp) vp->setVisible(cs_visibility); - - auto* prm = static_cast(vp_prm->getObject()); - if(prm->BaseFeature.getValue()) { - Gui::Application::Instance->activeDocument()->getViewProvider(prm->BaseFeature.getValue())->setVisible(false); - } - } - + connection.disconnect(); return true; } diff --git a/src/Mod/PartDesign/Gui/ViewProvider.cpp b/src/Mod/PartDesign/Gui/ViewProvider.cpp index fb30e4b30..e9e9217f0 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.cpp +++ b/src/Mod/PartDesign/Gui/ViewProvider.cpp @@ -25,6 +25,7 @@ #ifndef _PreComp_ # include +#include #endif #include @@ -237,3 +238,12 @@ void ViewProvider::setBodyMode(bool bodymode) { prop->setStatus(App::Property::Hidden, bodymode); } } + +void ViewProvider::makeTemporaryVisible(bool onoff) +{ + //make sure to not use the overridden versions, as they change proeprties + if(onoff) + Gui::ViewProvider::show(); + else + Gui::ViewProvider::hide(); +} diff --git a/src/Mod/PartDesign/Gui/ViewProvider.h b/src/Mod/PartDesign/Gui/ViewProvider.h index 14f5b516d..14ae46992 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.h +++ b/src/Mod/PartDesign/Gui/ViewProvider.h @@ -52,6 +52,12 @@ public: //visual properties, not the features. Hence setting body mode to true will hide most //viewprovider properties. void setBodyMode(bool bodymode); + + //makes this viewprovider visible in the scene graph without chaning any properties, + //not the visibility one and also not the display mode. This can be used to show the + //shape of this viewprovider from other viewproviders without doing anything to the + //document and properties. + void makeTemporaryVisible(bool); protected: virtual bool setEdit(int ModNum); diff --git a/src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp b/src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp index 14e1a28d3..282bf9ade 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderAddSub.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -282,4 +283,8 @@ void ViewProviderAddSub::setPreviewDisplayMode(bool onoff) { if(!onoff) { setDisplayMaskMode(displayMode.c_str()); } + + App::DocumentObject* obj = static_cast(getObject())->BaseFeature.getValue(); + if(obj) + static_cast(Gui::Application::Instance->getViewProvider(obj))->makeTemporaryVisible(onoff); }