diff --git a/src/Gui/Selection.cpp b/src/Gui/Selection.cpp index feac45c46..6df5f3e2f 100644 --- a/src/Gui/Selection.cpp +++ b/src/Gui/Selection.cpp @@ -610,9 +610,17 @@ void SelectionSingleton::addSelectionGate(Gui::SelectionGate *gate) // remove the active SelectionGate void SelectionSingleton::rmvSelectionGate(void) { - if (ActiveGate) + if (ActiveGate) { delete ActiveGate; - ActiveGate=0; + ActiveGate=0; + Gui::Document* doc = Gui::Application::Instance->activeDocument(); + if (doc) { + Gui::MDIView* mdi = doc->getActiveView(); + if (mdi && mdi->isDerivedFrom(View3DInventor::getClassTypeId())) { + static_cast(mdi)->setCursor(Qt::ArrowCursor); + } + } + } } diff --git a/src/Mod/PartDesign/App/FeatureRevolution.cpp b/src/Mod/PartDesign/App/FeatureRevolution.cpp index c5018588f..84d0eba8e 100644 --- a/src/Mod/PartDesign/App/FeatureRevolution.cpp +++ b/src/Mod/PartDesign/App/FeatureRevolution.cpp @@ -107,8 +107,8 @@ App::DocumentObjectExecReturn *Revolution::execute(void) // get reference axis App::DocumentObject *pcReferenceAxis = ReferenceAxis.getValue(); const std::vector &subReferenceAxis = ReferenceAxis.getSubValues(); + bool hasValidAxis=false; if (pcReferenceAxis && pcReferenceAxis == sketch) { - bool hasValidAxis=false; Base::Axis axis; if (subReferenceAxis[0] == "V_Axis") { hasValidAxis = true; @@ -133,6 +133,9 @@ App::DocumentObjectExecReturn *Revolution::execute(void) Axis.setValue(dir.x,dir.y,dir.z); } } + if (!hasValidAxis) { + return new App::DocumentObjectExecReturn("No valid reference axis defined"); + } // get revolve axis Base::Vector3f b = Base.getValue(); diff --git a/src/Mod/PartDesign/App/FeatureTransformed.cpp b/src/Mod/PartDesign/App/FeatureTransformed.cpp index bf005ac00..5f43030ca 100644 --- a/src/Mod/PartDesign/App/FeatureTransformed.cpp +++ b/src/Mod/PartDesign/App/FeatureTransformed.cpp @@ -125,10 +125,14 @@ App::DocumentObjectExecReturn *Transformed::execute(void) if ((*o)->getTypeId().isDerivedFrom(PartDesign::Additive::getClassTypeId())) { PartDesign::Additive* addFeature = static_cast(*o); shape = addFeature->AddShape.getShape()._Shape; + if (shape.IsNull()) + return new App::DocumentObjectExecReturn("Shape of additive feature is empty"); fuse = true; } else if ((*o)->getTypeId().isDerivedFrom(PartDesign::Subtractive::getClassTypeId())) { PartDesign::Subtractive* subFeature = static_cast(*o); shape = subFeature->SubShape.getShape()._Shape; + if (shape.IsNull()) + return new App::DocumentObjectExecReturn("Shape of subtractive feature is empty"); fuse = false; } else { return new App::DocumentObjectExecReturn("Only additive and subtractive features can be transformed"); diff --git a/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp b/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp index e2a0e850c..9b97971ea 100644 --- a/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp @@ -315,6 +315,7 @@ App::DocumentObject* TaskDraftParameters::getBase(void) const TaskDraftParameters::~TaskDraftParameters() { + Gui::Selection().rmvSelectionGate(); delete ui; } diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp index 71bd26745..c5e6f75b9 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp @@ -104,7 +104,7 @@ TaskRevolutionParameters::TaskRevolutionParameters(ViewProviderRevolution *Revol } if (pos < 0 || pos >= ui->axis->count()) { - ui->axis->addItem(QString::fromAscii("Undefined")); + ui->axis->addItem(tr("Undefined")); pos = ui->axis->count()-1; } diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index b7fdb6fe6..f13165768 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -76,6 +76,12 @@ TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameter originalSelectionMode = false; } +TaskTransformedParameters::~TaskTransformedParameters() +{ + // make sure to remove selection gate in all cases + Gui::Selection().rmvSelectionGate(); +} + const bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& msg) { if (msg.Type == Gui::SelectionChanges::AddSelection && originalSelectionMode) { diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index 53b7206ad..e50610497 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -56,8 +56,7 @@ public: TaskTransformedParameters(ViewProviderTransformed *TransformedView, QWidget *parent = 0); /// Constructor for task with parent task (MultiTransform mode) TaskTransformedParameters(TaskMultiTransformParameters *parentTask); - virtual ~TaskTransformedParameters() - {} + virtual ~TaskTransformedParameters(); const std::vector getOriginals(void) const; /// Get the support object either of the object associated with this feature or with the parent feature (MultiTransform mode)