void TaskSketchBasedParameters::onSelectReference(const bool pressed, const bool edge, const bool face, const bool planar) { // Note: Even if there is no solid, App::Plane and Part::Datum can still be selected PartDesign::ProfileBased* pcSketchBased = static_cast<PartDesign::ProfileBased*>(vp->getObject()); // The solid this feature will be fused to App::DocumentObject* prevSolid = pcSketchBased->getBaseObject( /* silent =*/ true ); if (pressed) { Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (doc) { if (pcSketchBased) doc->setHide(pcSketchBased->getNameInDocument()); if (prevSolid) doc->setShow(prevSolid->getNameInDocument()); } Gui::Selection().clearSelection(); Gui::Selection().addSelectionGate (new ReferenceSelection(prevSolid, edge, face, planar)); } else { Gui::Selection().rmvSelectionGate(); Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (doc) { if (pcSketchBased) doc->setShow(pcSketchBased->getNameInDocument()); if (prevSolid) doc->setHide(prevSolid->getNameInDocument()); } } }
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 Document::slotChangedObject(const App::DocumentObject& Obj, const App::Property& Prop) { //Base::Console().Log("Document::slotChangedObject() called\n"); ViewProvider* viewProvider = getViewProvider(&Obj); if (viewProvider) { try { viewProvider->update(&Prop); } catch(const Base::MemoryException& e) { Base::Console().Error("Memory exception in '%s' thrown: %s\n",Obj.getNameInDocument(),e.what()); } catch(Base::Exception& e){ e.ReportException(); } catch(const std::exception& e){ Base::Console().Error("C++ exception in '%s' thrown: %s\n",Obj.getNameInDocument(),e.what()); } catch (...) { Base::Console().Error("Cannot update representation for '%s'.\n", Obj.getNameInDocument()); } // check for children if(viewProvider->getChildRoot()) { std::vector<App::DocumentObject*> children = viewProvider->claimChildren3D(); SoGroup* childGroup = viewProvider->getChildRoot(); // size not the same -> build up the list new if(childGroup->getNumChildren() != children.size()){ childGroup->removeAllChildren(); for(std::vector<App::DocumentObject*>::iterator it=children.begin();it!=children.end();++it){ ViewProvider* ChildViewProvider = getViewProvider(*it); if(ChildViewProvider) { SoSeparator* childRootNode = ChildViewProvider->getRoot(); childGroup->addChild(childRootNode); // cycling to all views of the document to remove the viewprovider from the viewer itself for (std::list<Gui::BaseView*>::iterator vIt = d->baseViews.begin();vIt != d->baseViews.end();++vIt) { View3DInventor *activeView = dynamic_cast<View3DInventor *>(*vIt); if (activeView && viewProvider) { if (d->_pcInEdit == ChildViewProvider) resetEdit(); activeView->getViewer()->removeViewProvider(ChildViewProvider); } } } } } } if (viewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) signalChangedObject(static_cast<ViewProviderDocumentObject&>(*viewProvider), Prop); } // a property of an object has changed setModified(true); }
void CmdPartDesignMoveTip::activated(int iMsg) { Q_UNUSED(iMsg); std::vector<App::DocumentObject*> features = getSelection().getObjectsOfType( Part::Feature::getClassTypeId() ); App::DocumentObject* selFeature; PartDesign::Body* body= nullptr; if ( features.size() == 1 ) { selFeature = features.front(); if ( selFeature->getTypeId().isDerivedFrom ( PartDesign::Body::getClassTypeId() ) ) { body = static_cast<PartDesign::Body *> ( selFeature ); } else { body = PartDesignGui::getBodyFor ( selFeature, /* messageIfNot =*/ false ); } } else { selFeature = nullptr; } if (!selFeature) { QMessageBox::warning (0, QObject::tr( "Selection error" ), QObject::tr( "Select exactly one PartDesign feature or a body." ) ); return; } else if (!body) { QMessageBox::warning (0, QObject::tr( "Selection error" ), QObject::tr( "Couldn't determine a body for the selected feature '%s'.", selFeature->Label.getValue() ) ); return; } else if ( !selFeature->isDerivedFrom(PartDesign::Feature::getClassTypeId () ) && selFeature != body && body->BaseFeature.getValue() != selFeature ) { QMessageBox::warning (0, QObject::tr( "Selection error" ), QObject::tr( "Only a solid feature can be the tip of a body." ) ); return; } App::DocumentObject* oldTip = body->Tip.getValue(); if (oldTip == selFeature) { // it's not generally an error, so print only a console message Base::Console().Message ("%s is already the tip of the body", selFeature->getNameInDocument () ); return; } openCommand("Move tip to selected feature"); if (selFeature == body) { doCommand(Doc,"App.activeDocument().%s.Tip = None", body->getNameInDocument()); } else { doCommand(Doc,"App.activeDocument().%s.Tip = App.activeDocument().%s",body->getNameInDocument(), selFeature->getNameInDocument()); // Adjust visibility to show only the Tip feature doCommand(Gui,"Gui.activeDocument().show(\"%s\")", selFeature->getNameInDocument()); } // TOOD: Hide all datum features after the Tip feature? But the user might have already hidden some and wants to see // others, so we would have to remember their state somehow updateActive(); }
void MDIViewPage::onDeleteObject(const App::DocumentObject& obj) { //if this page has a QView for this obj, delete it. if (obj.isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { (void) m_view->removeQViewByName(obj.getNameInDocument()); } else if (m_objectName == obj.getNameInDocument()) { // if obj is me, hide myself and my tab m_vpPage->hide(); } }
void CmdPartDesignPad::activated(int iMsg) { unsigned int n = getSelection().countObjectsOfType(Part::Part2DObject::getClassTypeId()); if (n != 1) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select a sketch or 2D object.")); return; } std::string FeatName = getUniqueObjectName("Pad"); std::vector<App::DocumentObject*> Sel = getSelection().getObjectsOfType(Part::Part2DObject::getClassTypeId()); Part::Part2DObject* sketch = static_cast<Part::Part2DObject*>(Sel.front()); const TopoDS_Shape& shape = sketch->Shape.getValue(); if (shape.IsNull()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("The shape of the selected object is empty.")); return; } // count free wires int ctWires=0; TopExp_Explorer ex; for (ex.Init(shape, TopAbs_WIRE); ex.More(); ex.Next()) { ctWires++; } if (ctWires == 0) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("The shape of the selected object is not a wire.")); return; } App::DocumentObject* support = sketch->Support.getValue(); openCommand("Make Pad"); doCommand(Doc,"App.activeDocument().addObject(\"PartDesign::Pad\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Sketch = App.activeDocument().%s",FeatName.c_str(),sketch->getNameInDocument()); doCommand(Doc,"App.activeDocument().%s.Length = 10.0",FeatName.c_str()); updateActive(); if (isActiveObjectValid()) { doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",sketch->getNameInDocument()); if (support) doCommand(Gui,"Gui.activeDocument().hide(\"%s\")",support->getNameInDocument()); } doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); //commitCommand(); adjustCameraPosition(); if (support) { copyVisual(FeatName.c_str(), "ShapeColor", support->getNameInDocument()); copyVisual(FeatName.c_str(), "LineColor", support->getNameInDocument()); copyVisual(FeatName.c_str(), "PointColor", support->getNameInDocument()); } }
PyObject *SelectionSingleton::sAddSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; float x=0,y=0,z=0; if (PyArg_ParseTuple(args, "O!|sfff", &(App::DocumentObjectPy::Type),&object,&subname,&x,&y,&z)) { App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot check invalid object"); return NULL; } Selection().addSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname,x,y,z); Py_Return; } PyErr_Clear(); PyObject *sequence; if (PyArg_ParseTuple(args, "O!O", &(App::DocumentObjectPy::Type),&object,&sequence)) { App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot check invalid object"); return NULL; } try { if (PyTuple_Check(sequence) || PyList_Check(sequence)) { Py::Sequence list(sequence); for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { std::string subname = static_cast<std::string>(Py::String(*it)); Selection().addSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname.c_str()); } Py_Return; } } catch (const Py::Exception&) { // do nothing here } } PyErr_SetString(PyExc_ValueError, "type must be 'DocumentObject[,subname[,x,y,z]]' or 'DocumentObject, list or tuple of subnames'"); return 0; }
void MDIViewPage::onDeleteObject(const App::DocumentObject& obj) { //if this page has a QView for this obj, delete it. if (obj.isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { (void) m_view->removeQViewByName(obj.getNameInDocument()); } }
const string PropertyLinkSubList::getPyReprString() { assert(this->_lValueList.size() == this->_lSubList.size()); if (this->_lValueList.size() == 0) return std::string("None"); std::stringstream strm; strm << "["; for (std::size_t i = 0; i < this->_lSubList.size(); i++) { if (i>0) strm << ",("; else strm << "("; App::DocumentObject* obj = this->_lValueList[i]; if (obj) { strm << "App.getDocument('" << obj->getDocument()->getName() << "')." << obj->getNameInDocument(); } else { strm << "None"; } strm << ","; strm << "'" << this->_lSubList[i] << "'"; strm << ")"; } strm << "]"; return strm.str(); }
void DlgFilletEdges::onDeleteObject(const App::DocumentObject& obj) { if (d->fillet == &obj) { d->fillet = 0; } else if (d->fillet && d->fillet->Base.getValue() == &obj) { d->fillet = 0; d->object = 0; ui->shapeObject->setCurrentIndex(0); on_shapeObject_activated(0); } else if (d->object == &obj) { d->object = 0; ui->shapeObject->removeItem(ui->shapeObject->currentIndex()); ui->shapeObject->setCurrentIndex(0); on_shapeObject_activated(0); } else { QString shape = QString::fromAscii(obj.getNameInDocument()); // start from the second item for (int i=1; i<ui->shapeObject->count(); i++) { if (ui->shapeObject->itemData(i).toString() == shape) { ui->shapeObject->removeItem(i); break; } } } }
App::DocumentObjectExecReturn *DrawViewArch::execute(void) { if (!keepUpdated()) { return App::DocumentObject::StdReturn; } App::DocumentObject* sourceObj = Source.getValue(); if (sourceObj) { std::string svgFrag; std::string svgHead = getSVGHead(); std::string svgTail = getSVGTail(); std::string FeatName = getNameInDocument(); std::string SourceName = sourceObj->getNameInDocument(); // ArchSectionPlane.getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=False,scale=1,linewidth=1,fontsize=1): std::stringstream paramStr; paramStr << ",allOn=" << (AllOn.getValue() ? "True" : "False") << ",renderMode=" << RenderMode.getValue() << ",showHidden=" << (ShowHidden.getValue() ? "True" : "False") << ",showFill=" << (ShowFill.getValue() ? "True" : "False") << ",scale=" << getScale() << ",linewidth=" << LineWidth.getValue() << ",fontsize=" << FontSize.getValue() << ",techdraw=True" << ",rotation=" << Rotation.getValue(); Base::Interpreter().runString("import ArchSectionPlane"); Base::Interpreter().runStringArg("svgBody = ArchSectionPlane.getSVG(App.activeDocument().%s %s)", SourceName.c_str(),paramStr.str().c_str()); Base::Interpreter().runStringArg("App.activeDocument().%s.Symbol = '%s' + svgBody + '%s'", FeatName.c_str(),svgHead.c_str(),svgTail.c_str()); } requestPaint(); return DrawView::execute(); }
void TaskLinearPatternParameters::apply() { std::string name = TransformedView->getObject()->getNameInDocument(); std::string direction = getDirection(); if (!direction.empty()) { App::DocumentObject* sketch = 0; if (direction == "H_Axis" || direction == "V_Axis" || (direction.size() > 4 && direction.substr(0,4) == "Axis")) sketch = getSketchObject(); else sketch = getSupportObject(); if (sketch) { QString buf = QString::fromLatin1("(App.ActiveDocument.%1,[\"%2\"])"); buf = buf.arg(QString::fromLatin1(sketch->getNameInDocument())); buf = buf.arg(QString::fromLatin1(direction.c_str())); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Direction = %s", name.c_str(), buf.toStdString().c_str()); } } else Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Direction = None", name.c_str()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Reversed = %u",name.c_str(),getReverse()); ui->spinLength->apply(); ui->spinOccurrences->apply(); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); if (!TransformedView->getObject()->isValid()) throw Base::Exception(TransformedView->getObject()->getStatusString()); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); Gui::Command::commitCommand(); }
void TaskGrooveParameters::apply() { App::DocumentObject* groove = GrooveView->getObject(); std::string name = groove->getNameInDocument(); // retrieve sketch and its support object App::DocumentObject* sketch = 0; App::DocumentObject* support = 0; if (groove->getTypeId().isDerivedFrom(PartDesign::Groove::getClassTypeId())) { sketch = static_cast<PartDesign::Groove*>(groove)->Sketch.getValue<Sketcher::SketchObject*>(); if (sketch) { support = static_cast<Sketcher::SketchObject*>(sketch)->Support.getValue(); } } //Gui::Command::openCommand("Groove changed"); ui->grooveAngle->apply(); std::string axis = getReferenceAxis().toStdString(); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.ReferenceAxis = %s",name.c_str(),axis.c_str()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Midplane = %i",name.c_str(), getMidplane() ? 1 : 0); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Reversed = %i",name.c_str(), getReversed() ? 1 : 0); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); if (groove->isValid()) { if (sketch) Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().hide(\"%s\")",sketch->getNameInDocument()); if (support) Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().hide(\"%s\")",support->getNameInDocument()); } Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); Gui::Command::commitCommand(); }
void OriginGroup::unsetupObject () { App::DocumentObject *origin = Origin.getValue (); if (origin && !origin->isDeleting ()) { origin->getDocument ()->remObject (origin->getNameInDocument()); } GeoFeatureGroup::unsetupObject (); }
void TaskDressUpParameters::showObject() { Gui::Document* doc = Gui::Application::Instance->activeDocument(); App::DocumentObject* base = getBase(); if (doc != NULL && base != NULL) { doc->setShow(DressUpView->getObject()->getNameInDocument()); doc->setHide(base->getNameInDocument()); } }
void Body::unsetupObject () { App::DocumentObject *origin = Origin.getValue (); if (origin && !origin->isDeleting ()) { origin->getDocument ()->remObject (origin->getNameInDocument()); } Part::BodyBase::unsetupObject (); }
void DlgEvaluateMeshImp::slotCreatedObject(const App::DocumentObject& Obj) { // add new mesh object to the list if (Obj.getTypeId().isDerivedFrom(Mesh::Feature::getClassTypeId())) { QString label = QString::fromUtf8(Obj.Label.getValue()); QString name = QString::fromAscii(Obj.getNameInDocument()); meshNameButton->addItem(label, name); } }
void addFacesToSelection(Gui::View3DInventorViewer* /*viewer*/, const Gui::ViewVolumeProjection& proj, const Base::Polygon2d& polygon, const TopoDS_Shape& shape) { try { TopTools_IndexedMapOfShape M; TopExp_Explorer xp_face(shape,TopAbs_FACE); while (xp_face.More()) { M.Add(xp_face.Current()); xp_face.Next(); } App::Document* appdoc = doc->getDocument(); for (Standard_Integer k = 1; k <= M.Extent(); k++) { const TopoDS_Shape& face = M(k); TopExp_Explorer xp_vertex(face,TopAbs_VERTEX); while (xp_vertex.More()) { gp_Pnt p = BRep_Tool::Pnt(TopoDS::Vertex(xp_vertex.Current())); Base::Vector3d pt2d; pt2d = proj(Base::Vector3d(p.X(), p.Y(), p.Z())); if (polygon.Contains(Base::Vector2d(pt2d.x, pt2d.y))) { #if 0 // TODO if (isVisibleFace(k-1, SbVec2f(pt2d.x, pt2d.y), viewer)) #endif { std::stringstream str; str << "Face" << k; Gui::Selection().addSelection(appdoc->getName(), obj->getNameInDocument(), str.str().c_str()); break; } } xp_vertex.Next(); } //GProp_GProps props; //BRepGProp::SurfaceProperties(face, props); //gp_Pnt c = props.CentreOfMass(); //Base::Vector3d pt2d; //pt2d = proj(Base::Vector3d(c.X(), c.Y(), c.Z())); //if (polygon.Contains(Base::Vector2d(pt2d.x, pt2d.y))) { // if (isVisibleFace(k-1, SbVec2f(pt2d.x, pt2d.y), viewer)) { // std::stringstream str; // str << "Face" << k; // Gui::Selection().addSelection(appdoc->getName(), obj->getNameInDocument(), str.str().c_str()); // } //} } } catch (...) { } }
PyObject *SelectionSingleton::sRemoveSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; if (!PyArg_ParseTuple(args, "O!|s", &(App::DocumentObjectPy::Type),&object,&subname)) return NULL; // NULL triggers exception App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(PyExc_Exception, "Cannot check invalid object"); return NULL; } Selection().rmvSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname); Py_Return; }
PyObject *SelectionSingleton::sAddSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; float x=0,y=0,z=0; if (!PyArg_ParseTuple(args, "O!|sfff", &(App::DocumentObjectPy::Type),&object,&subname,&x,&y,&z)) return NULL; // NULL triggers exception App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot check invalid object"); return NULL; } Selection().addSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname,x,y,z); Py_Return; }
//***************************************************************************************************** // Document //***************************************************************************************************** void Document::slotNewObject(const App::DocumentObject& Obj) { //Base::Console().Log("Document::slotNewObject() called\n"); std::string cName = Obj.getViewProviderName(); if (cName.empty()) { // handle document object with no view provider specified Base::Console().Log("%s has no view provider specified\n", Obj.getTypeId().getName()); return; } setModified(true); Base::BaseClass* base = static_cast<Base::BaseClass*>(Base::Type::createInstanceByName(cName.c_str(),true)); if (base) { // type not derived from ViewProviderDocumentObject!!! assert(base->getTypeId().isDerivedFrom(Gui::ViewProviderDocumentObject::getClassTypeId())); ViewProviderDocumentObject *pcProvider = static_cast<ViewProviderDocumentObject*>(base); d->_ViewProviderMap[&Obj] = pcProvider; try { // if succesfully created set the right name and calculate the view //FIXME: Consider to change argument of attach() to const pointer pcProvider->attach(const_cast<App::DocumentObject*>(&Obj)); pcProvider->updateView(); pcProvider->setActiveMode(); } catch(const Base::MemoryException& e){ Base::Console().Error("Memory exception in '%s' thrown: %s\n",Obj.getNameInDocument(),e.what()); } catch(Base::Exception &e){ e.ReportException(); } #ifndef FC_DEBUG catch(...){ Base::Console().Error("App::Document::_RecomputeFeature(): Unknown exception in Feature \"%s\" thrown\n",Obj.getNameInDocument()); } #endif std::list<Gui::BaseView*>::iterator vIt; // cycling to all views of the document for (vIt = d->baseViews.begin();vIt != d->baseViews.end();++vIt) { View3DInventor *activeView = dynamic_cast<View3DInventor *>(*vIt); if (activeView) activeView->getViewer()->addViewProvider(pcProvider); } // adding to the tree signalNewObject(*pcProvider); } else { Base::Console().Warning("Gui::Document::slotNewObject() no view provider for the object %s found\n",cName.c_str()); } }
void Document::slotChangedObject(const App::DocumentObject& Obj, const App::Property& Prop) { //Base::Console().Log("Document::slotChangedObject() called\n"); ViewProvider* viewProvider = getViewProvider(&Obj); if (viewProvider) { try { viewProvider->update(&Prop); } catch(const Base::MemoryException& e) { Base::Console().Error("Memory exception in '%s' thrown: %s\n",Obj.getNameInDocument(),e.what()); } catch(Base::Exception &e){ e.ReportException(); } catch (...) { Base::Console().Error("Cannot update representation for '%s'.\n", Obj.getNameInDocument()); } if (viewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) signalChangedObject(static_cast<ViewProviderDocumentObject&>(*viewProvider), Prop); } // a property of an object has changed setModified(true); }
bool TaskDlgFeatureParameters::accept() { App::DocumentObject* feature = vp->getObject(); try { // Iterate over parameter dialogs and apply all parameters from them for ( QWidget *wgt : Content ) { TaskFeatureParameters *param = qobject_cast<TaskFeatureParameters *> (wgt); if(!param) continue; param->saveHistory (); param->apply (); } // Make sure the feature is what we are expecting // Should be fine but you never know... if ( !feature->getTypeId().isDerivedFrom(PartDesign::Feature::getClassTypeId()) ) { throw Base::Exception("Bad object processed in the feature dialog."); } App::DocumentObject* previous = static_cast<PartDesign::Feature*>(feature)->getBaseObject(/* silent = */ true ); if (previous) { Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().hide(\"%s\")", previous->getNameInDocument()); } Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); if (!feature->isValid()) { throw Base::Exception(vp->getObject()->getStatusString()); } // detach the task panel from the selection to avoid to invoke // eventually onAddSelection when the selection changes std::vector<QWidget*> subwidgets = getDialogContent(); for (auto it : subwidgets) { TaskSketchBasedParameters* param = qobject_cast<TaskSketchBasedParameters*>(it); if (param) param->detachSelection(); } Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); Gui::Command::commitCommand(); } catch (const Base::Exception& e) { // Generally the only thing that should fail is feature->isValid() others should be fine QMessageBox::warning( 0, tr("Input error"), QString::fromLatin1(e.what())); return false; } return true; }
void TaskMultiTransformParameters::onTransformAddMirrored() { closeSubTask(); std::string newFeatName = TransformedView->getObject()->getDocument()->getUniqueObjectName("Mirrored"); Gui::Command::openCommand("Mirrored"); Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject(\"PartDesign::Mirrored\",\"%s\")",newFeatName.c_str()); //Gui::Command::updateActive(); App::DocumentObject* sketch = getSketchObject(); if (sketch) Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.MirrorPlane = (App.activeDocument().%s, [\"V_Axis\"])", newFeatName.c_str(), sketch->getNameInDocument()); finishAdd(newFeatName); }
void ViewProviderGroupExtension::extensionDropObject(App::DocumentObject* obj) { App::DocumentObject* grp = static_cast<App::DocumentObject*>(getExtendedViewProvider()->getObject()); App::Document* doc = grp->getDocument(); // build Python command for execution QString cmd; cmd = QString::fromLatin1("App.getDocument(\"%1\").getObject(\"%2\").addObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromLatin1(doc->getName())) .arg(QString::fromLatin1(grp->getNameInDocument())) .arg(QString::fromLatin1(obj->getNameInDocument())); Gui::Command::doCommand(Gui::Command::App, cmd.toUtf8()); }
App::Origin *Body::getOrigin () const { App::DocumentObject *originObj = Origin.getValue (); if ( !originObj ) { std::stringstream err; err << "Can't find Origin for \"" << getNameInDocument () << "\""; throw Base::Exception ( err.str().c_str () ); } else if (! originObj->isDerivedFrom ( App::Origin::getClassTypeId() ) ) { std::stringstream err; err << "Bad object \"" << originObj->getNameInDocument () << "\"(" << originObj->getTypeId().getName() << ") linked to the Origin of \"" << getNameInDocument () << "\""; throw Base::Exception ( err.str().c_str () ); } else { return static_cast<App::Origin *> ( originObj ); } }
void TaskMultiTransformParameters::onTransformAddPolarPattern() { closeSubTask(); std::string newFeatName = TransformedView->getObject()->getDocument()->getUniqueObjectName("PolarPattern"); Gui::Command::openCommand("PolarPattern"); Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject(\"PartDesign::PolarPattern\",\"%s\")",newFeatName.c_str()); //Gui::Command::updateActive(); App::DocumentObject* sketch = getSketchObject(); if (sketch) Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.Axis = (App.activeDocument().%s, [\"N_Axis\"])", newFeatName.c_str(), sketch->getNameInDocument()); Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.Angle = 360", newFeatName.c_str()); Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.Occurrences = 2", newFeatName.c_str()); finishAdd(newFeatName); }
bool TaskDlgLinearPatternParameters::accept() { std::string name = TransformedView->getObject()->getNameInDocument(); try { //Gui::Command::openCommand("LinearPattern changed"); // Handle Originals if (!TaskDlgTransformedParameters::accept()) return false; TaskLinearPatternParameters* linearpatternParameter = static_cast<TaskLinearPatternParameters*>(parameter); std::string direction = linearpatternParameter->getDirection(); if (!direction.empty()) { App::DocumentObject* sketch = 0; if (direction == "H_Axis" || direction == "V_Axis" || (direction.size() > 4 && direction.substr(0,4) == "Axis")) sketch = linearpatternParameter->getSketchObject(); else sketch = linearpatternParameter->getSupportObject(); if (sketch) { QString buf = QString::fromLatin1("(App.ActiveDocument.%1,[\"%2\"])"); buf = buf.arg(QString::fromLatin1(sketch->getNameInDocument())); buf = buf.arg(QString::fromLatin1(direction.c_str())); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Direction = %s", name.c_str(), buf.toStdString().c_str()); } } else Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Direction = None", name.c_str()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Reversed = %u",name.c_str(),linearpatternParameter->getReverse()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Length = %f",name.c_str(),linearpatternParameter->getLength()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Occurrences = %u",name.c_str(),linearpatternParameter->getOccurrences()); Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.recompute()"); if (!TransformedView->getObject()->isValid()) throw Base::Exception(TransformedView->getObject()->getStatusString()); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); Gui::Command::commitCommand(); } catch (const Base::Exception& e) { QMessageBox::warning(parameter, tr("Input error"), QString::fromAscii(e.what())); return false; } return true; }
void DlgEvaluateMeshImp::slotChangedObject(const App::DocumentObject& Obj, const App::Property& Prop) { // if the current mesh object was modified update everything if (&Obj == d->meshFeature && Prop.getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) { removeViewProviders(); cleanInformation(); showInformation(); d->self_intersections.clear(); } else if (Obj.getTypeId().isDerivedFrom(Mesh::Feature::getClassTypeId())) { // if the label has changed update the entry in the list if (Prop.getTypeId() == App::PropertyString::getClassTypeId() && strcmp(Prop.getName(), "Label") == 0) { QString label = QString::fromUtf8(Obj.Label.getValue()); QString name = QString::fromAscii(Obj.getNameInDocument()); int index = meshNameButton->findData(name); meshNameButton->setItemText(index, label); } } }
void TaskMultiTransformParameters::onTransformDelete() { if (editHint) return; // Can't delete the hint... int row = ui->listTransformFeatures->currentIndex().row(); PartDesign::MultiTransform* pcMultiTransform = static_cast<PartDesign::MultiTransform*>(TransformedView->getObject()); std::vector<App::DocumentObject*> transformFeatures = pcMultiTransform->Transformations.getValues(); App::DocumentObject* feature = transformFeatures[row]; pcMultiTransform->getDocument()->remObject(feature->getNameInDocument()); closeSubTask(); transformFeatures.erase(transformFeatures.begin() + row); pcMultiTransform->Transformations.setValues(transformFeatures); // Note: When the last transformation is deleted, recomputeFeature does nothing, because Transformed::execute() // says: "No transformations defined, exit silently" recomputeFeature(); ui->listTransformFeatures->model()->removeRow(row); ui->listTransformFeatures->setCurrentRow(0, QItemSelectionModel::ClearAndSelect); }