From d923bebcccd43258615197f1491b6eb8560fa6fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Mon, 11 May 2015 20:32:44 +0200 Subject: [PATCH] make transform features work with non-sketch based features --- src/Mod/PartDesign/App/FeatureTransformed.cpp | 3 + src/Mod/PartDesign/Gui/Command.cpp | 45 ++++++--- .../Gui/TaskLinearPatternParameters.cpp | 88 +++++++++++------- .../Gui/TaskLinearPatternParameters.ui | 33 +------ .../PartDesign/Gui/TaskMirroredParameters.cpp | 93 ++++++++++++------- .../PartDesign/Gui/TaskMirroredParameters.ui | 35 +------ .../Gui/TaskPolarPatternParameters.cpp | 91 +++++++++++++----- .../Gui/TaskPolarPatternParameters.ui | 28 +----- 8 files changed, 219 insertions(+), 197 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureTransformed.cpp b/src/Mod/PartDesign/App/FeatureTransformed.cpp index b8687e04f..8ab0d0097 100644 --- a/src/Mod/PartDesign/App/FeatureTransformed.cpp +++ b/src/Mod/PartDesign/App/FeatureTransformed.cpp @@ -90,6 +90,9 @@ App::DocumentObject* Transformed::getSketchObject() const if (!originals.empty() && originals.front()->getTypeId().isDerivedFrom(PartDesign::SketchBased::getClassTypeId())) { return (static_cast(originals.front()))->getVerifiedSketch(); } + else if (!originals.empty() && originals.front()->getTypeId().isDerivedFrom(PartDesign::FeatureAddSub::getClassTypeId())) { + return NULL; + } else if (this->getTypeId().isDerivedFrom(LinearPattern::getClassTypeId())) { // if Originals is empty then try the linear pattern's Direction property const LinearPattern* pattern = static_cast(this); diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index f3a60a658..5b8f7777c 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -1645,10 +1645,16 @@ void CmdPartDesignMirrored::activated(int iMsg) if (features.empty()) return; - Part::Part2DObject *sketch = (static_cast(features.front()))->getVerifiedSketch(); - if (sketch) - Gui::Command::doCommand(Doc,"App.activeDocument().%s.MirrorPlane = (App.activeDocument().%s, [\"V_Axis\"])", - FeatName.c_str(), sketch->getNameInDocument()); + if(features.front()->isDerivedFrom(PartDesign::SketchBased::getClassTypeId())) { + Part::Part2DObject *sketch = (static_cast(features.front()))->getVerifiedSketch(); + if (sketch) + Gui::Command::doCommand(Doc,"App.activeDocument().%s.MirrorPlane = (App.activeDocument().%s, [\"V_Axis\"])", + FeatName.c_str(), sketch->getNameInDocument()); + } + else { + doCommand(Doc,"App.activeDocument().%s.MirrorPlane = (App.activeDocument().%s, [\"\"])", FeatName.c_str(), + App::Part::BaseplaneTypes[0]); + } finishTransformed(cmd, FeatName); }; @@ -1684,12 +1690,18 @@ void CmdPartDesignLinearPattern::activated(int iMsg) auto worker = [cmd](std::string FeatName, std::vector features) { if (features.empty()) - return; + return; - Part::Part2DObject *sketch = (static_cast(features.front()))->getVerifiedSketch(); - if (sketch) - doCommand(Doc,"App.activeDocument().%s.Direction = (App.activeDocument().%s, [\"H_Axis\"])", - FeatName.c_str(), sketch->getNameInDocument()); + if(features.front()->isDerivedFrom(PartDesign::SketchBased::getClassTypeId())) { + Part::Part2DObject *sketch = (static_cast(features.front()))->getVerifiedSketch(); + if (sketch) + doCommand(Doc,"App.activeDocument().%s.Direction = (App.activeDocument().%s, [\"H_Axis\"])", + FeatName.c_str(), sketch->getNameInDocument()); + } + else { + doCommand(Doc,"App.activeDocument().%s.Direction = (App.activeDocument().%s, [\"\"])", FeatName.c_str(), + App::Part::BaselineTypes[0]); + } doCommand(Doc,"App.activeDocument().%s.Length = 100", FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Occurrences = 2", FeatName.c_str()); @@ -1728,10 +1740,17 @@ void CmdPartDesignPolarPattern::activated(int iMsg) if (features.empty()) return; - Part::Part2DObject *sketch = (static_cast(features.front()))->getVerifiedSketch(); - if (sketch) - doCommand(Doc,"App.activeDocument().%s.Axis = (App.activeDocument().%s, [\"N_Axis\"])", - FeatName.c_str(), sketch->getNameInDocument()); + if(features.front()->isDerivedFrom(PartDesign::SketchBased::getClassTypeId())) { + Part::Part2DObject *sketch = (static_cast(features.front()))->getVerifiedSketch(); + if (sketch) + doCommand(Doc,"App.activeDocument().%s.Axis = (App.activeDocument().%s, [\"N_Axis\"])", + FeatName.c_str(), sketch->getNameInDocument()); + } + else { + doCommand(Doc,"App.activeDocument().%s.Axis = (App.activeDocument().%s, [\"\"])", FeatName.c_str(), + App::Part::BaselineTypes[0]); + } + doCommand(Doc,"App.activeDocument().%s.Angle = 360", FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Occurrences = 2", FeatName.c_str()); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 3e28289a4..1f7e65214 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -151,6 +151,18 @@ void TaskLinearPatternParameters::setupUI() ui->spinLength->setUnit(Base::Unit::Length); ui->spinLength->blockSignals(false); ui->spinOccurrences->setEnabled(true); + + + App::DocumentObject* sketch = getSketchObject(); + if (sketch) { + ui->comboDirection->addItem(QString::fromAscii("Horizontal sketch axis")); + ui->comboDirection->addItem(QString::fromAscii("Vertical sketch axis")); + } + //add the base axes to the selection combo box + ui->comboDirection->addItem(QString::fromAscii("Base X axis")); + ui->comboDirection->addItem(QString::fromAscii("Base Y axis")); + ui->comboDirection->addItem(QString::fromAscii("Base Z axis")); + ui->comboDirection->addItem(QString::fromAscii("Select reference...")); updateUI(); //show the parts coordinate system axis for selection @@ -185,11 +197,13 @@ void TaskLinearPatternParameters::updateUI() // Add user-defined sketch axes to the reference selection combo box App::DocumentObject* sketch = getSketchObject(); - int maxcount=5; - if (sketch) + int maxcount=3; + if (sketch) { + maxcount = 5; maxcount += static_cast(sketch)->getAxisCount(); + } - for (int i=ui->comboDirection->count()-1; i >= 5; i--) + for (int i=ui->comboDirection->count()-1; i >= maxcount; i--) ui->comboDirection->removeItem(i); for (int i=ui->comboDirection->count(); i < maxcount; i++) ui->comboDirection->addItem(QString::fromLatin1("Sketch axis %1").arg(i-5)); @@ -201,13 +215,13 @@ void TaskLinearPatternParameters::updateUI() else if (directions.front() == "V_Axis") ui->comboDirection->setCurrentIndex(1); else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaselineTypes[0]) == 0) - ui->comboDirection->setCurrentIndex(2); + ui->comboDirection->setCurrentIndex( sketch ? 2 : 0); else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaselineTypes[1]) == 0) - ui->comboDirection->setCurrentIndex(3); + ui->comboDirection->setCurrentIndex(sketch ? 3 : 1); else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaselineTypes[2]) == 0) - ui->comboDirection->setCurrentIndex(4); - else if (directions.front().size() > 4 && directions.front().substr(0,4) == "Axis") { - int pos = 5 + std::atoi(directions.front().substr(4,4000).c_str()); + ui->comboDirection->setCurrentIndex(sketch ? 4 : 2); + else if (directions.front().size() > (sketch ? 4 : 2) && directions.front().substr(0,4) == "Axis") { + int pos = (sketch ? 5 : 3) + std::atoi(directions.front().substr(4,4000).c_str()); if (pos <= maxcount) ui->comboDirection->setCurrentIndex(pos); else @@ -345,35 +359,39 @@ void TaskLinearPatternParameters::onDirectionChanged(int num) { PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); App::DocumentObject* pcSketch = getSketchObject(); - int maxcount=5; - if (pcSketch) + int maxcount=3; + if (pcSketch) { + maxcount = 5; maxcount += static_cast(pcSketch)->getAxisCount(); + } - if (num == 0) { - pcLinearPattern->Direction.setValue(pcSketch, std::vector(1,"H_Axis")); - exitSelectionMode(); + if(pcSketch) { + if (num == 0) { + pcLinearPattern->Direction.setValue(pcSketch, std::vector(1,"H_Axis")); + exitSelectionMode(); + } + else if (num == 1) { + pcLinearPattern->Direction.setValue(pcSketch, std::vector(1,"V_Axis")); + exitSelectionMode(); + } } - else if (num == 1) { - pcLinearPattern->Direction.setValue(pcSketch, std::vector(1,"V_Axis")); - exitSelectionMode(); - } - else if (num == 2) { + if (num == (pcSketch ? 2 : 0)) { pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[0]), std::vector(1,"")); exitSelectionMode(); } - else if (num == 3) { + else if (num == (pcSketch ? 3 : 1)) { pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[1]), std::vector(1,"")); exitSelectionMode(); } - else if (num == 4) { + else if (num == (pcSketch ? 4 : 2)) { pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[2]), std::vector(1,"")); exitSelectionMode(); } - else if (num >= 5 && num < maxcount) { - QString buf = QString::fromUtf8("Axis%1").arg(num-5); + else if (num >= (pcSketch ? 5 : 3) && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-(pcSketch ? 5 : 3)); std::string str = buf.toStdString(); pcLinearPattern->Direction.setValue(pcSketch, std::vector(1,str)); exitSelectionMode(); @@ -425,23 +443,27 @@ void TaskLinearPatternParameters::getDirection(App::DocumentObject*& obj, std::v { obj = getSketchObject(); sub = std::vector(1,""); - int maxcount=5; - if (obj) + int maxcount=3; + if (obj) { + maxcount = 5; maxcount += static_cast(obj)->getAxisCount(); + } int num = ui->comboDirection->currentIndex(); - if (num == 0) - sub[0] = "H_Axis"; - else if (num == 1) - sub[0] = "V_Axis"; - else if (num == 2) + if(obj) { + if (num == 0) + sub[0] = "H_Axis"; + else if (num == 1) + sub[0] = "V_Axis"; + } + if (num == (obj ? 2 : 0)) obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[0]); - else if (num == 3) + else if (num == (obj ? 3 : 1)) obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[1]); - else if (num == 4) + else if (num == (obj ? 4 : 2)) obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[2]); - else if (num >= 5 && num < maxcount) { - QString buf = QString::fromUtf8("Axis%1").arg(num-5); + else if (num >= (obj ? 5 : 3) && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-(obj ? 5 : 3)); sub[0] = buf.toStdString(); } else if (num == maxcount && ui->comboDirection->count() == maxcount + 2) { QStringList parts = ui->comboDirection->currentText().split(QChar::fromAscii(':')); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui index 2c1e034ef..88bb27173 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui @@ -51,38 +51,7 @@ - - - - Horizontal sketch axis - - - - - Vertical sketch axis - - - - - Base X axis - - - - - Base Y axis - - - - - Base Z axis - - - - - Select reference... - - - + diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 67552cf82..b7b626862 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -125,6 +125,17 @@ void TaskMirroredParameters::setupUI() // --------------------- ui->comboPlane->setEnabled(true); + + App::DocumentObject* sketch = getSketchObject(); + if (sketch) { + ui->comboPlane->addItem(QString::fromAscii("Horizontal sketch axis")); + ui->comboPlane->addItem(QString::fromAscii("Vertical sketch axis")); + } + //add the base axes to the selection combo box + ui->comboPlane->addItem(QString::fromAscii("Base XY axis")); + ui->comboPlane->addItem(QString::fromAscii("Base XZ axis")); + ui->comboPlane->addItem(QString::fromAscii("Base YZ axis")); + ui->comboPlane->addItem(QString::fromAscii("Select reference...")); updateUI(); //show the parts coordinate system axis for selection @@ -156,11 +167,13 @@ void TaskMirroredParameters::updateUI() // Add user-defined sketch axes to the reference selection combo box App::DocumentObject* sketch = getSketchObject(); - int maxcount=5; - if (sketch) + int maxcount=3; + if (sketch) { + maxcount = 5; maxcount += static_cast(sketch)->getAxisCount(); + } - for (int i=ui->comboPlane->count()-1; i >= 5; i--) + for (int i=ui->comboPlane->count()-1; i >= (sketch ? 5 : 3); i--) ui->comboPlane->removeItem(i); for (int i=ui->comboPlane->count(); i < maxcount; i++) ui->comboPlane->addItem(QString::fromLatin1("Sketch axis %1").arg(i-5)); @@ -172,13 +185,13 @@ void TaskMirroredParameters::updateUI() else if (mirrorPlanes.front() == "V_Axis") ui->comboPlane->setCurrentIndex(1); else if (strcmp(mirrorPlaneFeature->getNameInDocument(), App::Part::BaseplaneTypes[0]) == 0) - ui->comboPlane->setCurrentIndex(2); + ui->comboPlane->setCurrentIndex((sketch ? 2 : 0)); else if (strcmp(mirrorPlaneFeature->getNameInDocument(), App::Part::BaseplaneTypes[1]) == 0) - ui->comboPlane->setCurrentIndex(3); + ui->comboPlane->setCurrentIndex((sketch ? 3 : 1)); else if (strcmp(mirrorPlaneFeature->getNameInDocument(), App::Part::BaseplaneTypes[2]) == 0) - ui->comboPlane->setCurrentIndex(4); - else if (mirrorPlanes.front().size() > 4 && mirrorPlanes.front().substr(0,4) == "Axis") { - int pos = 5 + std::atoi(mirrorPlanes.front().substr(4,4000).c_str()); + ui->comboPlane->setCurrentIndex((sketch ? 4 : 2)); + else if (mirrorPlanes.front().size() > (sketch ? 4 : 2) && mirrorPlanes.front().substr(0,4) == "Axis") { + int pos = (sketch ? 5 : 3) + std::atoi(mirrorPlanes.front().substr(4,4000).c_str()); if (pos <= maxcount) ui->comboPlane->setCurrentIndex(pos); else @@ -228,9 +241,11 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg } else { App::DocumentObject* sketch = getSketchObject(); - int maxcount=5; - if (sketch) + int maxcount=3; + if (sketch) { + maxcount = 5; maxcount += static_cast(sketch)->getAxisCount(); + } for (int i=ui->comboPlane->count()-1; i >= maxcount; i--) ui->comboPlane->removeItem(i); @@ -270,35 +285,39 @@ void TaskMirroredParameters::onPlaneChanged(int num) { PartDesign::Mirrored* pcMirrored = static_cast(getObject()); App::DocumentObject* pcSketch = getSketchObject(); - int maxcount=5; - if (pcSketch) + int maxcount=3; + if (pcSketch) { + maxcount = 5; maxcount += static_cast(pcSketch)->getAxisCount(); + } - if (num == 0) { - pcMirrored->MirrorPlane.setValue(pcSketch, std::vector(1,"H_Axis")); - exitSelectionMode(); + if(pcSketch) { + if (num == 0) { + pcMirrored->MirrorPlane.setValue(pcSketch, std::vector(1,"H_Axis")); + exitSelectionMode(); + } + else if (num == 1) { + pcMirrored->MirrorPlane.setValue(pcSketch, std::vector(1,"V_Axis")); + exitSelectionMode(); + } } - else if (num == 1) { - pcMirrored->MirrorPlane.setValue(pcSketch, std::vector(1,"V_Axis")); - exitSelectionMode(); - } - else if (num == 2) { + if (num == (pcSketch ? 2 : 0)) { pcMirrored->MirrorPlane.setValue(getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[0]), std::vector(1,"")); exitSelectionMode(); } - else if (num == 3) { + else if (num == (pcSketch ? 3 : 1)) { pcMirrored->MirrorPlane.setValue(getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[1]), std::vector(1,"")); exitSelectionMode(); } - else if (num == 4) { + else if (num == (pcSketch ? 4 : 2)) { pcMirrored->MirrorPlane.setValue(getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[2]), std::vector(1,"")); exitSelectionMode(); } - else if (num >= 5 && num < maxcount) { - QString buf = QString::fromUtf8("Axis%1").arg(num-5); + else if (num >= (pcSketch ? 5 : 3) && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-(pcSketch ? 5 : 3)); std::string str = buf.toStdString(); pcMirrored->MirrorPlane.setValue(pcSketch, std::vector(1,str)); exitSelectionMode(); @@ -347,23 +366,27 @@ void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, std::vect { obj = getSketchObject(); sub = std::vector(1,""); - int maxcount=5; - if (obj) + int maxcount=3; + if (obj) { + maxcount = 5; maxcount += static_cast(obj)->getAxisCount(); + } int num = ui->comboPlane->currentIndex(); - if (num == 0) - sub[0] = "H_Axis"; - else if (num == 1) - sub[0] = "V_Axis"; - else if (num == 2) + if(obj) { + if (num == 0) + sub[0] = "H_Axis"; + else if (num == 1) + sub[0] = "V_Axis"; + } + if (num == (obj ? 2 : 0)) obj = getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[0]); - else if (num == 3) + else if (num == (obj ? 3 : 1)) obj = getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[1]); - else if (num == 4) + else if (num == (obj ? 4 : 2)) obj = getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[2]); - else if (num >= 5 && num < maxcount) { - QString buf = QString::fromUtf8("Axis%1").arg(num-5); + else if (num >= (obj ? 5 : 3) && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-(obj ? 5 : 3)); sub[0] = buf.toStdString(); } else if (num == maxcount && ui->comboPlane->count() == maxcount + 2) { QStringList parts = ui->comboPlane->currentText().split(QChar::fromAscii(':')); diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui b/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui index db0b364ce..c03461ab3 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui @@ -7,7 +7,7 @@ 0 0 253 - 235 + 260 @@ -51,38 +51,7 @@ - - - - Horizontal sketch axis - - - - - Vertical sketch axis - - - - - Base plane XY - - - - - Base plane XZ - - - - - Base plane YZ - - - - - Select reference... - - - + diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 5dc6ecb08..bf73280fc 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -146,6 +146,16 @@ void TaskPolarPatternParameters::setupUI() ui->checkReverse->setEnabled(true); ui->polarAngle->setEnabled(true); ui->spinOccurrences->setEnabled(true); + + App::DocumentObject* sketch = getSketchObject(); + if (sketch) { + ui->comboAxis->addItem(QString::fromAscii("Normal sketch axis")); + } + //add the base axes to the selection combo box + ui->comboAxis->addItem(QString::fromAscii("Base X axis")); + ui->comboAxis->addItem(QString::fromAscii("Base Y axis")); + ui->comboAxis->addItem(QString::fromAscii("Base Z axis")); + ui->comboAxis->addItem(QString::fromAscii("Select reference...")); updateUI(); //show the parts coordinate system axis for selection @@ -180,11 +190,13 @@ void TaskPolarPatternParameters::updateUI() // Add user-defined sketch axes to the reference selection combo box App::DocumentObject* sketch = getSketchObject(); - int maxcount=1; - if (sketch) + int maxcount=3; + if (sketch) { + maxcount = 4; maxcount += static_cast(sketch)->getAxisCount(); + } - for (int i=ui->comboAxis->count()-1; i >= 1; i--) + for (int i=ui->comboAxis->count()-1; i >= (sketch ? 4 : 3); i--) ui->comboAxis->removeItem(i); for (int i=ui->comboAxis->count(); i < maxcount; i++) ui->comboAxis->addItem(QString::fromAscii("Sketch axis %1").arg(i-1)); @@ -193,14 +205,14 @@ void TaskPolarPatternParameters::updateUI() if (axisFeature != NULL && !axes.empty()) { if (axes.front() == "N_Axis") { ui->comboAxis->setCurrentIndex(0); - } else if (strcmp(axes.front().c_str(), App::Part::BaselineTypes[0]) == 0) { - ui->comboAxis->setCurrentIndex(1); - } else if (strcmp(axes.front().c_str(), App::Part::BaselineTypes[1]) == 0) { - ui->comboAxis->setCurrentIndex(2); - } else if (strcmp(axes.front().c_str(), App::Part::BaselineTypes[2]) == 0) { - ui->comboAxis->setCurrentIndex(3); - } else if (axes.front().size() > 4 && axes.front().substr(0,4) == "Axis") { - int pos = 4 + std::atoi(axes.front().substr(4,4000).c_str()); + } else if (strcmp(axisFeature->getNameInDocument(), App::Part::BaselineTypes[0]) == 0) { + ui->comboAxis->setCurrentIndex((sketch ? 1 : 0)); + } else if (strcmp(axisFeature->getNameInDocument(), App::Part::BaselineTypes[1]) == 0) { + ui->comboAxis->setCurrentIndex((sketch ? 2 : 1)); + } else if (strcmp(axisFeature->getNameInDocument(), App::Part::BaselineTypes[2]) == 0) { + ui->comboAxis->setCurrentIndex((sketch ? 3 : 2)); + } else if (axes.front().size() > (sketch ? 4 : 3) && axes.front().substr(0,4) == "Axis") { + int pos = (sketch ? 4 : 3) + std::atoi(axes.front().substr(4,4000).c_str()); if (pos <= maxcount) ui->comboAxis->setCurrentIndex(pos); else @@ -338,16 +350,35 @@ void TaskPolarPatternParameters::onAxisChanged(int num) { PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); App::DocumentObject* pcSketch = getSketchObject(); - int maxcount=1; - if (pcSketch) + int maxcount=3; + if (pcSketch) { + maxcount = 4; maxcount += static_cast(pcSketch)->getAxisCount(); + } - if (num == 0) { - pcPolarPattern->Axis.setValue(getSketchObject(), std::vector(1,"N_Axis")); + if(pcSketch) { + if (num == 0) { + pcPolarPattern->Axis.setValue(getSketchObject(), std::vector(1,"N_Axis")); + exitSelectionMode(); + } + } + if (num == (pcSketch ? 1 : 0)) { + pcPolarPattern->Axis.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[0]), + std::vector(1,"")); exitSelectionMode(); } - else if (num >= 1 && num < maxcount) { - QString buf = QString::fromUtf8("Axis%1").arg(num-1); + else if (num == (pcSketch ? 2 : 1)) { + pcPolarPattern->Axis.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[1]), + std::vector(1,"")); + exitSelectionMode(); + } + else if (num == (pcSketch ? 3 : 2)) { + pcPolarPattern->Axis.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[2]), + std::vector(1,"")); + exitSelectionMode(); + } + else if (num >= (pcSketch ? 4 : 3) && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-(pcSketch ? 4 : 3)); std::string str = buf.toStdString(); pcPolarPattern->Axis.setValue(pcSketch, std::vector(1,str)); exitSelectionMode(); @@ -360,7 +391,7 @@ void TaskPolarPatternParameters::onAxisChanged(int num) { Gui::Selection().clearSelection(); addReferenceSelectionGate(true, false); } - else if (num == 1) + else if (num == maxcount) exitSelectionMode(); kickUpdateViewTimer(); @@ -400,16 +431,28 @@ void TaskPolarPatternParameters::getAxis(App::DocumentObject*& obj, std::vector< obj = getSketchObject(); sub = std::vector(1,""); int maxcount=1; - if (obj) + if (obj) { + maxcount = 4; maxcount += static_cast(obj)->getAxisCount(); + } int num = ui->comboAxis->currentIndex(); - if (ui->comboAxis->currentIndex() == 0) { - sub[0] = "N_Axis"; - } else if (num >= 1 && num < maxcount) { - QString buf = QString::fromUtf8("Axis%1").arg(num-1); + if(obj) { + if (ui->comboAxis->currentIndex() == 0) { + sub[0] = "N_Axis"; + } + } + if (num == (obj ? 1 : 0)) + obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[0]); + else if (num == (obj ? 2 : 1)) + obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[1]); + else if (num == (obj ? 3 : 2)) + obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[2]); + else if (num >= (obj ? 4 : 3) && num < maxcount) { + QString buf = QString::fromUtf8("Axis%1").arg(num-(obj ? 4 : 3)); sub[0] = buf.toStdString(); - } else if (num == maxcount && ui->comboAxis->count() == maxcount + 2) { + } + else if (num == maxcount && ui->comboAxis->count() == maxcount + 2) { QStringList parts = ui->comboAxis->currentText().split(QChar::fromAscii(':')); obj = getObject()->getDocument()->getObject(parts[0].toStdString().c_str()); if (parts.size() > 1) diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui index ffe6ab841..c9be696ea 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui @@ -51,33 +51,7 @@ - - - - Normal sketch axis - - - - - Base X axis - - - - - Base Y axis - - - - - Base Z axis - - - - - Select reference... - - - +