void StdCmdSelectAll::activated(int iMsg) { SelectionSingleton& rSel = Selection(); App::Document* doc = App::GetApplication().getActiveDocument(); std::vector<App::DocumentObject*> objs = doc->getObjectsOfType(App::DocumentObject::getClassTypeId()); rSel.setSelection(doc->getName(), objs); }
void DlgRevolution::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (!activeDoc) return; Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); std::vector<App::DocumentObject*> objs = activeDoc->getObjectsOfType (Part::Feature::getClassTypeId()); for (std::vector<App::DocumentObject*>::iterator it = objs.begin(); it!=objs.end(); ++it) { const TopoDS_Shape& shape = static_cast<Part::Feature*>(*it)->Shape.getValue(); if (shape.IsNull()) continue; TopExp_Explorer xp; xp.Init(shape,TopAbs_SOLID); if (xp.More()) continue; // solids not allowed xp.Init(shape,TopAbs_COMPSOLID); if (xp.More()) continue; // compound solids not allowed // So allowed are: vertex, edge, wire, face, shell and compound QTreeWidgetItem* item = new QTreeWidgetItem(ui->treeWidget); item->setText(0, QString::fromUtf8((*it)->Label.getValue())); item->setData(0, Qt::UserRole, QString::fromAscii((*it)->getNameInDocument())); Gui::ViewProvider* vp = activeGui->getViewProvider(*it); if (vp) item->setIcon(0, vp->getIcon()); } }
void Mirroring::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (!activeDoc) return; Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); if (!activeGui) return; this->document = QString::fromLatin1(activeDoc->getName()); std::vector<App::DocumentObject*> objs = activeDoc->getObjectsOfType (Part::Feature::getClassTypeId()); for (std::vector<App::DocumentObject*>::iterator it = objs.begin(); it!=objs.end(); ++it) { const TopoDS_Shape& shape = static_cast<Part::Feature*>(*it)->Shape.getValue(); if (!shape.IsNull()) { QString label = QString::fromUtf8((*it)->Label.getValue()); QString name = QString::fromLatin1((*it)->getNameInDocument()); QTreeWidgetItem* child = new QTreeWidgetItem(); child->setText(0, label); child->setToolTip(0, label); child->setData(0, Qt::UserRole, name); Gui::ViewProvider* vp = activeGui->getViewProvider(*it); if (vp) child->setIcon(0, vp->getIcon()); ui->shapes->addTopLevelItem(child); } } }
void DlgFilletEdges::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (!activeDoc) return; std::vector<App::DocumentObject*> objs = activeDoc->getObjectsOfType (Part::Feature::getClassTypeId()); int index = 1; int current_index = 0; for (std::vector<App::DocumentObject*>::iterator it = objs.begin(); it!=objs.end(); ++it, ++index) { ui->shapeObject->addItem(QString::fromUtf8((*it)->Label.getValue())); ui->shapeObject->setItemData(index, QString::fromAscii((*it)->getNameInDocument())); if (current_index == 0) { if (Gui::Selection().isSelected(*it)) { current_index = index; } } } // if only one object is in the document then simply use that if (objs.size() == 1) current_index = 1; if (current_index > 0) { ui->shapeObject->setCurrentIndex(current_index); on_shapeObject_activated(current_index); } // if an existing fillet object is given start the edit mode if (d->fillet) { setupFillet(objs); } }
TaskOrthoViews::TaskOrthoViews(QWidget *parent) : ui(new Ui_TaskOrthoViews) { Q_UNUSED(parent); ui->setupUi(this); std::vector<App::DocumentObject*> obj = Gui::Selection().getObjectsOfType(Part::Feature::getClassTypeId()); const char * part = obj.front()->getNameInDocument(); App::Document * doc = App::GetApplication().getActiveDocument(); std::vector<App::DocumentObject*> pages = Gui::Selection().getObjectsOfType(Drawing::FeaturePage::getClassTypeId()); if (pages.empty()) { pages = doc->getObjectsOfType(Drawing::FeaturePage::getClassTypeId()); } std::string PageName = pages.front()->getNameInDocument(); const char * page = PageName.c_str(); // ********************************************************************** // note that checkboxes are numbered increasing right & down // while OrthoViews relative positions are increasing right & up // doh! I should renumber the checkboxes for clarity // ********************************************************************** // [x+2][y+2] c_boxes[0][2] = ui->cb02; //left most, x = -2, y = 0 c_boxes[1][1] = ui->cb11; c_boxes[1][2] = ui->cb12; c_boxes[1][3] = ui->cb13; c_boxes[2][0] = ui->cb20; //top most, x = 0, y = -2 c_boxes[2][1] = ui->cb21; c_boxes[2][2] = ui->cb22; //centre (primary view) checkbox x = y = 0. c_boxes[2][3] = ui->cb23; c_boxes[2][4] = ui->cb24; //bottom most, x = 0, y = 2 c_boxes[3][1] = ui->cb31; c_boxes[3][2] = ui->cb32; c_boxes[3][3] = ui->cb33; c_boxes[4][2] = ui->cb42; //right most, x = 2, y = 0 for (int i=0; i < 5; i++) { for (int j=0; j < 5; j++) { if ((abs(i-2) + abs(j-2)) < 3) //if i,j combination corresponds to valid check box, then proceed with: { connect(c_boxes[i][j], SIGNAL(toggled(bool)), this, SLOT(cb_toggled(bool))); connect(c_boxes[i][j], SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(ShowContextMenu(const QPoint&))); } } }
BodyBase* BodyBase::findBodyOf(const App::DocumentObject* f) { App::Document* doc = f->getDocument(); if (doc != NULL) { std::vector<App::DocumentObject*> bodies = doc->getObjectsOfType(BodyBase::getClassTypeId()); for (std::vector<App::DocumentObject*>::const_iterator b = bodies.begin(); b != bodies.end(); b++) { BodyBase* body = static_cast<BodyBase*>(*b); if (body->hasObject(f)) return body; } } return NULL; }
Origin * OriginFeature::getOrigin () { App::Document *doc = getDocument(); auto origins = doc->getObjectsOfType ( App::Origin::getClassTypeId() ); auto originIt= std::find_if (origins.begin(), origins.end(), [this] (DocumentObject *origin) { assert ( origin->isDerivedFrom ( App::Origin::getClassTypeId() ) ); return static_cast<App::Origin *> (origin)->hasObject (this); } ); if (originIt == origins.end()) { return 0; } else { assert ( (*originIt)->isDerivedFrom ( App::Origin::getClassTypeId() ) ); return static_cast<App::Origin *> (*originIt); } }
std::vector<App::DocumentObject*> MeshSelection::getObjects() const { std::vector<App::DocumentObject*> objs; if (!meshObjects.empty()) { for (std::vector<Gui::SelectionObject>::iterator it = meshObjects.begin(); it != meshObjects.end(); ++it) { App::DocumentObject* obj = it->getObject(); if (obj) { objs.push_back(obj); } } } // get all objects of the active document else { App::Document* doc = App::GetApplication().getActiveDocument(); if (doc) objs = doc->getObjectsOfType(Mesh::Feature::getClassTypeId()); } return objs; }
void DlgExtrusion::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (!activeDoc) return; Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); this->document = activeDoc->getName(); this->label = activeDoc->Label.getValue(); std::vector<App::DocumentObject*> objs = activeDoc->getObjectsOfType (Part::Feature::getClassTypeId()); for (std::vector<App::DocumentObject*>::iterator it = objs.begin(); it!=objs.end(); ++it) { const TopoDS_Shape& shape = static_cast<Part::Feature*>(*it)->Shape.getValue(); if (canExtrude(shape)) { QTreeWidgetItem* item = new QTreeWidgetItem(ui->treeWidget); item->setText(0, QString::fromUtf8((*it)->Label.getValue())); item->setData(0, Qt::UserRole, QString::fromLatin1((*it)->getNameInDocument())); Gui::ViewProvider* vp = activeGui->getViewProvider(*it); if (vp) item->setIcon(0, vp->getIcon()); } } }
void CmdSketcherMapSketch::activated(int iMsg) { App::Document* doc = App::GetApplication().getActiveDocument(); std::vector<App::DocumentObject*> sel = doc->getObjectsOfType(Sketcher::SketchObject::getClassTypeId()); if (sel.empty()) { QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(), "No sketch found"), qApp->translate(className(), "The document doesn't have a sketch")); return; } bool ok; QStringList items; for (std::vector<App::DocumentObject*>::iterator it = sel.begin(); it != sel.end(); ++it) items.push_back(QString::fromUtf8((*it)->Label.getValue())); QString text = QInputDialog::getItem(Gui::getMainWindow(), qApp->translate(className(), "Select sketch"), qApp->translate(className(), "Select a sketch from the list"), items, 0, false, &ok); if (!ok) return; int index = items.indexOf(text); std::string featName = sel[index]->getNameInDocument(); Gui::SelectionFilter FaceFilter ("SELECT Part::Feature SUBELEMENT Face COUNT 1"); if (FaceFilter.match()) { // get the selected object Part::Feature *part = static_cast<Part::Feature*>(FaceFilter.Result[0][0].getObject()); Base::Placement ObjectPos = part->Placement.getValue(); const std::vector<std::string> &sub = FaceFilter.Result[0][0].getSubNames(); if (sub.size() > 1){ // No assert for wrong user input! QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(),"Several sub-elements selected"), qApp->translate(className(),"You have to select a single face as support for a sketch!")); return; } std::vector<App::DocumentObject*> input = part->getOutList(); if (std::find(input.begin(), input.end(), sel[index]) != input.end()) { QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(),"Cyclic dependency"), qApp->translate(className(),"You cannot choose a support object depending on the selected sketch!")); return; } // get the selected sub shape (a Face) const Part::TopoShape &shape = part->Shape.getValue(); TopoDS_Shape sh = shape.getSubShape(sub[0].c_str()); const TopoDS_Face& face = TopoDS::Face(sh); if (face.IsNull()) { // No assert for wrong user input! QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(),"No support face selected"), qApp->translate(className(),"You have to select a face as support for a sketch!")); return; } BRepAdaptor_Surface adapt(face); if (adapt.GetType() != GeomAbs_Plane){ QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(),"No planar support"), qApp->translate(className(),"You need a planar face as support for a sketch!")); return; } std::string supportString = FaceFilter.Result[0][0].getAsPropertyLinkSubString(); openCommand("Map a Sketch on Face"); doCommand(Gui,"App.activeDocument().%s.Support = %s",featName.c_str(),supportString.c_str()); doCommand(Gui,"App.activeDocument().recompute()"); doCommand(Gui,"Gui.activeDocument().setEdit('%s')",featName.c_str()); } else { QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(), "No face selected"), qApp->translate(className(), "No face was selected to map the sketch to")); } }
void CmdSketcherMapSketch::activated(int iMsg) { QString msg_str; try{ Attacher::eMapMode suggMapMode; std::vector<Attacher::eMapMode> validModes; //check that selection is valid for at least some mapping mode. Attacher::SuggestResult::eSuggestResult msgid = Attacher::SuggestResult::srOK; suggMapMode = SuggestAutoMapMode(&msgid, &msg_str, &validModes); App::Document* doc = App::GetApplication().getActiveDocument(); std::vector<App::DocumentObject*> sketches = doc->getObjectsOfType(Part::Part2DObject::getClassTypeId()); if (sketches.empty()) { QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(), "No sketch found"), qApp->translate(className(), "The document doesn't have a sketch")); return; } bool ok; QStringList items; for (std::vector<App::DocumentObject*>::iterator it = sketches.begin(); it != sketches.end(); ++it) items.push_back(QString::fromUtf8((*it)->Label.getValue())); QString text = QInputDialog::getItem(Gui::getMainWindow(), qApp->translate(className(), "Select sketch"), qApp->translate(className(), "Select a sketch from the list"), items, 0, false, &ok); if (!ok) return; int index = items.indexOf(text); Part2DObject &sketch = *(static_cast<Part2DObject*>(sketches[index])); // check circular dependency std::vector<Gui::SelectionObject> selobjs = Gui::Selection().getSelectionEx(); for (size_t i = 0 ; i < selobjs.size() ; ++i){ App::DocumentObject* part = static_cast<Part::Feature*>(selobjs[i].getObject()); if (!part) { assert(0); throw Base::Exception("Unexpected null pointer in CmdSketcherMapSketch::activated"); } std::vector<App::DocumentObject*> input = part->getOutList(); if (std::find(input.begin(), input.end(), &sketch) != input.end()) { throw ExceptionWrongInput(QT_TR_NOOP("Some of the selected objects depend on the sketch to be mapped. Circular dependencies are not allowed!")); } } //Ask for a new mode. //outline: // * find out the modes that are compatible with selection. // * Test if current mode is OK. // * fill in the dialog // * execute the dialog // * collect dialog result // * action bool bAttach = true; bool bCurIncompatible = false; // * find out the modes that are compatible with selection. eMapMode curMapMode = eMapMode(sketch.MapMode.getValue()); // * Test if current mode is OK. if (std::find(validModes.begin(), validModes.end(), curMapMode) == validModes.end()) bCurIncompatible = true; // * fill in the dialog validModes.insert(validModes.begin(), Attacher::mmDeactivated); if(bCurIncompatible) validModes.push_back(curMapMode); //bool ok; //already defined //QStringList items; //already defined items.clear(); items.push_back(QObject::tr("Don't attach")); int iSugg = 0;//index of the auto-suggested mode in the list of valid modes int iCurr = 0;//index of current mode in the list of valid modes for (size_t i = 0 ; i < validModes.size() ; ++i){ items.push_back(QString::fromLatin1(AttachEngine::getModeName(validModes[i]).c_str())); if (validModes[i] == curMapMode) { iCurr = items.size() - 1; items.back().append(bCurIncompatible? qApp->translate(className()," (incompatible with selection)") : qApp->translate(className()," (current)") ); } if (validModes[i] == suggMapMode){ iSugg = items.size() - 1; if(iSugg == 1){ iSugg = 0;//redirect deactivate to detach } else { items.back().append(qApp->translate(className()," (suggested)")); } } } // * execute the dialog text = QInputDialog::getItem(Gui::getMainWindow() ,qApp->translate(className(), "Sketch attachment") ,bCurIncompatible? qApp->translate(className(), "Current attachment mode is incompatible with the new selection. Select the method to attach this sketch to selected objects.") : qApp->translate(className(), "Select the method to attach this sketch to selected objects.") ,items , bCurIncompatible ? iSugg : iCurr , false , &ok); // * collect dialog result if (!ok) return; index = items.indexOf(text); if (index == 0){ bAttach = false; suggMapMode = Attacher::mmDeactivated; } else { bAttach = true; suggMapMode = validModes[index-1]; } // * action std::string featName = sketch.getNameInDocument(); if (bAttach) { App::PropertyLinkSubList support; Gui::Selection().getAsPropertyLinkSubList(support); std::string supportString = support.getPyReprString(); openCommand("Attach Sketch"); doCommand(Gui,"App.activeDocument().%s.MapMode = \"%s\"",featName.c_str(),AttachEngine::getModeName(suggMapMode).c_str()); doCommand(Gui,"App.activeDocument().%s.Support = %s",featName.c_str(),supportString.c_str()); commitCommand(); } else { openCommand("Detach Sketch"); doCommand(Gui,"App.activeDocument().%s.MapMode = \"%s\"",featName.c_str(),AttachEngine::getModeName(suggMapMode).c_str()); doCommand(Gui,"App.activeDocument().%s.Support = None",featName.c_str()); commitCommand(); } } catch (ExceptionWrongInput &e) { QMessageBox::warning(Gui::getMainWindow(), qApp->translate(className(), "Map sketch"), qApp->translate(className(), "Can't map a sketch to support:\n" "%1").arg(e.ErrMsg.length() ? e.ErrMsg : msg_str)); } }