void TaskRevolutionParameters::onAxisChanged(int num) { if (blockUpdate) return; PartDesign::ProfileBased* pcRevolution = static_cast<PartDesign::ProfileBased*>(vp->getObject()); if(axesInList.size() == 0) return; App::DocumentObject *oldRefAxis = propReferenceAxis->getValue(); std::vector<std::string> oldSubRefAxis = propReferenceAxis->getSubValues(); App::PropertyLinkSub &lnk = *(axesInList[num]); if(lnk.getValue() == 0){ // enter reference selection mode TaskSketchBasedParameters::onSelectReference(true, true, false, true); } else { if (! pcRevolution->getDocument()->isIn(lnk.getValue())){ Base::Console().Error("Object was deleted\n"); return; } propReferenceAxis->Paste(lnk); exitSelectionMode(); } App::DocumentObject *newRefAxis = propReferenceAxis->getValue(); const std::vector<std::string> &newSubRefAxis = propReferenceAxis->getSubValues(); if (oldRefAxis != newRefAxis || oldSubRefAxis.size() != newSubRefAxis.size() || oldSubRefAxis[0] != newSubRefAxis[0]) { bool reversed = propReversed->getValue(); if(pcRevolution->isDerivedFrom(PartDesign::Revolution::getClassTypeId())) reversed = static_cast<PartDesign::Revolution*>(pcRevolution)->suggestReversed(); if(pcRevolution->isDerivedFrom(PartDesign::Groove::getClassTypeId())) reversed = static_cast<PartDesign::Groove*>(pcRevolution)->suggestReversed(); if (reversed != propReversed->getValue()) { propReversed->setValue(reversed); ui->checkBoxReversed->blockSignals(true); ui->checkBoxReversed->setChecked(reversed); ui->checkBoxReversed->blockSignals(false); } } recomputeFeature(); }
TaskRevolutionParameters::TaskRevolutionParameters(PartDesignGui::ViewProvider* RevolutionView, QWidget *parent) : TaskSketchBasedParameters(RevolutionView, parent, "PartDesign_Revolution",tr("Revolution parameters")) { // we need a separate container widget to add all controls to proxy = new QWidget(this); ui = new Ui_TaskRevolutionParameters(); ui->setupUi(proxy); QMetaObject::connectSlotsByName(this); connect(ui->revolveAngle, SIGNAL(valueChanged(double)), this, SLOT(onAngleChanged(double))); connect(ui->axis, SIGNAL(activated(int)), this, SLOT(onAxisChanged(int))); connect(ui->checkBoxMidplane, SIGNAL(toggled(bool)), this, SLOT(onMidplane(bool))); connect(ui->checkBoxReversed, SIGNAL(toggled(bool)), this, SLOT(onReversed(bool))); connect(ui->checkBoxUpdateView, SIGNAL(toggled(bool)), this, SLOT(onUpdateView(bool))); this->groupLayout()->addWidget(proxy); // Temporarily prevent unnecessary feature recomputes ui->revolveAngle->blockSignals(true); ui->axis->blockSignals(true); ui->checkBoxMidplane->blockSignals(true); ui->checkBoxReversed->blockSignals(true); //bind property mirrors PartDesign::ProfileBased* pcFeat = static_cast<PartDesign::ProfileBased*>(vp->getObject()); if (pcFeat->isDerivedFrom(PartDesign::Revolution::getClassTypeId())) { PartDesign::Revolution* rev = static_cast<PartDesign::Revolution*>(vp->getObject()); this->propAngle = &(rev->Angle); this->propMidPlane = &(rev->Midplane); this->propReferenceAxis = &(rev->ReferenceAxis); this->propReversed = &(rev->Reversed); } else { assert(pcFeat->isDerivedFrom(PartDesign::Groove::getClassTypeId())); PartDesign::Groove* rev = static_cast<PartDesign::Groove*>(vp->getObject()); this->propAngle = &(rev->Angle); this->propMidPlane = &(rev->Midplane); this->propReferenceAxis = &(rev->ReferenceAxis); this->propReversed = &(rev->Reversed); } double l = propAngle->getValue(); bool mirrored = propMidPlane->getValue(); bool reversed = propReversed->getValue(); ui->revolveAngle->setValue(l); blockUpdate = false; updateUI(); ui->checkBoxMidplane->setChecked(mirrored); ui->checkBoxReversed->setChecked(reversed); PartDesign::ProfileBased* sketchBased = static_cast<PartDesign::ProfileBased*>(vp->getObject()); // TODO This is quite ugly better redo it (2015-11-02, Fat-Zer) if ( sketchBased->isDerivedFrom(PartDesign::Revolution::getClassTypeId() ) ) { ui->revolveAngle->bind(static_cast<PartDesign::Revolution *> ( sketchBased )->Angle); } else if ( sketchBased->isDerivedFrom(PartDesign::Groove::getClassTypeId() ) ) { ui->revolveAngle->bind(static_cast<PartDesign::Groove *> ( sketchBased )->Angle); } ui->revolveAngle->blockSignals(false); ui->axis->blockSignals(false); ui->checkBoxMidplane->blockSignals(false); ui->checkBoxReversed->blockSignals(false); setFocus (); //show the parts coordinate system axis for selection PartDesign::Body * body = PartDesign::Body::findBodyOf ( vp->getObject () ); if(body) { try { App::Origin *origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; vpOrigin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(true, false); } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what () ); } } }