diff --git a/src/Mod/PartDesign/App/FeaturePrimitive.cpp b/src/Mod/PartDesign/App/FeaturePrimitive.cpp index a7d7fb3a8..c752d2951 100644 --- a/src/Mod/PartDesign/App/FeaturePrimitive.cpp +++ b/src/Mod/PartDesign/App/FeaturePrimitive.cpp @@ -27,11 +27,15 @@ #include "FeaturePrimitive.h" +#include +#include #include #include #include #include +using namespace PartDesign; + namespace PartDesign { @@ -40,7 +44,7 @@ PROPERTY_SOURCE(PartDesign::FeaturePrimitive, PartDesign::FeatureAddSub) FeaturePrimitive::FeaturePrimitive() : primitiveType(Box) { - ADD_PROPERTY_TYPE(References, (0,0), "Primitive", (App::PropertyType)(App::Prop_None), "References to build the location of the primitive"); + ADD_PROPERTY(References, (0,0));//, "Primitive", (App::PropertyType)(App::Prop_None), "References to build the location of the primitive"); } App::DocumentObjectExecReturn* FeaturePrimitive::execute(const TopoDS_Shape& primitiveShape) @@ -51,8 +55,12 @@ App::DocumentObjectExecReturn* FeaturePrimitive::execute(const TopoDS_Shape& pri const TopoDS_Shape primitiveShape = mkTrf.Shape(); //if we have no base we just add the standart primitive shape - const TopoDS_Shape base = getBaseShape(); - if(base.IsNull()) { + TopoDS_Shape base; + try{ + base = getBaseShape(); + } + catch(const Base::Exception&) { + if(getAddSubType() == FeatureAddSub::Additive) Shape.setValue(primitiveShape); else @@ -63,6 +71,7 @@ App::DocumentObjectExecReturn* FeaturePrimitive::execute(const TopoDS_Shape& pri } if(getAddSubType() == FeatureAddSub::Additive) { + BRepAlgoAPI_Fuse mkFuse(base, primitiveShape); if (!mkFuse.IsDone()) return new App::DocumentObjectExecReturn("Adding the primitive failed"); @@ -105,8 +114,6 @@ TopLoc_Location FeaturePrimitive::calculateLocation() return TopLoc_Location(); } - - PROPERTY_SOURCE(PartDesign::Box, PartDesign::FeaturePrimitive) Box::Box() diff --git a/src/Mod/PartDesign/App/FeaturePrimitive.h b/src/Mod/PartDesign/App/FeaturePrimitive.h index 68a61bce2..c809a74fb 100644 --- a/src/Mod/PartDesign/App/FeaturePrimitive.h +++ b/src/Mod/PartDesign/App/FeaturePrimitive.h @@ -46,7 +46,7 @@ public: FeaturePrimitive(); virtual const char* getViewProviderName(void) const { - return "getViewProviderPrimitive"; + return "PartDesignGui::ViewProviderPrimitive"; } Type getPrimitiveType() {return primitiveType;}; @@ -65,7 +65,7 @@ protected: class PartDesignExport Box : public PartDesign::FeaturePrimitive { - PROPERTY_HEADER(Part::Box); + PROPERTY_HEADER(PartDesign::Box); public: diff --git a/src/Mod/PartDesign/Gui/CommandPrimitive.cpp b/src/Mod/PartDesign/Gui/CommandPrimitive.cpp index 94f9b049c..36493c39b 100644 --- a/src/Mod/PartDesign/Gui/CommandPrimitive.cpp +++ b/src/Mod/PartDesign/Gui/CommandPrimitive.cpp @@ -66,7 +66,7 @@ void CmdPrimtiveCompAdditive::activated(int iMsg) Gui::Command::openCommand("Make additive box"); Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject(\'PartDesign::AdditiveBox\',\'%s\')", FeatName.c_str()); - Gui::Command::doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)" + Gui::Command::doCommand(Doc,"App.activeDocument().%s.addFeature(App.activeDocument().%s)" ,pcActiveBody->getNameInDocument(), FeatName.c_str()); Gui::Command::doCommand(Gui::Command::Gui, "Gui.activeDocument().setEdit(\'%s\')", FeatName.c_str()); }