switch linear pattern to coordinate system axis
This commit is contained in:
parent
4c29efea1f
commit
d6440b4143
|
@ -109,12 +109,16 @@ DocumentObject *GeoFeatureGroup::getObject(const char *Name) const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeoFeatureGroup::hasObject(const DocumentObject* obj) const
|
bool GeoFeatureGroup::hasObject(const DocumentObject* obj, bool recursive) const
|
||||||
{
|
{
|
||||||
const std::vector<DocumentObject*>& grp = Items.getValues();
|
const std::vector<DocumentObject*>& grp = Items.getValues();
|
||||||
for (std::vector<DocumentObject*>::const_iterator it = grp.begin(); it != grp.end(); ++it) {
|
for (std::vector<DocumentObject*>::const_iterator it = grp.begin(); it != grp.end(); ++it) {
|
||||||
if (*it == obj)
|
if (*it == obj)
|
||||||
return true;
|
return true;
|
||||||
|
if (recursive && (*it)->getTypeId().isDerivedFrom(GeoFeatureGroup::getClassTypeId())) {
|
||||||
|
if (this->hasObject(static_cast<GeoFeatureGroup*>(*it), recursive))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -72,7 +72,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Checks whether the object \a obj is GeoFeatureGroup of this group.
|
* Checks whether the object \a obj is GeoFeatureGroup of this group.
|
||||||
*/
|
*/
|
||||||
bool hasObject(const DocumentObject* obj) const;
|
bool hasObject(const App::DocumentObject* obj, bool recursive = false) const;
|
||||||
/**
|
/**
|
||||||
* Checks whether this group object is a child (or sub-child)
|
* Checks whether this group object is a child (or sub-child)
|
||||||
* of the given group object.
|
* of the given group object.
|
||||||
|
|
|
@ -127,7 +127,7 @@ bool ViewProviderOrigin::isTemporaryVisibilityMode()
|
||||||
|
|
||||||
void ViewProviderOrigin::setTemporaryVisibilityAxis(bool onoff)
|
void ViewProviderOrigin::setTemporaryVisibilityAxis(bool onoff)
|
||||||
{
|
{
|
||||||
for(App::DocumentObject* obj : static_cast<App::Origin*>(pcObject)->getObjectsOfType(App::Plane::getClassTypeId())) {
|
for(App::DocumentObject* obj : static_cast<App::Origin*>(pcObject)->getObjectsOfType(App::Line::getClassTypeId())) {
|
||||||
|
|
||||||
Gui::ViewProvider* vp = tempVisDoc->getViewProvider(obj);
|
Gui::ViewProvider* vp = tempVisDoc->getViewProvider(obj);
|
||||||
vp->setVisible(onoff);
|
vp->setVisible(onoff);
|
||||||
|
@ -136,7 +136,7 @@ void ViewProviderOrigin::setTemporaryVisibilityAxis(bool onoff)
|
||||||
|
|
||||||
void ViewProviderOrigin::setTemporaryVisibilityPlanes(bool onoff)
|
void ViewProviderOrigin::setTemporaryVisibilityPlanes(bool onoff)
|
||||||
{
|
{
|
||||||
for(App::DocumentObject* obj : static_cast<App::Origin*>(pcObject)->getObjectsOfType(App::Line::getClassTypeId())) {
|
for(App::DocumentObject* obj : static_cast<App::Origin*>(pcObject)->getObjectsOfType(App::Plane::getClassTypeId())) {
|
||||||
|
|
||||||
Gui::ViewProvider* vp = tempVisDoc->getViewProvider(obj);
|
Gui::ViewProvider* vp = tempVisDoc->getViewProvider(obj);
|
||||||
vp->setVisible(onoff);
|
vp->setVisible(onoff);
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <Base/Exception.h>
|
#include <Base/Exception.h>
|
||||||
#include "App/Document.h"
|
#include "App/Document.h"
|
||||||
#include "App/Plane.h"
|
#include "App/Plane.h"
|
||||||
|
#include <App/Line.h>
|
||||||
#include "Body.h"
|
#include "Body.h"
|
||||||
#include "Feature.h"
|
#include "Feature.h"
|
||||||
#include "Mod/Part/App/DatumFeature.h"
|
#include "Mod/Part/App/DatumFeature.h"
|
||||||
|
@ -129,6 +130,7 @@ const Part::TopoShape Feature::getBaseTopoShape() const {
|
||||||
bool Feature::isDatum(const App::DocumentObject* feature)
|
bool Feature::isDatum(const App::DocumentObject* feature)
|
||||||
{
|
{
|
||||||
return feature->getTypeId().isDerivedFrom(App::Plane::getClassTypeId()) ||
|
return feature->getTypeId().isDerivedFrom(App::Plane::getClassTypeId()) ||
|
||||||
|
feature->getTypeId().isDerivedFrom(App::Line::getClassTypeId()) ||
|
||||||
feature->getTypeId().isDerivedFrom(Part::Datum::getClassTypeId());
|
feature->getTypeId().isDerivedFrom(Part::Datum::getClassTypeId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "DatumPlane.h"
|
#include "DatumPlane.h"
|
||||||
#include "DatumLine.h"
|
#include "DatumLine.h"
|
||||||
#include <App/Plane.h>
|
#include <App/Plane.h>
|
||||||
|
#include <App/Line.h>
|
||||||
#include <Base/Axis.h>
|
#include <Base/Axis.h>
|
||||||
#include <Base/Exception.h>
|
#include <Base/Exception.h>
|
||||||
#include <Mod/Part/App/TopoShape.h>
|
#include <Mod/Part/App/TopoShape.h>
|
||||||
|
@ -112,10 +113,10 @@ const std::list<gp_Trsf> LinearPattern::getTransformations(const std::vector<App
|
||||||
PartDesign::Line* line = static_cast<PartDesign::Line*>(refObject);
|
PartDesign::Line* line = static_cast<PartDesign::Line*>(refObject);
|
||||||
Base::Vector3d d = line->getDirection();
|
Base::Vector3d d = line->getDirection();
|
||||||
dir = gp_Dir(d.x, d.y, d.z);
|
dir = gp_Dir(d.x, d.y, d.z);
|
||||||
} else if (refObject->getTypeId().isDerivedFrom(App::Plane::getClassTypeId())) {
|
} else if (refObject->getTypeId().isDerivedFrom(App::Line::getClassTypeId())) {
|
||||||
App::Plane* plane = static_cast<App::Plane*>(refObject);
|
App::Line* line = static_cast<App::Line*>(refObject);
|
||||||
Base::Rotation rot = plane->Placement.getValue().getRotation();
|
Base::Rotation rot = line->Placement.getValue().getRotation();
|
||||||
Base::Vector3d d(0,0,1);
|
Base::Vector3d d(1,0,0);
|
||||||
rot.multVec(d, d);
|
rot.multVec(d, d);
|
||||||
dir = gp_Dir(d.x, d.y, d.z);
|
dir = gp_Dir(d.x, d.y, d.z);
|
||||||
} else if (refObject->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) {
|
} else if (refObject->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) {
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <App/Document.h>
|
#include <App/Document.h>
|
||||||
#include <App/Plane.h>
|
#include <App/Plane.h>
|
||||||
#include <App/Line.h>
|
#include <App/Line.h>
|
||||||
|
#include <App/Part.h>
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
#include <Gui/Document.h>
|
#include <Gui/Document.h>
|
||||||
#include <Gui/BitmapFactory.h>
|
#include <Gui/BitmapFactory.h>
|
||||||
|
@ -187,14 +188,21 @@ TaskDatumParameters::TaskDatumParameters(ViewProviderDatum *DatumView,QWidget *p
|
||||||
ui->lineRef3->blockSignals(false);
|
ui->lineRef3->blockSignals(false);
|
||||||
updateUI();
|
updateUI();
|
||||||
|
|
||||||
//temporary show all coordinate systems for selection
|
//temporary show coordinate systems for selection
|
||||||
for(auto origin : Gui::Application::Instance->activeDocument()->getViewProvidersOfType(Gui::ViewProviderOrigin::getClassTypeId())) {
|
for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType<App::Part>()) {
|
||||||
|
|
||||||
|
if(part->hasObject(DatumView->getObject(), true)) {
|
||||||
|
auto app_origin = part->getObjectsOfType(App::Origin::getClassTypeId());
|
||||||
|
if(!app_origin.empty()) {
|
||||||
|
ViewProviderOrigin* origin;
|
||||||
|
origin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->activeDocument()->getViewProvider(app_origin[0]));
|
||||||
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityMode(true, Gui::Application::Instance->activeDocument());
|
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityMode(true, Gui::Application::Instance->activeDocument());
|
||||||
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityAxis(true);
|
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityAxis(true);
|
||||||
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityPlanes(true);
|
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityPlanes(true);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString makeRefText(std::set<QString> hint)
|
const QString makeRefText(std::set<QString> hint)
|
||||||
|
@ -641,11 +649,19 @@ QString TaskDatumParameters::getReference(const int idx) const
|
||||||
|
|
||||||
TaskDatumParameters::~TaskDatumParameters()
|
TaskDatumParameters::~TaskDatumParameters()
|
||||||
{
|
{
|
||||||
//end temporary view mode of all coordinate systems
|
//end temporary view mode of coordinate system
|
||||||
for(auto origin : Gui::Application::Instance->activeDocument()->getViewProvidersOfType(Gui::ViewProviderOrigin::getClassTypeId())) {
|
for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType<App::Part>()) {
|
||||||
|
|
||||||
|
if(part->hasObject(DatumView->getObject(), true)) {
|
||||||
|
auto app_origin = part->getObjectsOfType(App::Origin::getClassTypeId());
|
||||||
|
if(!app_origin.empty()) {
|
||||||
|
ViewProviderOrigin* origin;
|
||||||
|
origin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->activeDocument()->getViewProvider(app_origin[0]));
|
||||||
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityMode(false);
|
static_cast<Gui::ViewProviderOrigin*>(origin)->setTemporaryVisibilityMode(false);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <App/Application.h>
|
#include <App/Application.h>
|
||||||
#include <App/Document.h>
|
#include <App/Document.h>
|
||||||
#include <App/Part.h>
|
#include <App/Part.h>
|
||||||
|
#include <App/Origin.h>
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
#include <Gui/Document.h>
|
#include <Gui/Document.h>
|
||||||
#include <Gui/BitmapFactory.h>
|
#include <Gui/BitmapFactory.h>
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
#include <Base/Console.h>
|
#include <Base/Console.h>
|
||||||
#include <Gui/Selection.h>
|
#include <Gui/Selection.h>
|
||||||
#include <Gui/Command.h>
|
#include <Gui/Command.h>
|
||||||
|
#include <Gui/ViewProviderOrigin.h>
|
||||||
#include <Mod/PartDesign/App/FeatureLinearPattern.h>
|
#include <Mod/PartDesign/App/FeatureLinearPattern.h>
|
||||||
#include <Mod/PartDesign/App/DatumPlane.h>
|
#include <Mod/PartDesign/App/DatumPlane.h>
|
||||||
#include <Mod/PartDesign/App/DatumLine.h>
|
#include <Mod/PartDesign/App/DatumLine.h>
|
||||||
|
@ -150,6 +152,21 @@ void TaskLinearPatternParameters::setupUI()
|
||||||
ui->spinLength->blockSignals(false);
|
ui->spinLength->blockSignals(false);
|
||||||
ui->spinOccurrences->setEnabled(true);
|
ui->spinOccurrences->setEnabled(true);
|
||||||
updateUI();
|
updateUI();
|
||||||
|
|
||||||
|
//show the parts coordinate system axis for selection
|
||||||
|
for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType<App::Part>()) {
|
||||||
|
|
||||||
|
if(part->hasObject(getObject(), true)) {
|
||||||
|
auto app_origin = part->getObjectsOfType(App::Origin::getClassTypeId());
|
||||||
|
if(!app_origin.empty()) {
|
||||||
|
ViewProviderOrigin* origin;
|
||||||
|
origin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->activeDocument()->getViewProvider(app_origin[0]));
|
||||||
|
origin->setTemporaryVisibilityMode(true, Gui::Application::Instance->activeDocument());
|
||||||
|
origin->setTemporaryVisibilityAxis(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TaskLinearPatternParameters::updateUI()
|
void TaskLinearPatternParameters::updateUI()
|
||||||
|
@ -183,11 +200,11 @@ void TaskLinearPatternParameters::updateUI()
|
||||||
ui->comboDirection->setCurrentIndex(0);
|
ui->comboDirection->setCurrentIndex(0);
|
||||||
else if (directions.front() == "V_Axis")
|
else if (directions.front() == "V_Axis")
|
||||||
ui->comboDirection->setCurrentIndex(1);
|
ui->comboDirection->setCurrentIndex(1);
|
||||||
else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaseplaneTypes[0]) == 0)
|
else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaselineTypes[0]) == 0)
|
||||||
ui->comboDirection->setCurrentIndex(2);
|
ui->comboDirection->setCurrentIndex(2);
|
||||||
else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaseplaneTypes[1]) == 0)
|
else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaselineTypes[1]) == 0)
|
||||||
ui->comboDirection->setCurrentIndex(3);
|
ui->comboDirection->setCurrentIndex(3);
|
||||||
else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaseplaneTypes[2]) == 0)
|
else if (strcmp(directionFeature->getNameInDocument(), App::Part::BaselineTypes[2]) == 0)
|
||||||
ui->comboDirection->setCurrentIndex(4);
|
ui->comboDirection->setCurrentIndex(4);
|
||||||
else if (directions.front().size() > 4 && directions.front().substr(0,4) == "Axis") {
|
else if (directions.front().size() > 4 && directions.front().substr(0,4) == "Axis") {
|
||||||
int pos = 5 + std::atoi(directions.front().substr(4,4000).c_str());
|
int pos = 5 + std::atoi(directions.front().substr(4,4000).c_str());
|
||||||
|
@ -270,6 +287,18 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges
|
||||||
ui->comboDirection->setCurrentIndex(maxcount);
|
ui->comboDirection->setCurrentIndex(maxcount);
|
||||||
ui->comboDirection->addItem(tr("Select reference..."));
|
ui->comboDirection->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<std::string> directions;
|
||||||
|
App::DocumentObject* selObj;
|
||||||
|
PartDesign::LinearPattern* pcLinearPattern = static_cast<PartDesign::LinearPattern*>(getObject());
|
||||||
|
getReferencedSelection(pcLinearPattern, msg, selObj, directions);
|
||||||
|
pcLinearPattern->Direction.setValue(selObj, directions);
|
||||||
|
|
||||||
|
recomputeFeature();
|
||||||
|
updateUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -329,17 +358,17 @@ void TaskLinearPatternParameters::onDirectionChanged(int num) {
|
||||||
exitSelectionMode();
|
exitSelectionMode();
|
||||||
}
|
}
|
||||||
else if (num == 2) {
|
else if (num == 2) {
|
||||||
pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[0]),
|
pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[0]),
|
||||||
std::vector<std::string>(1,""));
|
std::vector<std::string>(1,""));
|
||||||
exitSelectionMode();
|
exitSelectionMode();
|
||||||
}
|
}
|
||||||
else if (num == 3) {
|
else if (num == 3) {
|
||||||
pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[1]),
|
pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[1]),
|
||||||
std::vector<std::string>(1,""));
|
std::vector<std::string>(1,""));
|
||||||
exitSelectionMode();
|
exitSelectionMode();
|
||||||
}
|
}
|
||||||
else if (num == 4) {
|
else if (num == 4) {
|
||||||
pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[2]),
|
pcLinearPattern->Direction.setValue(getObject()->getDocument()->getObject(App::Part::BaselineTypes[2]),
|
||||||
std::vector<std::string>(1,""));
|
std::vector<std::string>(1,""));
|
||||||
exitSelectionMode();
|
exitSelectionMode();
|
||||||
}
|
}
|
||||||
|
@ -406,11 +435,11 @@ void TaskLinearPatternParameters::getDirection(App::DocumentObject*& obj, std::v
|
||||||
else if (num == 1)
|
else if (num == 1)
|
||||||
sub[0] = "V_Axis";
|
sub[0] = "V_Axis";
|
||||||
else if (num == 2)
|
else if (num == 2)
|
||||||
obj = getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[0]);
|
obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[0]);
|
||||||
else if (num == 3)
|
else if (num == 3)
|
||||||
obj = getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[1]);
|
obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[1]);
|
||||||
else if (num == 4)
|
else if (num == 4)
|
||||||
obj = getObject()->getDocument()->getObject(App::Part::BaseplaneTypes[2]);
|
obj = getObject()->getDocument()->getObject(App::Part::BaselineTypes[2]);
|
||||||
else if (num >= 5 && num < maxcount) {
|
else if (num >= 5 && num < maxcount) {
|
||||||
QString buf = QString::fromUtf8("Axis%1").arg(num-5);
|
QString buf = QString::fromUtf8("Axis%1").arg(num-5);
|
||||||
sub[0] = buf.toStdString();
|
sub[0] = buf.toStdString();
|
||||||
|
@ -442,6 +471,20 @@ const unsigned TaskLinearPatternParameters::getOccurrences(void) const
|
||||||
|
|
||||||
TaskLinearPatternParameters::~TaskLinearPatternParameters()
|
TaskLinearPatternParameters::~TaskLinearPatternParameters()
|
||||||
{
|
{
|
||||||
|
//hide the parts coordinate system axis for selection
|
||||||
|
for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType<App::Part>()) {
|
||||||
|
|
||||||
|
if(part->hasObject(getObject(), true)) {
|
||||||
|
auto app_origin = part->getObjectsOfType(App::Origin::getClassTypeId());
|
||||||
|
if(!app_origin.empty()) {
|
||||||
|
ViewProviderOrigin* origin;
|
||||||
|
origin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->activeDocument()->getViewProvider(app_origin[0]));
|
||||||
|
origin->setTemporaryVisibilityMode(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delete ui;
|
delete ui;
|
||||||
if (proxy)
|
if (proxy)
|
||||||
delete proxy;
|
delete proxy;
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>266</width>
|
<width>270</width>
|
||||||
<height>333</height>
|
<height>366</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -64,17 +64,17 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Base plane XY</string>
|
<string>Base X axis</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Base plane XZ</string>
|
<string>Base Y axis</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Base plane YZ</string>
|
<string>Base Z axis</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user