From 2aa4d2c21019f09c5b04dfee153d5032ec14737b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Thu, 7 May 2015 07:08:00 +0200 Subject: [PATCH] switch polar pattern to coordinate system axis --- .../PartDesign/App/FeaturePolarPattern.cpp | 7 +++ .../Gui/TaskPolarPatternParameters.cpp | 51 ++++++++++++++++++- .../Gui/TaskPolarPatternParameters.ui | 17 ++++++- 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/Mod/PartDesign/App/FeaturePolarPattern.cpp b/src/Mod/PartDesign/App/FeaturePolarPattern.cpp index a490ff4f3..c4f4980e7 100644 --- a/src/Mod/PartDesign/App/FeaturePolarPattern.cpp +++ b/src/Mod/PartDesign/App/FeaturePolarPattern.cpp @@ -38,6 +38,7 @@ #include #include #include +#include using namespace PartDesign; @@ -112,6 +113,12 @@ const std::list PolarPattern::getTransformations(const std::vectorgetDirection(); axdir = gp_Dir(dir.x, dir.y, dir.z); + } else if (refObject->getTypeId().isDerivedFrom(App::Line::getClassTypeId())) { + App::Line* line = static_cast(refObject); + Base::Rotation rot = line->Placement.getValue().getRotation(); + Base::Vector3d d(1,0,0); + rot.multVec(d, d); + axdir = gp_Dir(d.x, d.y, d.z); } else if (refObject->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) { if (subStrings[0].empty()) throw Base::Exception("No axis reference specified"); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 8f2ac2496..5dc6ecb08 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -145,6 +147,21 @@ void TaskPolarPatternParameters::setupUI() ui->polarAngle->setEnabled(true); ui->spinOccurrences->setEnabled(true); updateUI(); + + //show the parts coordinate system axis for selection + for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType()) { + + if(part->hasObject(getObject(), true)) { + auto app_origin = part->getObjectsOfType(App::Origin::getClassTypeId()); + if(!app_origin.empty()) { + ViewProviderOrigin* origin; + origin = static_cast(Gui::Application::Instance->activeDocument()->getViewProvider(app_origin[0])); + origin->setTemporaryVisibilityMode(true, Gui::Application::Instance->activeDocument()); + origin->setTemporaryVisibilityAxis(true); + } + break; + } + } } void TaskPolarPatternParameters::updateUI() @@ -176,8 +193,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 = 1 + std::atoi(axes.front().substr(4,4000).c_str()); + int pos = 4 + std::atoi(axes.front().substr(4,4000).c_str()); if (pos <= maxcount) ui->comboAxis->setCurrentIndex(pos); else @@ -257,6 +280,18 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& ui->comboAxis->setCurrentIndex(1); ui->comboAxis->addItem(tr("Select reference...")); } + } else if( strcmp(msg.pObjectName, App::Part::BaselineTypes[0]) == 0 || + strcmp(msg.pObjectName, App::Part::BaselineTypes[1]) == 0 || + strcmp(msg.pObjectName, App::Part::BaselineTypes[2]) == 0) { + + std::vector axes; + App::DocumentObject* selObj; + PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + getReferencedSelection(pcPolarPattern, msg, selObj, axes); + pcPolarPattern->Axis.setValue(selObj, axes); + + recomputeFeature(); + updateUI(); } } } @@ -402,6 +437,20 @@ const unsigned TaskPolarPatternParameters::getOccurrences(void) const TaskPolarPatternParameters::~TaskPolarPatternParameters() { + //hide the parts coordinate system axis for selection + for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType()) { + + if(part->hasObject(getObject(), true)) { + auto app_origin = part->getObjectsOfType(App::Origin::getClassTypeId()); + if(!app_origin.empty()) { + ViewProviderOrigin* origin; + origin = static_cast(Gui::Application::Instance->activeDocument()->getViewProvider(app_origin[0])); + origin->setTemporaryVisibilityMode(false); + } + break; + } + } + delete ui; if (proxy) delete proxy; diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui index 651ec335f..ffe6ab841 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui @@ -7,7 +7,7 @@ 0 0 253 - 333 + 366 @@ -57,6 +57,21 @@ Normal sketch axis + + + Base X axis + + + + + Base Y axis + + + + + Base Z axis + + Select reference...