void ViewProviderDocumentObjectGroup::drop(const std::vector<const App::DocumentObject*> &objList,Qt::KeyboardModifiers keys,Qt::MouseButtons mouseBts,const QPoint &pos) { // Open command App::DocumentObjectGroup* grp = static_cast<App::DocumentObjectGroup*>(getObject()); App::Document* doc = grp->getDocument(); Gui::Document* gui = Gui::Application::Instance->getDocument(doc); gui->openCommand("Move object"); for( std::vector<const App::DocumentObject*>::const_iterator it = objList.begin();it!=objList.end();++it) { // get document object const App::DocumentObject* obj = *it; const App::DocumentObjectGroup* par = App::DocumentObjectGroup::getGroupOfObject(obj); if (par) { // allow an object to be in one group only QString cmd; cmd = QString::fromLatin1("App.getDocument(\"%1\").getObject(\"%2\").removeObject(" "App.getDocument(\"%1\").getObject(\"%3\"))") .arg(QString::fromLatin1(doc->getName())) .arg(QString::fromLatin1(par->getNameInDocument())) .arg(QString::fromLatin1(obj->getNameInDocument())); Gui::Application::Instance->runPythonCode(cmd.toUtf8()); } // 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::Application::Instance->runPythonCode(cmd.toUtf8()); } gui->commitCommand(); }
void DlgFilletEdges::toggleCheckState(const QModelIndex& index) { if (!d->object) return; QVariant check = index.data(Qt::CheckStateRole); int id = index.data(Qt::UserRole).toInt(); QString name = QString::fromAscii("Edge%1").arg(id); Qt::CheckState checkState = static_cast<Qt::CheckState>(check.toInt()); bool block = this->blockConnection(false); // is item checked if (checkState & Qt::Checked) { App::Document* doc = d->object->getDocument(); Gui::Selection().addSelection(doc->getName(), d->object->getNameInDocument(), (const char*)name.toAscii()); } else { App::Document* doc = d->object->getDocument(); Gui::Selection().rmvSelection(doc->getName(), d->object->getNameInDocument(), (const char*)name.toAscii()); } this->blockConnection(block); }
void CmdPartExport::activated(int iMsg) { QStringList filter; filter << QObject::tr("All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep)"); filter << QObject::tr("STEP (*.stp *.step)"); filter << QObject::tr("IGES (*.igs *.iges)"); filter << QObject::tr("BREP (*.brp *.brep)"); filter << QObject::tr("All Files (*.*)"); QString fn = Gui::FileDialog::getSaveFileName(Gui::getMainWindow(), QString(), QString(), filter.join(QLatin1String(";;"))); if (!fn.isEmpty()) { App::Document* pDoc = getDocument(); if (!pDoc) return; // no document openCommand("Import Part"); QString ext = QFileInfo(fn).suffix().toLower(); if (ext == QLatin1String("step") || ext == QLatin1String("stp") || ext == QLatin1String("iges") || ext == QLatin1String("igs")) { Gui::Application::Instance->exportTo((const char*)fn.toUtf8(),pDoc->getName(),"ImportGui"); } else { Gui::Application::Instance->exportTo((const char*)fn.toUtf8(),pDoc->getName(),"Part"); } commitCommand(); } }
void FaceColors::onSelectionChanged(const Gui::SelectionChanges& msg) { // no object selected in the combobox or no sub-element was selected if (!msg.pSubName) return; bool selection_changed = false; if (msg.Type == Gui::SelectionChanges::AddSelection) { // when adding a sub-element to the selection check // whether this is the currently handled object App::Document* doc = d->obj->getDocument(); std::string docname = doc->getName(); std::string objname = d->obj->getNameInDocument(); if (docname==msg.pDocName && objname==msg.pObjectName) { int index = std::atoi(msg.pSubName+4)-1; d->index.insert(index); const App::Color& c = d->perface[index]; QColor color; color.setRgbF(c.r,c.g,c.b); d->ui->colorButton->setColor(color); selection_changed = true; } } else if (msg.Type == Gui::SelectionChanges::RmvSelection) { App::Document* doc = d->obj->getDocument(); std::string docname = doc->getName(); std::string objname = d->obj->getNameInDocument(); if (docname==msg.pDocName && objname==msg.pObjectName) { int index = std::atoi(msg.pSubName+4)-1; d->index.remove(index); selection_changed = true; } } else if (msg.Type == Gui::SelectionChanges::ClrSelection) { d->index.clear(); selection_changed = true; } if (selection_changed) { QString faces = QString::fromLatin1("["); int size = d->index.size(); for (QSet<int>::iterator it = d->index.begin(); it != d->index.end(); ++it) { faces += QString::number(*it + 1); if (--size > 0) faces += QString::fromLatin1(","); } faces += QString::fromLatin1("]"); d->ui->labelElement->setText(faces); d->ui->colorButton->setDisabled(d->index.isEmpty()); } }
void CmdPartShapeFromMesh::activated(int iMsg) { Q_UNUSED(iMsg); double STD_OCC_TOLERANCE = 1e-6; ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Units"); int decimals = hGrp->GetInt("Decimals"); double tolerance_from_decimals = pow(10., -decimals); double minimal_tolerance = tolerance_from_decimals < STD_OCC_TOLERANCE ? STD_OCC_TOLERANCE : tolerance_from_decimals; bool ok; double tol = QInputDialog::getDouble(Gui::getMainWindow(), QObject::tr("Sewing Tolerance"), QObject::tr("Enter tolerance for sewing shape:"), 0.1, minimal_tolerance, 10.0, decimals, &ok); if (!ok) return; Base::Type meshid = Base::Type::fromName("Mesh::Feature"); std::vector<App::DocumentObject*> meshes; meshes = Gui::Selection().getObjectsOfType(meshid); Gui::WaitCursor wc; std::vector<App::DocumentObject*>::iterator it; openCommand("Convert mesh"); for (it = meshes.begin(); it != meshes.end(); ++it) { App::Document* doc = (*it)->getDocument(); std::string mesh = (*it)->getNameInDocument(); std::string name = doc->getUniqueObjectName(mesh.c_str()); doCommand(Doc,"import Part"); doCommand(Doc,"FreeCAD.getDocument(\"%s\").addObject(\"Part::Feature\",\"%s\")" ,doc->getName() ,name.c_str()); doCommand(Doc,"__shape__=Part.Shape()"); doCommand(Doc,"__shape__.makeShapeFromMesh(" "FreeCAD.getDocument(\"%s\").getObject(\"%s\").Mesh.Topology,%f" ")" ,doc->getName() ,mesh.c_str() ,tol); doCommand(Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Shape=__shape__" ,doc->getName() ,name.c_str()); doCommand(Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").purgeTouched()" ,doc->getName() ,name.c_str()); doCommand(Doc,"del __shape__"); } commitCommand(); }
void CmdPartImport::activated(int iMsg) { QStringList filter; filter << QObject::tr("All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep)"); filter << QObject::tr("STEP (*.stp *.step)"); filter << QObject::tr("IGES (*.igs *.iges)"); filter << QObject::tr("BREP (*.brp *.brep)"); filter << QObject::tr("All Files (*.*)"); QString fn = Gui::FileDialog::getOpenFileName(Gui::getMainWindow(), QString(), QString(), filter.join(QLatin1String(";;"))); if (!fn.isEmpty()) { Gui::WaitCursor wc; App::Document* pDoc = getDocument(); if (!pDoc) return; // no document openCommand("Import Part"); QString ext = QFileInfo(fn).suffix().toLower(); if (ext == QLatin1String("step") || ext == QLatin1String("stp") || ext == QLatin1String("iges") || ext == QLatin1String("igs")) { doCommand(Doc, "import ImportGui"); doCommand(Doc, "ImportGui.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } else { doCommand(Doc, "import Part"); doCommand(Doc, "Part.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } commitCommand(); } }
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 SelectionSingleton::clearSelection(const char* pDocName) { App::Document* pDoc; pDoc = getDocument(pDocName); // the document 'pDocName' has already been removed if (!pDoc && !pDocName) { clearCompleteSelection(); } else { std::string docName; if (pDocName) docName = pDocName; else docName = pDoc->getName(); // active document std::list<_SelObj> selList; for (std::list<_SelObj>::iterator it = _SelList.begin(); it != _SelList.end(); ++it) { if (it->DocName != docName) selList.push_back(*it); } _SelList = selList; SelectionChanges Chng; Chng.Type = SelectionChanges::ClrSelection; Chng.pDocName = docName.c_str(); Chng.pObjectName = ""; Chng.pSubName = ""; Notify(Chng); signalSelectionChanged(Chng); Base::Console().Log("Sel : Clear selection\n"); } }
void CmdPartImport::activated(int iMsg) { QStringList filter; filter << QObject::tr("All CAD Files (*.stp *.step *.igs *.iges *.brp *.brep)"); filter << QObject::tr("STEP (*.stp *.step)"); filter << QObject::tr("IGES (*.igs *.iges)"); filter << QObject::tr("BREP (*.brp *.brep)"); filter << QObject::tr("All Files (*.*)"); QString fn = Gui::FileDialog::getOpenFileName(Gui::getMainWindow(), QString(), QString(), filter.join(QLatin1String(";;"))); if (!fn.isEmpty()) { Gui::WaitCursor wc; App::Document* pDoc = getDocument(); if (!pDoc) return; // no document openCommand("Import Part"); QString ext = QFileInfo(fn).suffix().toLower(); if (ext == QLatin1String("step") || ext == QLatin1String("stp") || ext == QLatin1String("iges") || ext == QLatin1String("igs")) { doCommand(Doc, "import ImportGui"); doCommand(Doc, "ImportGui.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } else { doCommand(Doc, "import Part"); doCommand(Doc, "Part.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } commitCommand(); std::list<Gui::MDIView*> views = getActiveGuiDocument()->getMDIViewsOfType(Gui::View3DInventor::getClassTypeId()); for (std::list<Gui::MDIView*>::iterator it = views.begin(); it != views.end(); ++it) { (*it)->viewAll(); } } }
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 SweepWidget::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); if (!activeGui) return; d->document = activeDoc->getName(); std::vector<Part::Feature*> objs = activeDoc->getObjectsOfType<Part::Feature>(); for (std::vector<Part::Feature*>::iterator it = objs.begin(); it!=objs.end(); ++it) { const TopoDS_Shape& shape = (*it)->Shape.getValue(); if (shape.IsNull()) continue; if (shape.ShapeType() == TopAbs_FACE || shape.ShapeType() == TopAbs_WIRE || shape.ShapeType() == TopAbs_EDGE || shape.ShapeType() == TopAbs_VERTEX) { QString label = QString::fromUtf8((*it)->Label.getValue()); QString name = QString::fromAscii((*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()); d->ui.selector->availableTreeWidget()->addTopLevelItem(child); } } }
void Tessellation::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (!activeDoc) return; Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); if (!activeGui) return; this->document = QString::fromAscii(activeDoc->getName()); std::vector<Part::Feature*> objs = activeDoc->getObjectsOfType<Part::Feature>(); for (std::vector<Part::Feature*>::iterator it = objs.begin(); it!=objs.end(); ++it) { const TopoDS_Shape& shape = (*it)->Shape.getValue(); if (shape.IsNull()) continue; bool hasfaces = false; TopExp_Explorer xp(shape,TopAbs_FACE); while (xp.More()) { hasfaces = true; break; } if (hasfaces) { QString label = QString::fromUtf8((*it)->Label.getValue()); QString name = QString::fromAscii((*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->treeWidget->addTopLevelItem(child); } } }
static PyObject * open(PyObject *self, PyObject *args) { char* Name; if (!PyArg_ParseTuple(args, "et","utf-8",&Name)) return NULL; std::string EncodedName = std::string(Name); PyMem_Free(Name); Base::FileInfo fi(EncodedName); if (!fi.exists()) Py_Error(Base::BaseExceptionFreeCADError, "File not found"); Gui::WaitCursor wc; wc.restoreCursor(); PY_TRY { std::string path = App::GetApplication().getHomePath(); path += "Mod/Path/PathScripts/"; QDir dir1(QString::fromUtf8(path.c_str()), QString::fromAscii("*_pre.py")); std::string cMacroPath = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Macro") ->GetASCII("MacroPath",App::Application::getUserAppDataDir().c_str()); QDir dir2(QString::fromUtf8(cMacroPath.c_str()), QString::fromAscii("*_pre.py")); QFileInfoList list = dir1.entryInfoList(); list << dir2.entryInfoList(); std::vector<std::string> scripts; for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); scripts.push_back(fileInfo.baseName().toStdString()); } std::string selected; PathGui::DlgProcessorChooser Dlg(scripts); if (Dlg.exec() != QDialog::Accepted) { Py_Return; } selected = Dlg.getSelected(); std::ostringstream pre; std::ostringstream cmd; if (selected.empty()) { App::Document *pcDoc = App::GetApplication().newDocument("Unnamed"); Gui::Command::runCommand(Gui::Command::Gui,"import Path"); cmd << "Path.read(\"" << EncodedName << "\",\"" << pcDoc->getName() << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } else { for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); if (fileInfo.baseName().toStdString() == selected) { if (fileInfo.absoluteFilePath().contains(QString::fromAscii("PathScripts"))) { pre << "from PathScripts import " << selected; } else { pre << "import " << selected; } Gui::Command::runCommand(Gui::Command::Gui,pre.str().c_str()); cmd << selected << ".open(\"" << EncodedName << "\")"; Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } } } } PY_CATCH; Py_Return; }
void SelectionSingleton::slotRenamedObject(const App::DocumentObject& Obj) { // compare internals with the document and change them if needed App::Document* pDoc = Obj.getDocument(); for (std::list<_SelObj>::iterator it = _SelList.begin(); it != _SelList.end(); ++it) { if (it->pDoc == pDoc) { it->DocName = pDoc->getName(); } } }
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 (...) { } }
void AutoSaver::slotDeleteDocument(const App::Document& Doc) { std::string name = Doc.getName(); std::map<std::string, AutoSaveProperty*>::iterator it = saverMap.find(name); if (it != saverMap.end()) { if (it->second->timerId > 0) killTimer(it->second->timerId); delete it->second; saverMap.erase(it); } }
void CmdPartShapeFromMesh::activated(int iMsg) { Q_UNUSED(iMsg); bool ok; double tol = QInputDialog::getDouble(Gui::getMainWindow(), QObject::tr("Sewing Tolerance"), QObject::tr("Enter tolerance for sewing shape:"), 0.1, 0.01,10.0,2,&ok); if (!ok) return; Base::Type meshid = Base::Type::fromName("Mesh::Feature"); std::vector<App::DocumentObject*> meshes; meshes = Gui::Selection().getObjectsOfType(meshid); Gui::WaitCursor wc; std::vector<App::DocumentObject*>::iterator it; openCommand("Convert mesh"); for (it = meshes.begin(); it != meshes.end(); ++it) { App::Document* doc = (*it)->getDocument(); std::string mesh = (*it)->getNameInDocument(); std::string name = doc->getUniqueObjectName(mesh.c_str()); doCommand(Doc,"import Part"); doCommand(Doc,"FreeCAD.getDocument(\"%s\").addObject(\"Part::Feature\",\"%s\")" ,doc->getName() ,name.c_str()); doCommand(Doc,"__shape__=Part.Shape()"); doCommand(Doc,"__shape__.makeShapeFromMesh(" "FreeCAD.getDocument(\"%s\").getObject(\"%s\").Mesh.Topology,%f" ")" ,doc->getName() ,mesh.c_str() ,tol); doCommand(Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Shape=__shape__" ,doc->getName() ,name.c_str()); doCommand(Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").purgeTouched()" ,doc->getName() ,name.c_str()); doCommand(Doc,"del __shape__"); } commitCommand(); }
static PyObject * importer(PyObject *self, PyObject *args) { char* Name; char* DocName=0; if (!PyArg_ParseTuple(args, "et|s","utf-8",&Name,&DocName)) return NULL; std::string EncodedName = std::string(Name); PyMem_Free(Name); Base::FileInfo fi(EncodedName); if (!fi.exists()) Py_Error(Base::BaseExceptionFreeCADError, "File not found"); PY_TRY { std::string path = App::GetApplication().getHomePath(); path += "Mod/Path/PathScripts/"; QDir dir(QString::fromUtf8(path.c_str()), QString::fromAscii("pre_*.py")); QFileInfoList list = dir.entryInfoList(); std::vector<std::string> scripts; for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); scripts.push_back(fileInfo.baseName().toStdString()); } std::string selected; PathGui::DlgProcessorChooser Dlg(scripts); if (Dlg.exec() != QDialog::Accepted) { Py_Return; } selected = Dlg.getSelected(); App::Document *pcDoc = 0; if (DocName) pcDoc = App::GetApplication().getDocument(DocName); else pcDoc = App::GetApplication().getActiveDocument(); if (!pcDoc) { pcDoc = App::GetApplication().newDocument(DocName); } std::ostringstream cmd; cmd << "Path.read(\"" << EncodedName << "\",\"" << pcDoc->getName() << "\""; if (!selected.empty()) cmd << ",\"" << selected << "\""; cmd << ")"; Gui::Command::runCommand(Gui::Command::Gui,"import Path"); Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } PY_CATCH; Py_Return; }
void ConstraintView::deleteSelectedItems() { App::Document* doc = App::GetApplication().getActiveDocument(); if (!doc) return; doc->openTransaction("Delete"); std::vector<Gui::SelectionObject> sel = Gui::Selection().getSelectionEx(doc->getName()); for (std::vector<Gui::SelectionObject>::iterator ft = sel.begin(); ft != sel.end(); ++ft) { Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(ft->getObject()); if (vp) { vp->onDelete(ft->getSubNames()); } } doc->commitTransaction(); }
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()); }
void Tessellation::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (!activeDoc) return; Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); if (!activeGui) return; this->document = QString::fromAscii(activeDoc->getName()); std::vector<Part::Feature*> objs = activeDoc->getObjectsOfType<Part::Feature>(); double edgeLen = 0; bool foundSelection = false; for (std::vector<Part::Feature*>::iterator it = objs.begin(); it!=objs.end(); ++it) { const TopoDS_Shape& shape = (*it)->Shape.getValue(); if (shape.IsNull()) continue; bool hasfaces = false; TopExp_Explorer xp(shape,TopAbs_FACE); while (xp.More()) { hasfaces = true; break; } if (hasfaces) { Base::BoundBox3d bbox = (*it)->Shape.getBoundingBox(); edgeLen = std::max<double>(edgeLen, bbox.LengthX()); edgeLen = std::max<double>(edgeLen, bbox.LengthY()); edgeLen = std::max<double>(edgeLen, bbox.LengthZ()); QString label = QString::fromUtf8((*it)->Label.getValue()); QString name = QString::fromAscii((*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->treeWidget->addTopLevelItem(child); if (Gui::Selection().isSelected(*it)) { child->setSelected(true); foundSelection = true; } } } ui->spinMaximumEdgeLength->setValue(edgeLen/10); if (foundSelection) ui->treeWidget->hide(); }
void AutoSaver::slotCreateDocument(const App::Document& Doc) { std::string name = Doc.getName(); int id = timeout > 0 ? startTimer(timeout) : 0; AutoSaveProperty* as = new AutoSaveProperty(&Doc); as->timerId = id; if (!this->compressed) { std::string dirName = Doc.TransientDir.getValue(); dirName += "/fc_recovery_files"; Base::FileInfo fi(dirName); fi.createDirectory(); as->dirName = dirName; } saverMap.insert(std::make_pair(name, as)); }
void CmdAssemblyAddExistingComponent::activated(int iMsg) { Assembly::Product *dest = 0; unsigned int n = getSelection().countObjectsOfType(Assembly::Product::getClassTypeId()); if (n >= 1) { std::vector<App::DocumentObject*> Sel = getSelection().getObjectsOfType(Assembly::Product::getClassTypeId()); dest = dynamic_cast<Assembly::Product*>(Sel.front()); }else if(ActiveAsmObject && ActiveAsmObject->getTypeId().isDerivedFrom(Assembly::Product::getClassTypeId())) { dest = dynamic_cast<Assembly::Product*>(ActiveAsmObject); }else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active or selected assembly"), QObject::tr("You need a active or selected assembly to insert a component in.")); return; } // asking for file name (only step at the moment) QStringList filter; filter << QString::fromLatin1("STEP (*.stp *.step)"); filter << QString::fromLatin1("IGES (*.igs *.iges)"); filter << QString::fromLatin1("BREP (*.brp *.brep)"); filter << QString::fromLatin1("Mesh (*.stl *.obj)"); filter << QString::fromLatin1("VRML (*.wrl)"); QString select; QString fn = Gui::FileDialog::getOpenFileName(Gui::getMainWindow(), QString(), QString(), filter.join(QLatin1String(";;")), &select); if (!fn.isEmpty()) { Gui::WaitCursor wc; App::Document* pDoc = getDocument(); if (!pDoc) return; // no document openCommand("Import an Assembly"); if (select == filter[1] || select == filter[3]) { doCommand(Doc, "import ImportGui"); doCommand(Doc, "ImportGui.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } else { doCommand(Doc, "import Part"); doCommand(Doc, "Part.insert(\"%s\",\"%s\")", (const char*)fn.toUtf8(), pDoc->getName()); } commitCommand(); this->updateActive(); } }
static PyObject * exporter(PyObject *self, PyObject *args) { PyObject* object; char* Name; if (!PyArg_ParseTuple(args, "Oet",&object,"utf-8",&Name)) return NULL; std::string EncodedName = std::string(Name); PyMem_Free(Name); PY_TRY { Py::Sequence list(object); if (list.size() == 0) { Py_Return; } else if (list.size() > 1) Py_Error(Base::BaseExceptionFreeCADError, "Unable to export more than one object to a GCode file"); PyObject* item = list[0].ptr(); if (PyObject_TypeCheck(item, &(App::DocumentObjectPy::Type))) { App::DocumentObject* obj = static_cast<App::DocumentObjectPy*>(item)->getDocumentObjectPtr(); std::string path = App::GetApplication().getHomePath(); path += "Mod/Path/PathScripts/"; QDir dir(QString::fromUtf8(path.c_str()), QString::fromAscii("post_*.py")); QFileInfoList list = dir.entryInfoList(); std::vector<std::string> scripts; for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); scripts.push_back(fileInfo.baseName().toStdString()); } std::string selected; PathGui::DlgProcessorChooser Dlg(scripts); if (Dlg.exec() != QDialog::Accepted) { Py_Return; } selected = Dlg.getSelected(); std::ostringstream cmd; App::Document* doc = obj->getDocument(); cmd << "Path.write(FreeCAD.getDocument(\"" << doc->getName() << "\").getObject(\"" << obj->getNameInDocument() << "\"),\"" << EncodedName << "\""; if (!selected.empty()) cmd << ",\"" << selected << "\""; cmd << ")"; Gui::Command::runCommand(Gui::Command::Gui,"import Path"); Gui::Command::runCommand(Gui::Command::Gui,cmd.str().c_str()); } } PY_CATCH; Py_Return; }
void SweepWidget::findShapes() { App::Document* activeDoc = App::GetApplication().getActiveDocument(); Gui::Document* activeGui = Gui::Application::Instance->getDocument(activeDoc); if (!activeGui) return; d->document = activeDoc->getName(); std::vector<Part::Feature*> objs = activeDoc->getObjectsOfType<Part::Feature>(); for (std::vector<Part::Feature*>::iterator it = objs.begin(); it!=objs.end(); ++it) { TopoDS_Shape shape = (*it)->Shape.getValue(); if (shape.IsNull()) continue; // also allow compounds with a single face, wire, edge or vertex if (shape.ShapeType() == TopAbs_COMPOUND) { TopoDS_Iterator it(shape); int numChilds=0; TopoDS_Shape child; for (; it.More(); it.Next(), numChilds++) { if (!it.Value().IsNull()) child = it.Value(); } if (numChilds == 1) shape = child; } if (shape.ShapeType() == TopAbs_FACE || shape.ShapeType() == TopAbs_WIRE || shape.ShapeType() == TopAbs_EDGE || shape.ShapeType() == TopAbs_VERTEX) { 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()); d->ui.selector->availableTreeWidget()->addTopLevelItem(child); } } }
void SelectionView::search(QString text) { if (!text.isEmpty()) { App::Document* doc = App::GetApplication().getActiveDocument(); std::vector<App::DocumentObject*> objects; if (doc) { Gui::Selection().clearSelection(); objects = doc->getObjects(); for (std::vector<App::DocumentObject*>::iterator it = objects.begin(); it != objects.end(); ++it) { QString label = QString::fromUtf8((*it)->Label.getValue()); if (label.contains(text,Qt::CaseInsensitive)) { if (!Gui::Selection().hasSelection((*it)->getNameInDocument())) { Gui::Selection().addSelection(doc->getName(),(*it)->getNameInDocument(),0); } } } } } }
Placement::Placement(QWidget* parent, Qt::WFlags fl) : Gui::LocationDialog(parent, fl) { propertyName = "Placement"; // default name ui = new Ui_PlacementComp(this); ui->applyPlacementChange->hide(); ui->xPos->setDecimals(Base::UnitsApi::getDecimals()); ui->yPos->setDecimals(Base::UnitsApi::getDecimals()); ui->zPos->setDecimals(Base::UnitsApi::getDecimals()); ui->xCnt->setDecimals(Base::UnitsApi::getDecimals()); ui->yCnt->setDecimals(Base::UnitsApi::getDecimals()); ui->zCnt->setDecimals(Base::UnitsApi::getDecimals()); ui->yawAngle->setDecimals(Base::UnitsApi::getDecimals()); ui->pitchAngle->setDecimals(Base::UnitsApi::getDecimals()); ui->rollAngle->setDecimals(Base::UnitsApi::getDecimals()); ui->angle->setDecimals(Base::UnitsApi::getDecimals()); ui->angle->setSuffix(QString::fromUtf8(" \xc2\xb0")); ui->yawAngle->setSuffix(QString::fromUtf8(" \xc2\xb0")); ui->pitchAngle->setSuffix(QString::fromUtf8(" \xc2\xb0")); ui->rollAngle->setSuffix(QString::fromUtf8(" \xc2\xb0")); // create a signal mapper in order to have one slot to perform the change signalMapper = new QSignalMapper(this); connect(this, SIGNAL(directionChanged()), signalMapper, SLOT(map())); signalMapper->setMapping(this, 0); int id = 1; QList<QDoubleSpinBox*> sb = this->findChildren<QDoubleSpinBox*>(); for (QList<QDoubleSpinBox*>::iterator it = sb.begin(); it != sb.end(); ++it) { connect(*it, SIGNAL(valueChanged(double)), signalMapper, SLOT(map())); signalMapper->setMapping(*it, id++); } connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(onPlacementChanged(int))); connectAct = Application::Instance->signalActiveDocument.connect (boost::bind(&Placement::slotActiveDocument, this, _1)); App::Document* activeDoc = App::GetApplication().getActiveDocument(); if (activeDoc) documents.insert(activeDoc->getName()); }
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 DlgFilletEdges::onSelectionChanged(const Gui::SelectionChanges& msg) { // no object selected in the combobox or no sub-element was selected if (!d->object || !msg.pSubName) return; if (msg.Type == Gui::SelectionChanges::AddSelection || msg.Type == Gui::SelectionChanges::RmvSelection) { // when adding a sub-element to the selection check // whether this is the currently handled object App::Document* doc = d->object->getDocument(); std::string docname = doc->getName(); std::string objname = d->object->getNameInDocument(); if (docname==msg.pDocName && objname==msg.pObjectName) { QString subelement = QString::fromAscii(msg.pSubName); QAbstractItemModel* model = ui->treeView->model(); for (int i=0; i<model->rowCount(); ++i) { int id = model->data(model->index(i,0), Qt::UserRole).toInt(); QString name = QString::fromAscii("Edge%1").arg(id); if (name == subelement) { // ok, check the selected sub-element Qt::CheckState checkState = (msg.Type == Gui::SelectionChanges::AddSelection ? Qt::Checked : Qt::Unchecked); QVariant value(static_cast<int>(checkState)); QModelIndex index = model->index(i,0); model->setData(index, value, Qt::CheckStateRole); // select the item ui->treeView->selectionModel()->setCurrentIndex(index,QItemSelectionModel::NoUpdate); QItemSelection selection(index, model->index(i,1)); ui->treeView->selectionModel()->select(selection, QItemSelectionModel::ClearAndSelect); ui->treeView->update(); break; } } } } }
PyObject* Application::sExport(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { PyObject* object; const char* filename; if (!PyArg_ParseTuple(args, "Os",&object,&filename)) return NULL; PY_TRY { App::Document* doc = 0; Py::List list(object); for (Py::List::iterator it = list.begin(); it != list.end(); ++it) { PyObject* item = (*it).ptr(); if (PyObject_TypeCheck(item, &(App::DocumentObjectPy::Type))) { App::DocumentObject* obj = static_cast<App::DocumentObjectPy*>(item)->getDocumentObjectPtr(); doc = obj->getDocument(); break; } } // get the view that belongs to the found document if (doc) { QString fileName = QString::fromUtf8(filename); QFileInfo fi; fi.setFile(fileName); QString ext = fi.completeSuffix().toLower(); if (ext == QLatin1String("iv") || ext == QLatin1String("wrl") || ext == QLatin1String("vrml") || ext == QLatin1String("wrz") || ext == QLatin1String("svg") || ext == QLatin1String("idtf")) { Gui::Document* gui_doc = Application::Instance->getDocument(doc); std::list<MDIView*> view3d = gui_doc->getMDIViewsOfType(View3DInventor::getClassTypeId()); if (view3d.empty()) { PyErr_SetString(PyExc_Exception, "Cannot export to SVG because document doesn't have a 3d view"); return 0; } else { QString cmd = QString::fromLatin1( "Gui.getDocument(\"%1\").mdiViewsOfType('Gui::View3DInventor')[0].dump(\"%2\")" ).arg(QLatin1String(doc->getName())).arg(fi.absoluteFilePath()); Base::Interpreter().runString(cmd.toUtf8()); } } else if (ext == QLatin1String("pdf")) { Gui::Document* gui_doc = Application::Instance->getDocument(doc); if (gui_doc) { Gui::MDIView* view = gui_doc->getActiveView(); if (view) { View3DInventor* view3d = qobject_cast<View3DInventor*>(view); if (view3d) view3d->viewAll(); QPrinter printer(QPrinter::ScreenResolution); printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName(fileName); view->print(&printer); } } } } } PY_CATCH; Py_Return; }