make origin work correct with multiple parts
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include <App/Document.h>
|
||||
#include <App/Part.h>
|
||||
#include <App/Origin.h>
|
||||
#include <App/Line.h>
|
||||
#include <Gui/Application.h>
|
||||
#include <Gui/Document.h>
|
||||
#include <Gui/BitmapFactory.h>
|
||||
@@ -105,19 +106,16 @@ TaskRevolutionParameters::TaskRevolutionParameters(ViewProviderRevolution *Revol
|
||||
setFocus ();
|
||||
|
||||
//show the parts coordinate system axis for selection
|
||||
for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType<App::Part>()) {
|
||||
|
||||
if(part->hasObject(RevolutionView->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;
|
||||
}
|
||||
}
|
||||
App::Part* part = getPartFor(vp->getObject(), false);
|
||||
if(part) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TaskRevolutionParameters::updateUI()
|
||||
@@ -144,11 +142,13 @@ void TaskRevolutionParameters::updateUI()
|
||||
|
||||
bool undefined = false;
|
||||
if (pcReferenceAxis != NULL) {
|
||||
if(strcmp(pcReferenceAxis->getNameInDocument(), App::Part::BaselineTypes[0])==0)
|
||||
bool is_base_line = pcReferenceAxis->isDerivedFrom(App::Line::getClassTypeId());
|
||||
|
||||
if(is_base_line && strcmp(static_cast<App::Line*>(pcReferenceAxis)->LineType.getValue(), App::Part::BaselineTypes[0])==0)
|
||||
ui->axis->setCurrentIndex(0);
|
||||
else if(strcmp(pcReferenceAxis->getNameInDocument(), App::Part::BaselineTypes[1])==0)
|
||||
else if(is_base_line && strcmp(static_cast<App::Line*>(pcReferenceAxis)->LineType.getValue(), App::Part::BaselineTypes[1])==0)
|
||||
ui->axis->setCurrentIndex(1);
|
||||
else if(strcmp(pcReferenceAxis->getNameInDocument(), App::Part::BaselineTypes[2])==0)
|
||||
else if(is_base_line && strcmp(static_cast<App::Line*>(pcReferenceAxis)->LineType.getValue(), App::Part::BaselineTypes[2])==0)
|
||||
ui->axis->setCurrentIndex(2);
|
||||
else if(!sub.empty() && sub.front() == "H_Axis")
|
||||
ui->axis->setCurrentIndex(3);
|
||||
@@ -228,16 +228,13 @@ void TaskRevolutionParameters::onAxisChanged(int num)
|
||||
|
||||
int maxcount = pcSketch->getAxisCount()+5;
|
||||
if (num == 0) {
|
||||
pcRevolution->ReferenceAxis.setValue(pcRevolution->getDocument()->getObject(App::Part::BaselineTypes[0]),
|
||||
std::vector<std::string>(1,""));
|
||||
pcRevolution->ReferenceAxis.setValue(getPartLines(App::Part::BaselineTypes[0]), std::vector<std::string>(1,""));
|
||||
}
|
||||
else if (num == 1) {
|
||||
pcRevolution->ReferenceAxis.setValue(pcRevolution->getDocument()->getObject(App::Part::BaselineTypes[1]),
|
||||
std::vector<std::string>(1,""));
|
||||
pcRevolution->ReferenceAxis.setValue(getPartLines(App::Part::BaselineTypes[1]), std::vector<std::string>(1,""));
|
||||
}
|
||||
else if (num == 2) {
|
||||
pcRevolution->ReferenceAxis.setValue(pcRevolution->getDocument()->getObject(App::Part::BaselineTypes[2]),
|
||||
std::vector<std::string>(1,""));
|
||||
pcRevolution->ReferenceAxis.setValue(getPartLines(App::Part::BaselineTypes[2]), std::vector<std::string>(1,""));
|
||||
}
|
||||
else if (num == 3) {
|
||||
pcRevolution->ReferenceAxis.setValue(pcSketch, std::vector<std::string>(1,"H_Axis"));
|
||||
@@ -307,11 +304,11 @@ void TaskRevolutionParameters::getReferenceAxis(App::DocumentObject*& obj, std::
|
||||
if (obj) {
|
||||
int num = ui->axis->currentIndex();
|
||||
if(num == 0)
|
||||
obj = pcRevolution->getDocument()->getObject(App::Part::BaselineTypes[0]);
|
||||
obj = getPartLines(App::Part::BaselineTypes[0]);
|
||||
else if(num == 1)
|
||||
obj = pcRevolution->getDocument()->getObject(App::Part::BaselineTypes[1]);
|
||||
obj = getPartLines(App::Part::BaselineTypes[1]);
|
||||
else if(num == 2)
|
||||
obj = pcRevolution->getDocument()->getObject(App::Part::BaselineTypes[2]);
|
||||
obj = getPartLines(App::Part::BaselineTypes[2]);
|
||||
else if (num == 3)
|
||||
sub[0] = "H_Axis";
|
||||
else if (num == 4)
|
||||
@@ -345,18 +342,15 @@ bool TaskRevolutionParameters::getReversed(void) const
|
||||
TaskRevolutionParameters::~TaskRevolutionParameters()
|
||||
{
|
||||
//hide the parts coordinate system axis for selection
|
||||
for(App::Part* part : App::GetApplication().getActiveDocument()->getObjectsOfType<App::Part>()) {
|
||||
|
||||
if(part->hasObject(vp->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;
|
||||
}
|
||||
}
|
||||
App::Part* part = getPartFor(vp->getObject(), false);
|
||||
if(part) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user