const QString TaskSketchBasedParameters::onAddSelection(const Gui::SelectionChanges& msg) { // Note: The validity checking has already been done in ReferenceSelection.cpp PartDesign::ProfileBased* pcSketchBased = static_cast<PartDesign::ProfileBased*>(vp->getObject()); App::DocumentObject* selObj = pcSketchBased->getDocument()->getObject(msg.pObjectName); if (selObj == pcSketchBased) return QString::fromLatin1(""); std::string subname = msg.pSubName; QString refStr; // Remove subname for planes and datum features if (PartDesign::Feature::isDatum(selObj)) { subname = ""; refStr = QString::fromLatin1(selObj->getNameInDocument()); } else { int faceId = std::atoi(&subname[4]); refStr = QString::fromLatin1(selObj->getNameInDocument()) + QString::fromLatin1(":") + QObject::tr("Face") + QString::number(faceId); } std::vector<std::string> upToFaces(1,subname); pcSketchBased->UpToFace.setValue(selObj, upToFaces); recomputeFeature(); return refStr; }
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(); }
void TaskRevolutionParameters::getReferenceAxis(App::DocumentObject*& obj, std::vector<std::string>& sub) const { if (axesInList.size() == 0) throw Base::Exception("Not initialized!"); int num = ui->axis->currentIndex(); const App::PropertyLinkSub &lnk = *(axesInList[num]); if(lnk.getValue() == 0){ throw Base::Exception("Still in reference selection mode; reference wasn't selected yet"); } else { PartDesign::ProfileBased* pcRevolution = static_cast<PartDesign::ProfileBased*>(vp->getObject()); if (! pcRevolution->getDocument()->isIn(lnk.getValue())){ throw Base::Exception("Object was deleted"); return; } obj = lnk.getValue(); sub = lnk.getSubValues(); } }