diff --git a/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp b/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp index b23fef1b6f..1f78d5760c 100644 --- a/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskHelixParameters.cpp @@ -479,28 +479,41 @@ void TaskHelixParameters::getReferenceAxis(App::DocumentObject*& obj, std::vecto } } +bool TaskHelixParameters::showPreview(PartDesign::Helix* helix) +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/PartDesign"); + if ((hGrp->GetBool("SubractiveHelixPreview", true) && helix->getAddSubType() == PartDesign::FeatureAddSub::Subtractive) || + (hGrp->GetBool("AdditiveHelixPreview", false) && helix->getAddSubType() == PartDesign::FeatureAddSub::Additive)) { + return true; + } + + return false; +} + void TaskHelixParameters::startReferenceSelection(App::DocumentObject* profile, App::DocumentObject* base) { - PartDesign::ProfileBased* pcHelix = dynamic_cast(vp->getObject()); - if (pcHelix->getAddSubType() == PartDesign::FeatureAddSub::Subtractive) { + PartDesign::Helix* pcHelix = dynamic_cast(vp->getObject()); + if (pcHelix && showPreview(pcHelix)) { Gui::Document* doc = vp->getDocument(); if (doc) { doc->setHide(profile->getNameInDocument()); } - } else { + } + else { TaskSketchBasedParameters::startReferenceSelection(profile, base); } } void TaskHelixParameters::finishReferenceSelection(App::DocumentObject* profile, App::DocumentObject* base) { - PartDesign::ProfileBased* pcHelix = dynamic_cast(vp->getObject()); - if (pcHelix->getAddSubType() == PartDesign::FeatureAddSub::Subtractive) { + PartDesign::Helix* pcHelix = dynamic_cast(vp->getObject()); + if (pcHelix && showPreview(pcHelix)) { Gui::Document* doc = vp->getDocument(); if (doc) { doc->setShow(profile->getNameInDocument()); } - } else { + } + else { TaskSketchBasedParameters::finishReferenceSelection(profile, base); } } diff --git a/src/Mod/PartDesign/Gui/TaskHelixParameters.h b/src/Mod/PartDesign/Gui/TaskHelixParameters.h index 6e5d3e6614..bb34d6c27b 100644 --- a/src/Mod/PartDesign/Gui/TaskHelixParameters.h +++ b/src/Mod/PartDesign/Gui/TaskHelixParameters.h @@ -31,8 +31,6 @@ #include "TaskSketchBasedParameters.h" #include "ViewProviderHelix.h" -class Ui_TaskHelixParameters; - namespace App { class Property; } @@ -42,6 +40,7 @@ class ViewProvider; } namespace PartDesignGui { +class Ui_TaskHelixParameters; @@ -55,6 +54,8 @@ public: virtual void apply() override; + static bool showPreview(PartDesign::Helix*); + /** * @brief fillAxisCombo fills the combo and selects the item according to * current value of revolution object's axis reference. diff --git a/src/Mod/PartDesign/Gui/ViewProviderHelix.cpp b/src/Mod/PartDesign/Gui/ViewProviderHelix.cpp index 67b5309174..dc4933c576 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderHelix.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderHelix.cpp @@ -78,10 +78,9 @@ QIcon ViewProviderHelix::getIcon(void) const { bool ViewProviderHelix::setEdit(int ModNum) { - if (ModNum == ViewProvider::Default ) { auto* prim = static_cast(getObject()); - setPreviewDisplayMode(prim->getAddSubType() == PartDesign::FeatureAddSub::Subtractive); + setPreviewDisplayMode(TaskHelixParameters::showPreview(prim)); } return ViewProviderAddSub::setEdit(ModNum); }