diff --git a/src/Mod/PartDesign/Gui/ReferenceSelection.cpp b/src/Mod/PartDesign/Gui/ReferenceSelection.cpp index ef943f762..8ae2c4ae2 100644 --- a/src/Mod/PartDesign/Gui/ReferenceSelection.cpp +++ b/src/Mod/PartDesign/Gui/ReferenceSelection.cpp @@ -116,6 +116,22 @@ bool ReferenceSelection::allow(App::Document* pDoc, App::DocumentObject* pObj, c namespace PartDesignGui { +void getReferencedSelection(const App::DocumentObject* thisObj, const Gui::SelectionChanges& msg, + App::DocumentObject*& selObj, std::vector& selSub) +{ + selObj = thisObj->getDocument()->getObject(msg.pObjectName); + if (selObj == thisObj) + return; + std::string subname = msg.pSubName; + + // Remove subname for planes and datum features + if (PartDesign::Feature::isDatum(selObj)) { + subname = ""; + } + + selSub = std::vector(1,subname); +} + const QString getRefStr(const App::DocumentObject* obj, const std::vector& sub) { if (obj == NULL) diff --git a/src/Mod/PartDesign/Gui/ReferenceSelection.h b/src/Mod/PartDesign/Gui/ReferenceSelection.h index 0055d65fa..8046be6c9 100644 --- a/src/Mod/PartDesign/Gui/ReferenceSelection.h +++ b/src/Mod/PartDesign/Gui/ReferenceSelection.h @@ -48,6 +48,9 @@ public: }; // Convenience methods +/// Extract reference from Selection +void getReferencedSelection(const App::DocumentObject* thisObj, const Gui::SelectionChanges& msg, + App::DocumentObject*& selObj, std::vector& selSub); /// Return reference as string for UI elements (format : const QString getRefStr(const App::DocumentObject* obj, const std::vector& sub); /// Return reference as string for python (format (, [""]) ) diff --git a/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp b/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp index c220b4683..3ca579e7e 100644 --- a/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskDraftParameters.cpp @@ -110,23 +110,6 @@ TaskDraftParameters::TaskDraftParameters(ViewProviderDraft *DraftView,QWidget *p ui->lineLine->setText(getRefStr(ref, strings)); } -void TaskDraftParameters::getReferencedSelection(const Gui::SelectionChanges& msg, - App::DocumentObject*& selObj, std::vector& selSub) -{ - PartDesign::DressUp* pcDressup = static_cast(DraftView->getObject()); - selObj = pcDressup->getDocument()->getObject(msg.pObjectName); - if (selObj == pcDressup) - return; - std::string subname = msg.pSubName; - - // Remove subname for planes and datum features - if (PartDesign::Feature::isDatum(selObj)) { - subname = ""; - } - - selSub = std::vector(1,subname); -} - void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { if (selectionMode == none) @@ -182,7 +165,7 @@ void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg) } else if ((selectionMode == plane)) { std::vector planes; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, planes); + getReferencedSelection(pcDraft, msg, selObj, planes); pcDraft->NeutralPlane.setValue(selObj, planes); ui->linePlane->setText(getRefStr(selObj, planes)); @@ -192,7 +175,7 @@ void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg) } else if ((selectionMode == line) && (subName.size() > 4 && subName.substr(0,4) == "Edge")) { std::vector edges; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, edges); + getReferencedSelection(pcDraft, msg, selObj, edges); pcDraft->PullDirection.setValue(selObj, edges); ui->lineLine->setText(getRefStr(selObj, edges)); diff --git a/src/Mod/PartDesign/Gui/TaskDraftParameters.h b/src/Mod/PartDesign/Gui/TaskDraftParameters.h index 3d93f389e..ac4e07fa1 100644 --- a/src/Mod/PartDesign/Gui/TaskDraftParameters.h +++ b/src/Mod/PartDesign/Gui/TaskDraftParameters.h @@ -83,10 +83,7 @@ private: ViewProviderDraft *DraftView; enum selectionModes { none, faceAdd, faceRemove, plane, line }; - selectionModes selectionMode; - - void getReferencedSelection(const Gui::SelectionChanges& msg, - App::DocumentObject*& selObj, std::vector& selSub); + selectionModes selectionMode; }; /// simulation dialog for the TaskView diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 6c1bcffaf..8117f9d94 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -239,8 +239,8 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges if (!blockUpdate) { std::vector directions; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, directions); PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + getReferencedSelection(pcLinearPattern, msg, selObj, directions); pcLinearPattern->Direction.setValue(selObj, directions); recomputeFeature(); @@ -256,7 +256,8 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges std::vector directions; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, directions); + PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + getReferencedSelection(pcLinearPattern, msg, selObj, directions); ui->comboDirection->addItem(getRefStr(selObj, directions)); ui->comboDirection->setCurrentIndex(maxcount); ui->comboDirection->addItem(tr("Select reference...")); diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 1c761560f..7bce4d695 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -195,8 +195,8 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg if (!blockUpdate) { std::vector mirrorPlanes; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, mirrorPlanes); PartDesign::Mirrored* pcMirrored = static_cast(getObject()); + getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); recomputeFeature(); @@ -212,7 +212,8 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg std::vector mirrorPlanes; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, mirrorPlanes); + PartDesign::Mirrored* pcMirrored = static_cast(getObject()); + getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); ui->comboPlane->addItem(getRefStr(selObj, mirrorPlanes)); ui->comboPlane->setCurrentIndex(maxcount); ui->comboPlane->addItem(tr("Select reference...")); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index eb3014a9a..9de3a6bcb 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -209,8 +209,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& if (!blockUpdate) { std::vector axes; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, axes); PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + getReferencedSelection(pcPolarPattern, msg, selObj, axes); pcPolarPattern->Axis.setValue(selObj, axes); recomputeFeature(); @@ -222,7 +222,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& std::vector axes; App::DocumentObject* selObj; - getReferencedSelection(msg, selObj, axes); + PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + getReferencedSelection(pcPolarPattern, msg, selObj, axes); ui->comboAxis->addItem(getRefStr(selObj, axes)); ui->comboAxis->setCurrentIndex(1); ui->comboAxis->addItem(tr("Select reference...")); diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 1c80e5ff1..34e4aed8c 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -228,23 +228,6 @@ void TaskTransformedParameters::addReferenceSelectionGate(bool edge, bool face) Gui::Selection().addSelectionGate(new ReferenceSelection(getSupportObject(), edge, face, true)); } -void TaskTransformedParameters::getReferencedSelection(const Gui::SelectionChanges& msg, - App::DocumentObject*& selObj, std::vector& selSub) -{ - PartDesign::Transformed* pcTransformed = static_cast(getObject()); - selObj = pcTransformed->getDocument()->getObject(msg.pObjectName); - if (selObj == pcTransformed) - return; - std::string subname = msg.pSubName; - - // Remove subname for planes and datum features - if (PartDesign::Feature::isDatum(selObj)) { - subname = ""; - } - - selSub = std::vector(1,subname); -} - //************************************************************************** //************************************************************************** // TaskDialog diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index ebcb0d47d..6c66db7cd 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -86,10 +86,7 @@ protected: void hideOriginals(); void showOriginals(); - void addReferenceSelectionGate(bool edge, bool face); - /// Extract reference from Selection (convenience method) - void getReferencedSelection(const Gui::SelectionChanges& msg, - App::DocumentObject*& selObj, std::vector& selSub); + void addReferenceSelectionGate(bool edge, bool face); bool isViewUpdated() const; int getUpdateViewTimeout() const;