diff --git a/src/Mod/PartDesign/App/FeaturePolarPattern.cpp b/src/Mod/PartDesign/App/FeaturePolarPattern.cpp
index a490ff4f37..c4f4980e7f 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 8f2ac24964..5dc6ecb087 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 651ec335fe..ffe6ab8418 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...