diff --git a/src/Mod/PartDesign/App/FeaturePrimitive.cpp b/src/Mod/PartDesign/App/FeaturePrimitive.cpp index d583b5487..c35530f66 100644 --- a/src/Mod/PartDesign/App/FeaturePrimitive.cpp +++ b/src/Mod/PartDesign/App/FeaturePrimitive.cpp @@ -59,12 +59,12 @@ const App::PropertyQuantityConstraint::Constraints angleRangeU = {0.0,360.0,1.0} const App::PropertyQuantityConstraint::Constraints angleRangeV = {-90.0,90.0,1.0}; const App::PropertyQuantityConstraint::Constraints quantityRange = {0.0,FLT_MAX,0.1}; -PROPERTY_SOURCE(PartDesign::FeaturePrimitive, PartDesign::FeatureAddSub) +PROPERTY_SOURCE_WITH_EXTENSIONS(PartDesign::FeaturePrimitive, PartDesign::FeatureAddSub) FeaturePrimitive::FeaturePrimitive() : primitiveType(Box) { - ADD_PROPERTY_TYPE(CoordinateSystem, (0), "Primitive", App::Prop_None, "References to build the location of the primitive"); + Part::AttachExtension::initExtension(this); } TopoDS_Shape FeaturePrimitive::refineShapeIfActive(const TopoDS_Shape& oldShape) const @@ -84,11 +84,7 @@ App::DocumentObjectExecReturn* FeaturePrimitive::execute(const TopoDS_Shape& pri { try { //transform the primitive in the correct coordinance - App::DocumentObject* cs = CoordinateSystem.getValue(); - if(cs && cs->getTypeId() == PartDesign::CoordinateSystem::getClassTypeId()) - Placement.setValue(static_cast(cs)->Placement.getValue()); - else - Placement.setValue(Base::Placement()); + FeatureAddSub::execute(); //if we have no base we just add the standard primitive shape TopoDS_Shape base; diff --git a/src/Mod/PartDesign/App/FeaturePrimitive.h b/src/Mod/PartDesign/App/FeaturePrimitive.h index 29ed233a9..2f5a9c98c 100644 --- a/src/Mod/PartDesign/App/FeaturePrimitive.h +++ b/src/Mod/PartDesign/App/FeaturePrimitive.h @@ -28,13 +28,14 @@ #include #include "FeatureAddSub.h" +#include namespace PartDesign { -class PartDesignExport FeaturePrimitive : public PartDesign::FeatureAddSub +class PartDesignExport FeaturePrimitive : public PartDesign::FeatureAddSub, public Part::AttachExtension { - PROPERTY_HEADER(PartDesign::FeaturePrimitive); + PROPERTY_HEADER_WITH_EXTENSIONS(PartDesign::FeaturePrimitive); public: enum Type { @@ -57,9 +58,6 @@ public: TopoDS_Shape refineShapeIfActive(const TopoDS_Shape& oldShape) const; virtual void onChanged(const App::Property* prop); - /// The references datum defining the primtive location - App::PropertyLink CoordinateSystem; - /// Do nothing, just to suppress warning, must be redefined in derived classes virtual App::DocumentObjectExecReturn* execute() { return PartDesign::FeatureAddSub::execute(); diff --git a/src/Mod/PartDesign/Gui/CommandPrimitive.cpp b/src/Mod/PartDesign/Gui/CommandPrimitive.cpp index fbb60bd5a..9c21237f2 100644 --- a/src/Mod/PartDesign/Gui/CommandPrimitive.cpp +++ b/src/Mod/PartDesign/Gui/CommandPrimitive.cpp @@ -67,7 +67,6 @@ void CmdPrimtiveCompAdditive::activated(int iMsg) pcAction->setIcon(pcAction->actions().at(iMsg)->icon()); std::string FeatName; - std::string CSName = getUniqueObjectName("CoordinateSystem");; if(iMsg == 0) { FeatName = getUniqueObjectName("Box"); @@ -136,19 +135,12 @@ void CmdPrimtiveCompAdditive::activated(int iMsg) Gui::Command::doCommand(Doc,"App.ActiveDocument.%s.addFeature(App.activeDocument().%s)" ,pcActiveBody->getNameInDocument(), FeatName.c_str()); - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.addObject(\'PartDesign::CoordinateSystem\',\'%s\')", - CSName.c_str()); - Gui::Command::doCommand(Doc,"App.ActiveDocument.%s.addFeature(App.activeDocument().%s)" - ,pcActiveBody->getNameInDocument(), CSName.c_str()); - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.CoordinateSystem=(App.ActiveDocument.%s)", - FeatName.c_str(), CSName.c_str()); Gui::Command::updateActive(); auto* prm = static_cast(getDocument()->getObject(FeatName.c_str())); if (prm->BaseFeature.getValue()) doCommand(Gui,"Gui.activeDocument().hide(\"%s\")", prm->BaseFeature.getValue()->getNameInDocument()); - Gui::Command::doCommand(Gui, "Gui.activeDocument().hide(\'%s\')", CSName.c_str()); Gui::Command::doCommand(Gui, "Gui.activeDocument().setEdit(\'%s\')", FeatName.c_str()); } @@ -265,7 +257,6 @@ void CmdPrimtiveCompSubtractive::activated(int iMsg) } std::string FeatName; - std::string CSName = getUniqueObjectName("CoordinateSystem"); if(iMsg == 0) { FeatName = getUniqueObjectName("Box"); @@ -333,12 +324,6 @@ void CmdPrimtiveCompSubtractive::activated(int iMsg) Gui::Command::doCommand(Doc,"App.ActiveDocument.%s.addFeature(App.activeDocument().%s)" ,pcActiveBody->getNameInDocument(), FeatName.c_str()); - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.addObject(\'PartDesign::CoordinateSystem\',\'%s\')", - CSName.c_str()); - Gui::Command::doCommand(Doc,"App.ActiveDocument.%s.addFeature(App.activeDocument().%s)" - ,pcActiveBody->getNameInDocument(), CSName.c_str()); - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.CoordinateSystem=(App.ActiveDocument.%s)", - FeatName.c_str(), CSName.c_str()); Gui::Command::updateActive(); if (isActiveObjectValid() && (pcActiveBody != NULL)) { @@ -348,7 +333,6 @@ void CmdPrimtiveCompSubtractive::activated(int iMsg) } } - Gui::Command::doCommand(Gui, "Gui.activeDocument().hide(\'%s\')", CSName.c_str()); Gui::Command::doCommand(Gui, "Gui.activeDocument().setEdit(\'%s\')", FeatName.c_str()); } diff --git a/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp b/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp index 93fbe28e0..25087c5d0 100644 --- a/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.cpp @@ -601,36 +601,12 @@ TaskPrimitiveParameters::TaskPrimitiveParameters(ViewProviderPrimitive* Primitiv { assert(PrimitiveView); - - PartDesign::FeaturePrimitive* prm = static_cast(PrimitiveView->getObject()); - cs = static_cast(prm->CoordinateSystem.getValue()); - - //if no coordinate system exist we need to add one, it is highly important that it exists! - if(!cs) { - std::string CSName = App::GetApplication().getActiveDocument()->getUniqueObjectName("CoordinateSystem"); - cs = static_cast( - App::GetApplication().getActiveDocument()->addObject("PartDesign::CoordinateSystem", CSName.c_str())); - prm->CoordinateSystem.setValue(cs); - } - - ViewProviderDatumCoordinateSystem* vp = static_cast( - Gui::Application::Instance->activeDocument()->getViewProvider(cs)); - - assert(vp); - - //make sure the relevant things are visible - cs_visibility = vp->isVisible(); - vp->Visibility.setValue(true); - parameter = new TaskDatumParameters(vp); - Content.push_back(parameter); + //parameter = new TaskDatumParameters(vp); + //Content.push_back(parameter); primitive = new TaskBoxPrimitives(PrimitiveView); Content.push_back(primitive); - - //make sure we track changes from the coordinate system to the primitive position - auto bnd = boost::bind(&TaskPrimitiveParameters::objectChanged, this, _1, _2); - connection = vp_prm->getObject()->getDocument()->signalChangedObject.connect(bnd); } TaskPrimitiveParameters::~TaskPrimitiveParameters() @@ -638,25 +614,12 @@ TaskPrimitiveParameters::~TaskPrimitiveParameters() } -void TaskPrimitiveParameters::objectChanged(const App::DocumentObject& obj, const App::Property& p) -{ - if (&obj == cs && strcmp(p.getName(), "Placement")==0) { - vp_prm->getObject()->recomputeFeature(); - } -} - bool TaskPrimitiveParameters::accept() { primitive->setPrimitive(QString::fromUtf8(vp_prm->getObject()->getNameInDocument())); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); - ViewProviderDatumCoordinateSystem* vp = static_cast( - Gui::Application::Instance->activeDocument()->getViewProvider(cs)); - vp->setVisible(cs_visibility); - - connection.disconnect(); - return true; } @@ -666,15 +629,6 @@ bool TaskPrimitiveParameters::reject() Gui::Command::abortCommand(); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); - //if we did not delete the document object we need to set the visibilities right - ViewProviderDatumCoordinateSystem* vp = static_cast( - Gui::Application::Instance->activeDocument()->getViewProvider(cs)); - - if (vp) - vp->setVisible(cs_visibility); - - connection.disconnect(); - return true; } diff --git a/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.h b/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.h index 92c08aae3..370cb8e08 100644 --- a/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPrimitiveParameters.h @@ -113,8 +113,6 @@ public: TaskPrimitiveParameters(ViewProviderPrimitive *PrimitiveView); ~TaskPrimitiveParameters(); - void objectChanged(const App::DocumentObject&, const App::Property&); - protected: virtual QDialogButtonBox::StandardButtons getStandardButtons(void) const; @@ -122,12 +120,9 @@ protected: virtual bool reject(); private: - s::connection connection; TaskBoxPrimitives* primitive; TaskDatumParameters* parameter; - PartDesign::CoordinateSystem* cs; ViewProviderPrimitive* vp_prm; - bool cs_visibility; }; } //namespace PartDesignGui diff --git a/src/Mod/PartDesign/Gui/Utils.cpp b/src/Mod/PartDesign/Gui/Utils.cpp index c65861c4c..18f3ed8a5 100644 --- a/src/Mod/PartDesign/Gui/Utils.cpp +++ b/src/Mod/PartDesign/Gui/Utils.cpp @@ -355,13 +355,6 @@ bool isFeatureMovable(App::DocumentObject* const feat) return false; } - if (feat->getTypeId().isDerivedFrom(PartDesign::FeaturePrimitive::getClassTypeId())) { - auto prim = static_cast(feat); - - if (!isFeatureMovable(prim->CoordinateSystem.getValue())) - return false; - } - if (feat->getTypeId().isDerivedFrom(PartDesign::ProfileBased::getClassTypeId())) { auto prim = static_cast(feat); auto sk = prim->getVerifiedSketch(true); @@ -410,13 +403,6 @@ std::vector collectMovableDependencies(std::vectorgetTypeId().isDerivedFrom(PartDesign::FeaturePrimitive::getClassTypeId())) { - auto prim = static_cast(feat); - App::DocumentObject* cs = prim->CoordinateSystem.getValue(); - if (cs && cs->getTypeId() == PartDesign::CoordinateSystem::getClassTypeId()) - unique_objs.insert(cs); - } // Get sketches and datums from profile based features if (feat->getTypeId().isDerivedFrom(PartDesign::ProfileBased::getClassTypeId())) { diff --git a/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp b/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp index a3685b552..594ea49ec 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp @@ -121,13 +121,6 @@ void ViewProviderPrimitive::updateData(const App::Property* p) { PartDesignGui::ViewProviderAddSub::updateData(p); } -std::vector< App::DocumentObject* > ViewProviderPrimitive::claimChildren(void) const { - std::vector< App::DocumentObject* > vec; - vec.push_back(static_cast(getObject())->CoordinateSystem.getValue()); - - return vec; -} - QIcon ViewProviderPrimitive::getIcon(void) const { QString str = QString::fromLatin1("PartDesign_"); diff --git a/src/Mod/PartDesign/Gui/ViewProviderPrimitive.h b/src/Mod/PartDesign/Gui/ViewProviderPrimitive.h index fd7bc83b5..be7ec7a6f 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPrimitive.h +++ b/src/Mod/PartDesign/Gui/ViewProviderPrimitive.h @@ -40,7 +40,6 @@ public: /// destructor virtual ~ViewProviderPrimitive(); - virtual std::vector< App::DocumentObject* > claimChildren(void) const; virtual void attach(App::DocumentObject*); virtual void updateData(const App::Property*);