bool SheetView::onMsg(const char *pMsg, const char **) { if(strcmp("Undo",pMsg) == 0 ) { getGuiDocument()->undo(1); App::Document* doc = getAppDocument(); if (doc) doc->recompute(); return true; } else if(strcmp("Redo",pMsg) == 0 ) { getGuiDocument()->redo(1); App::Document* doc = getAppDocument(); if (doc) doc->recompute(); return true; } else if (strcmp("Save",pMsg) == 0) { getGuiDocument()->save(); return true; } else if (strcmp("SaveAs",pMsg) == 0) { getGuiDocument()->saveAs(); return true; } else return false; }
PyObject* Application::sInsert(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { const char* Name; const char* DocName=0; if (!PyArg_ParseTuple(args, "s|s",&Name,&DocName)) return NULL; PY_TRY { QString fileName = QString::fromUtf8(Name); QFileInfo fi; fi.setFile(fileName); QString ext = fi.completeSuffix().toLower(); if (ext == QLatin1String("iv")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); App::DocumentObject* obj = doc->addObject("App::InventorObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyString*>(obj->getPropertyByName("FileName")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); } else if (ext == QLatin1String("wrl") || ext == QLatin1String("vrml") || ext == QLatin1String("wrz")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); App::DocumentObject* obj = doc->addObject("App::VRMLObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyFileIncluded*>(obj->getPropertyByName("VrmlFile")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); } else if (ext == QLatin1String("py") || ext == QLatin1String("fcmacro") || ext == QLatin1String("fcscript")) { PythonEditor* editor = new PythonEditor(); editor->setWindowIcon(Gui::BitmapFactory().pixmap("python_small")); PythonEditorView* edit = new PythonEditorView(editor, getMainWindow()); edit->open(fileName); edit->resize(400, 300); getMainWindow()->addWindow( edit ); } } PY_CATCH; Py_Return; }
void SketcherValidation::on_fixButton_clicked() { // undo command open App::Document* doc = sketch->getDocument(); doc->openTransaction("add coincident constraint"); std::vector<Sketcher::Constraint*> constr; for (std::vector<ConstraintIds>::iterator it = this->vertexConstraints.begin(); it != this->vertexConstraints.end(); ++it) { Sketcher::Constraint* c = new Sketcher::Constraint(); c->Type = Sketcher::Coincident; c->First = it->First; c->Second = it->Second; c->FirstPos = it->FirstPos; c->SecondPos = it->SecondPos; constr.push_back(c); } sketch->addConstraints(constr); this->vertexConstraints.clear(); ui->fixButton->setEnabled(false); hidePoints(); for (std::vector<Sketcher::Constraint*>::iterator it = constr.begin(); it != constr.end(); ++it) { delete *it; } // finish the transaction and update Gui::WaitCursor wc; doc->commitTransaction(); doc->recompute(); }
void PropertyEditor::closeEditor (QWidget * editor, QAbstractItemDelegate::EndEditHint hint) { if (autoupdate) { App::Document* doc = App::GetApplication().getActiveDocument(); if (doc && doc->isTouched()) doc->recompute(); } QTreeView::closeEditor(editor, hint); }
void DlgRevolution::accept() { if (ui->treeWidget->selectedItems().isEmpty()) { QMessageBox::critical(this, windowTitle(), tr("Select a shape for revolution, first.")); return; } Gui::WaitCursor wc; App::Document* activeDoc = App::GetApplication().getActiveDocument(); activeDoc->openTransaction("Revolve"); QString shape, type, name, solid; QList<QTreeWidgetItem *> items = ui->treeWidget->selectedItems(); if (ui->checkSolid->isChecked()) { solid = QString::fromLatin1("True");} else { solid = QString::fromLatin1("False");} for (QList<QTreeWidgetItem *>::iterator it = items.begin(); it != items.end(); ++it) { shape = (*it)->data(0, Qt::UserRole).toString(); type = QString::fromLatin1("Part::Revolution"); name = QString::fromLatin1(activeDoc->getUniqueObjectName("Revolve").c_str()); Base::Vector3d axis = this->getDirection(); QString code = QString::fromLatin1( "FreeCAD.ActiveDocument.addObject(\"%1\",\"%2\")\n" "FreeCAD.ActiveDocument.%2.Source = FreeCAD.ActiveDocument.%3\n" "FreeCAD.ActiveDocument.%2.Axis = (%4,%5,%6)\n" "FreeCAD.ActiveDocument.%2.Base = (%7,%8,%9)\n" "FreeCAD.ActiveDocument.%2.Angle = %10\n" "FreeCAD.ActiveDocument.%2.Solid = %11\n" "FreeCADGui.ActiveDocument.%3.Visibility = False\n") .arg(type).arg(name).arg(shape) .arg(axis.x,0,'f',2) .arg(axis.y,0,'f',2) .arg(axis.z,0,'f',2) .arg(ui->xPos->value(),0,'f',2) .arg(ui->yPos->value(),0,'f',2) .arg(ui->zPos->value(),0,'f',2) .arg(ui->angle->value(),0,'f',2) .arg(solid) ; Gui::Application::Instance->runPythonCode((const char*)code.toLatin1()); QByteArray to = name.toLatin1(); QByteArray from = shape.toLatin1(); Gui::Command::copyVisual(to, "ShapeColor", from); Gui::Command::copyVisual(to, "LineColor", from); Gui::Command::copyVisual(to, "PointColor", from); } activeDoc->commitTransaction(); activeDoc->recompute(); QDialog::accept(); }
Py::Object show(const Py::Tuple& args) { PyObject *pcObj; if (!PyArg_ParseTuple(args.ptr(), "O!", &(FemMeshPy::Type), &pcObj)) throw Py::Exception(); App::Document *pcDoc = App::GetApplication().getActiveDocument(); if (!pcDoc) pcDoc = App::GetApplication().newDocument(); FemMeshPy* pShape = static_cast<FemMeshPy*>(pcObj); Fem::FemMeshObject *pcFeature = (Fem::FemMeshObject *)pcDoc->addObject("Fem::FemMeshObject", "Mesh"); // copy the data //TopoShape* shape = new MeshObject(*pShape->getTopoShapeObjectPtr()); pcFeature->FemMesh.setValue(*(pShape->getFemMeshPtr())); pcDoc->recompute(); return Py::None(); }
Py::Object read(const Py::Tuple& args) { char* Name; const char* DocName=0; if (!PyArg_ParseTuple(args.ptr(), "et|s","utf-8",&Name,&DocName)) throw Py::Exception(); std::string EncodedName = std::string(Name); PyMem_Free(Name); Base::FileInfo file(EncodedName.c_str()); if (!file.exists()) throw Py::RuntimeError("File doesn't exist"); App::Document *pcDoc; if (DocName) pcDoc = App::GetApplication().getDocument(DocName); else pcDoc = App::GetApplication().getActiveDocument(); if (!pcDoc) pcDoc = App::GetApplication().newDocument(DocName); try { // read the gcode file std::ifstream filestr(file.filePath().c_str()); std::stringstream buffer; buffer << filestr.rdbuf(); std::string gcode = buffer.str(); Toolpath path; path.setFromGCode(gcode); Path::Feature *object = static_cast<Path::Feature *>(pcDoc->addObject("Path::Feature",file.fileNamePure().c_str())); object->Path.setValue(path); pcDoc->recompute(); } catch (const Base::Exception& e) { throw Py::RuntimeError(e.what()); } return Py::None(); }
Py::Object insert(const Py::Tuple& args) { char* Name; const char* DocName; if (!PyArg_ParseTuple(args.ptr(), "ets","utf-8",&Name,&DocName)) throw Py::Exception(); std::string EncodedName = std::string(Name); PyMem_Free(Name); try { //Base::Console().Log("Insert in Part with %s",Name); Base::FileInfo file(EncodedName.c_str()); // extract extension if (file.extension().empty()) throw Py::RuntimeError("No file extension"); App::Document *pcDoc = App::GetApplication().getDocument(DocName); if (!pcDoc) { pcDoc = App::GetApplication().newDocument(DocName); } if (file.hasExtension("skf")) { Sketcher::SketchObjectSF *pcFeature = (Sketcher::SketchObjectSF *)pcDoc->addObject("Sketcher::SketchObjectSF",file.fileNamePure().c_str()); pcFeature->SketchFlatFile.setValue(EncodedName.c_str()); pcDoc->recompute(); } else { throw Py::RuntimeError("Unknown file extension"); } } catch (const Base::Exception& e) { throw Py::RuntimeError(e.what()); } return Py::None(); }
/* module functions */ static PyObject * insert(PyObject *self, PyObject *args) { char* Name; const char* DocName; if (!PyArg_ParseTuple(args, "ets","utf-8",&Name,&DocName)) return NULL; std::string EncodedName = std::string(Name); PyMem_Free(Name); PY_TRY { //Base::Console().Log("Insert in Part with %s",Name); Base::FileInfo file(EncodedName.c_str()); // extract ending if (file.extension() == "") Py_Error(Base::BaseExceptionFreeCADError,"no file ending"); App::Document *pcDoc = App::GetApplication().getDocument(DocName); if (!pcDoc) { pcDoc = App::GetApplication().newDocument(DocName); } if (file.hasExtension("skf")) { Sketcher::SketchObjectSF *pcFeature = (Sketcher::SketchObjectSF *)pcDoc->addObject("Sketcher::SketchObjectSF",file.fileNamePure().c_str()); pcFeature->SketchFlatFile.setValue(EncodedName.c_str()); pcDoc->recompute(); } else { Py_Error(Base::BaseExceptionFreeCADError,"unknown file ending"); } } PY_CATCH; Py_Return; }
static PyObject * importer(PyObject *self, PyObject *args) { char* Name; char* DocName=0; if (!PyArg_ParseTuple(args, "et|s","utf-8",&Name,&DocName)) return 0; std::string Utf8Name = std::string(Name); PyMem_Free(Name); std::string name8bit = Part::encodeFilename(Utf8Name); PY_TRY { //Base::Console().Log("Insert in Part with %s",Name); Base::FileInfo file(Utf8Name.c_str()); App::Document *pcDoc = 0; if (DocName) { pcDoc = App::GetApplication().getDocument(DocName); } if (!pcDoc) { pcDoc = App::GetApplication().newDocument("Unnamed"); } Handle(XCAFApp_Application) hApp = XCAFApp_Application::GetApplication(); Handle(TDocStd_Document) hDoc; hApp->NewDocument(TCollection_ExtendedString("MDTV-CAF"), hDoc); if (file.hasExtension("stp") || file.hasExtension("step")) { try { STEPCAFControl_Reader aReader; aReader.SetColorMode(true); aReader.SetNameMode(true); aReader.SetLayerMode(true); if (aReader.ReadFile((const char*)name8bit.c_str()) != IFSelect_RetDone) { PyErr_SetString(Base::BaseExceptionFreeCADError, "cannot read STEP file"); return 0; } Handle_Message_ProgressIndicator pi = new Part::ProgressIndicator(100); aReader.Reader().WS()->MapReader()->SetProgress(pi); pi->NewScope(100, "Reading STEP file..."); pi->Show(); aReader.Transfer(hDoc); pi->EndScope(); } catch (OSD_Exception) { Handle_Standard_Failure e = Standard_Failure::Caught(); Base::Console().Error("%s\n", e->GetMessageString()); Base::Console().Message("Try to load STEP file without colors...\n"); Part::ImportStepParts(pcDoc,Utf8Name.c_str()); pcDoc->recompute(); } } else if (file.hasExtension("igs") || file.hasExtension("iges")) { Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part")->GetGroup("IGES"); try { IGESControl_Controller::Init(); IGESCAFControl_Reader aReader; // http://www.opencascade.org/org/forum/thread_20603/?forum=3 aReader.SetReadVisible(hGrp->GetBool("SkipBlankEntities", true) ? Standard_True : Standard_False); aReader.SetColorMode(true); aReader.SetNameMode(true); aReader.SetLayerMode(true); if (aReader.ReadFile((const char*)name8bit.c_str()) != IFSelect_RetDone) { PyErr_SetString(Base::BaseExceptionFreeCADError, "cannot read IGES file"); return 0; } Handle_Message_ProgressIndicator pi = new Part::ProgressIndicator(100); aReader.WS()->MapReader()->SetProgress(pi); pi->NewScope(100, "Reading IGES file..."); pi->Show(); aReader.Transfer(hDoc); pi->EndScope(); } catch (OSD_Exception) { Handle_Standard_Failure e = Standard_Failure::Caught(); Base::Console().Error("%s\n", e->GetMessageString()); Base::Console().Message("Try to load IGES file without colors...\n"); Part::ImportIgesParts(pcDoc,Utf8Name.c_str()); pcDoc->recompute(); } } else { PyErr_SetString(Base::BaseExceptionFreeCADError, "no supported file format"); return 0; } ImportOCAFExt ocaf(hDoc, pcDoc, file.fileNamePure()); ocaf.loadShapes(); pcDoc->recompute(); } catch (Standard_Failure) {
static PyObject * importer(PyObject *self, PyObject *args) { char* Name; char* DocName=0; if (!PyArg_ParseTuple(args, "s|s",&Name,&DocName)) return 0; PY_TRY { //Base::Console().Log("Insert in Part with %s",Name); Base::FileInfo file(Name); App::Document *pcDoc = 0; if (DocName) { pcDoc = App::GetApplication().getDocument(DocName); } if (!pcDoc) { pcDoc = App::GetApplication().newDocument("Unnamed"); } Handle(XCAFApp_Application) hApp = XCAFApp_Application::GetApplication(); Handle(TDocStd_Document) hDoc; hApp->NewDocument(TCollection_ExtendedString("MDTV-CAF"), hDoc); if (file.hasExtension("stp") || file.hasExtension("step")) { try { STEPCAFControl_Reader aReader; aReader.SetColorMode(true); aReader.SetNameMode(true); aReader.SetLayerMode(true); QString fn = QString::fromUtf8(Name); if (aReader.ReadFile((const char*)fn.toLocal8Bit()) != IFSelect_RetDone) { PyErr_SetString(PyExc_Exception, "cannot read STEP file"); return 0; } Handle_Message_ProgressIndicator pi = new Part::ProgressIndicator(100); aReader.Reader().WS()->MapReader()->SetProgress(pi); pi->NewScope(100, "Reading STEP file..."); pi->Show(); aReader.Transfer(hDoc); pi->EndScope(); } catch (OSD_Exception) { Handle_Standard_Failure e = Standard_Failure::Caught(); Base::Console().Error("%s\n", e->GetMessageString()); Base::Console().Message("Try to load STEP file without colors...\n"); Part::ImportStepParts(pcDoc,Name); pcDoc->recompute(); } } else if (file.hasExtension("igs") || file.hasExtension("iges")) { try { IGESControl_Controller::Init(); Interface_Static::SetIVal("read.surfacecurve.mode",3); IGESCAFControl_Reader aReader; aReader.SetColorMode(true); aReader.SetNameMode(true); aReader.SetLayerMode(true); QString fn = QString::fromUtf8(Name); if (aReader.ReadFile((const char*)fn.toLocal8Bit()) != IFSelect_RetDone) { PyErr_SetString(PyExc_Exception, "cannot read IGES file"); return 0; } Handle_Message_ProgressIndicator pi = new Part::ProgressIndicator(100); aReader.WS()->MapReader()->SetProgress(pi); pi->NewScope(100, "Reading IGES file..."); pi->Show(); aReader.Transfer(hDoc); pi->EndScope(); } catch (OSD_Exception) { Handle_Standard_Failure e = Standard_Failure::Caught(); Base::Console().Error("%s\n", e->GetMessageString()); Base::Console().Message("Try to load IGES file without colors...\n"); Part::ImportIgesParts(pcDoc,Name); pcDoc->recompute(); } } else { PyErr_SetString(PyExc_Exception, "no supported file format"); return 0; } ImportOCAFExt ocaf(hDoc, pcDoc, file.fileNamePure()); ocaf.loadShapes(); pcDoc->recompute(); } catch (Standard_Failure) {
void DlgExtrusion::apply() { if (ui->treeWidget->selectedItems().isEmpty()) { QMessageBox::critical(this, windowTitle(), tr("Select a shape for extrusion, first.")); return; } Gui::WaitCursor wc; App::Document* activeDoc = App::GetApplication().getDocument(this->document.c_str()); if (!activeDoc) { QMessageBox::critical(this, windowTitle(), tr("The document '%1' doesn't exist.").arg(QString::fromUtf8(this->label.c_str()))); return; } activeDoc->openTransaction("Extrude"); Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part"); bool addBaseName = hGrp->GetBool("AddBaseObjectName", false); QString shape, type, name, label; QList<QTreeWidgetItem *> items = ui->treeWidget->selectedItems(); for (QList<QTreeWidgetItem *>::iterator it = items.begin(); it != items.end(); ++it) { shape = (*it)->data(0, Qt::UserRole).toString(); type = QString::fromLatin1("Part::Extrusion"); if (addBaseName) { QString baseName = QString::fromLatin1("Extrude_%1").arg(shape); label = QString::fromLatin1("%1_Extrude").arg((*it)->text(0)); name = QString::fromLatin1(activeDoc->getUniqueObjectName((const char*)baseName.toLatin1()).c_str()); } else { name = QString::fromLatin1(activeDoc->getUniqueObjectName("Extrude").c_str()); label = name; } double len = ui->dirLen->value(); double dirX = ui->dirX->value(); double dirY = ui->dirY->value(); double dirZ = ui->dirZ->value(); double angle = ui->taperAngle->value().getValue(); bool makeSolid = ui->makeSolid->isChecked(); // inspect geometry App::DocumentObject* obj = activeDoc->getObject((const char*)shape.toLatin1()); if (!obj || !obj->isDerivedFrom(Part::Feature::getClassTypeId())) continue; Part::Feature* fea = static_cast<Part::Feature*>(obj); const TopoDS_Shape& data = fea->Shape.getValue(); if (data.IsNull()) continue; // check for planes if (ui->checkNormal->isChecked() && data.ShapeType() == TopAbs_FACE) { BRepAdaptor_Surface adapt(TopoDS::Face(data)); if (adapt.GetType() == GeomAbs_Plane) { double u = 0.5*(adapt.FirstUParameter() + adapt.LastUParameter()); double v = 0.5*(adapt.FirstVParameter() + adapt.LastVParameter()); BRepLProp_SLProps prop(adapt,u,v,1,Precision::Confusion()); if (prop.IsNormalDefined()) { gp_Pnt pnt; gp_Vec vec; // handles the orientation state of the shape BRepGProp_Face(TopoDS::Face(data)).Normal(u,v,pnt,vec); dirX = vec.X(); dirY = vec.Y(); dirZ = vec.Z(); } } } QString code = QString::fromLatin1( "FreeCAD.getDocument(\"%1\").addObject(\"%2\",\"%3\")\n" "FreeCAD.getDocument(\"%1\").%3.Base = FreeCAD.getDocument(\"%1\").%4\n" "FreeCAD.getDocument(\"%1\").%3.Dir = (%5,%6,%7)\n" "FreeCAD.getDocument(\"%1\").%3.Solid = (%8)\n" "FreeCAD.getDocument(\"%1\").%3.TaperAngle = (%9)\n" "FreeCADGui.getDocument(\"%1\").%4.Visibility = False\n" "FreeCAD.getDocument(\"%1\").%3.Label = '%10'\n") .arg(QString::fromLatin1(this->document.c_str())) .arg(type).arg(name).arg(shape) .arg(dirX*len) .arg(dirY*len) .arg(dirZ*len) .arg(makeSolid ? QLatin1String("True") : QLatin1String("False")) .arg(angle) .arg(label); Gui::Application::Instance->runPythonCode((const char*)code.toLatin1()); QByteArray to = name.toLatin1(); QByteArray from = shape.toLatin1(); Gui::Command::copyVisual(to, "ShapeColor", from); Gui::Command::copyVisual(to, "LineColor", from); Gui::Command::copyVisual(to, "PointColor", from); } activeDoc->commitTransaction(); try { ui->statusLabel->clear(); activeDoc->recompute(); ui->statusLabel->setText(QString::fromLatin1 ("<span style=\" color:#55aa00;\">%1</span>").arg(tr("Succeeded"))); } catch (const std::exception& e) { ui->statusLabel->setText(QString::fromLatin1 ("<span style=\" color:#ff0000;\">%1</span>").arg(tr("Failed"))); Base::Console().Error("%s\n", e.what()); } catch (const Base::Exception& e) { ui->statusLabel->setText(QString::fromLatin1 ("<span style=\" color:#ff0000;\">%1</span>").arg(tr("Failed"))); Base::Console().Error("%s\n", e.what()); } catch (...) { ui->statusLabel->setText(QString::fromLatin1 ("<span style=\" color:#ff0000;\">%1</span>").arg(tr("Failed"))); Base::Console().Error("General error in extrusion\n"); } }
PyObject* Application::sInsert(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { char* Name; char* DocName=0; if (!PyArg_ParseTuple(args, "et|s","utf-8",&Name,&DocName)) return NULL; std::string Utf8Name = std::string(Name); PyMem_Free(Name); PY_TRY { QString fileName = QString::fromUtf8(Utf8Name.c_str()); QFileInfo fi; fi.setFile(fileName); QString ext = fi.suffix().toLower(); if (ext == QLatin1String("iv")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); App::DocumentObject* obj = doc->addObject("App::InventorObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyString*>(obj->getPropertyByName("FileName")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); } else if (ext == QLatin1String("wrl") || ext == QLatin1String("vrml") || ext == QLatin1String("wrz")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); // Add this to the search path in order to read inline files (#0002029) QByteArray path = fi.absolutePath().toUtf8(); SoInput::addDirectoryFirst(path.constData()); App::DocumentObject* obj = doc->addObject("App::VRMLObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyFileIncluded*>(obj->getPropertyByName("VrmlFile")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); SoInput::removeDirectory(path.constData()); } else if (ext == QLatin1String("py") || ext == QLatin1String("fcmacro") || ext == QLatin1String("fcscript")) { PythonEditor* editor = new PythonEditor(); editor->setWindowIcon(Gui::BitmapFactory().iconFromTheme("applications-python")); PythonEditorView* edit = new PythonEditorView(editor, getMainWindow()); edit->open(fileName); edit->resize(400, 300); getMainWindow()->addWindow( edit ); } else { Base::Console().Error("File type '%s' not supported\n", ext.toLatin1().constData()); } } PY_CATCH; Py_Return; }
void DlgRevolution::accept() { if (!this->validate()) return; Gui::WaitCursor wc; App::Document* activeDoc = App::GetApplication().getActiveDocument(); activeDoc->openTransaction("Revolve"); try{ QString shape, type, name, solid; QList<QTreeWidgetItem *> items = ui->treeWidget->selectedItems(); if (ui->checkSolid->isChecked()) { solid = QString::fromLatin1("True");} else { solid = QString::fromLatin1("False");} App::PropertyLinkSub axisLink; this->getAxisLink(axisLink); QString strAxisLink; if (axisLink.getValue()){ strAxisLink = QString::fromLatin1("(App.ActiveDocument.%1, %2)") .arg(QString::fromLatin1(axisLink.getValue()->getNameInDocument())) .arg(axisLink.getSubValues().size() == 1 ? QString::fromLatin1("\"%1\"").arg(QString::fromLatin1(axisLink.getSubValues()[0].c_str())) : QString() ); } else { strAxisLink = QString::fromLatin1("None"); } QString symmetric; if (ui->checkSymmetric->isChecked()) { symmetric = QString::fromLatin1("True");} else { symmetric = QString::fromLatin1("False");} for (QList<QTreeWidgetItem *>::iterator it = items.begin(); it != items.end(); ++it) { shape = (*it)->data(0, Qt::UserRole).toString(); type = QString::fromLatin1("Part::Revolution"); name = QString::fromLatin1(activeDoc->getUniqueObjectName("Revolve").c_str()); Base::Vector3d axis = this->getDirection(); Base::Vector3d pos = this->getPosition(); QString code = QString::fromLatin1( "FreeCAD.ActiveDocument.addObject(\"%1\",\"%2\")\n" "FreeCAD.ActiveDocument.%2.Source = FreeCAD.ActiveDocument.%3\n" "FreeCAD.ActiveDocument.%2.Axis = (%4,%5,%6)\n" "FreeCAD.ActiveDocument.%2.Base = (%7,%8,%9)\n" "FreeCAD.ActiveDocument.%2.Angle = %10\n" "FreeCAD.ActiveDocument.%2.Solid = %11\n" "FreeCAD.ActiveDocument.%2.AxisLink = %12\n" "FreeCAD.ActiveDocument.%2.Symmetric = %13\n" "FreeCADGui.ActiveDocument.%3.Visibility = False\n") .arg(type).arg(name).arg(shape) //%1, 2, 3 .arg(axis.x,0,'f',15) //%4 .arg(axis.y,0,'f',15) //%5 .arg(axis.z,0,'f',15) //%6 .arg(pos.x, 0,'f',15) //%7 .arg(pos.y, 0,'f',15) //%8 .arg(pos.z, 0,'f',15) //%9 .arg(getAngle(),0,'f',15) //%10 .arg(solid) //%11 .arg(strAxisLink) //%12 .arg(symmetric) //13 ; Gui::Command::runCommand(Gui::Command::App, code.toLatin1()); QByteArray to = name.toLatin1(); QByteArray from = shape.toLatin1(); Gui::Command::copyVisual(to, "ShapeColor", from); Gui::Command::copyVisual(to, "LineColor", from); Gui::Command::copyVisual(to, "PointColor", from); } activeDoc->commitTransaction(); activeDoc->recompute(); } catch (Base::Exception &err) { QMessageBox::critical(this, windowTitle(), tr("Creating Revolve failed.\n\n%1").arg(QString::fromUtf8(err.what()))); return; } catch (...){ QMessageBox::critical(this, windowTitle(), tr("Creating Revolve failed.\n\n%1").arg(QString::fromUtf8("Unknown error"))); return; } QDialog::accept(); }
bool Mirroring::accept() { if (ui->shapes->selectedItems().isEmpty()) { QMessageBox::critical(this, windowTitle(), tr("Select a shape for mirroring, first.")); return false; } App::Document* activeDoc = App::GetApplication().getDocument((const char*)this->document.toLatin1()); if (!activeDoc) { QMessageBox::critical(this, windowTitle(), tr("No such document '%1'.").arg(this->document)); return false; } Gui::WaitCursor wc; unsigned int count = activeDoc->countObjectsOfType(Base::Type::fromName("Part::Mirroring")); activeDoc->openTransaction("Mirroring"); QString shape, label; QRegExp rx(QString::fromLatin1(" \\(Mirror #\\d+\\)$")); QList<QTreeWidgetItem *> items = ui->shapes->selectedItems(); float normx=0, normy=0, normz=0; int index = ui->comboBox->currentIndex(); if (index == 0) normz = 1.0f; else if (index == 1) normy = 1.0f; else normx = 1.0f; double basex = ui->baseX->value(); double basey = ui->baseY->value(); double basez = ui->baseZ->value(); for (QList<QTreeWidgetItem *>::iterator it = items.begin(); it != items.end(); ++it) { shape = (*it)->data(0, Qt::UserRole).toString(); label = (*it)->text(0); // if we already have the suffix " (Mirror #<number>)" remove it int pos = label.indexOf(rx); if (pos > -1) label = label.left(pos); label.append(QString::fromLatin1(" (Mirror #%1)").arg(++count)); QString code = QString::fromLatin1( "__doc__=FreeCAD.getDocument(\"%1\")\n" "__doc__.addObject(\"Part::Mirroring\")\n" "__doc__.ActiveObject.Source=__doc__.getObject(\"%2\")\n" "__doc__.ActiveObject.Label=\"%3\"\n" "__doc__.ActiveObject.Normal=(%4,%5,%6)\n" "__doc__.ActiveObject.Base=(%7,%8,%9)\n" "del __doc__") .arg(this->document).arg(shape).arg(label) .arg(normx).arg(normy).arg(normz) .arg(basex).arg(basey).arg(basez); Gui::Application::Instance->runPythonCode((const char*)code.toLatin1()); QByteArray from = shape.toLatin1(); Gui::Command::copyVisual("ActiveObject", "ShapeColor", from); Gui::Command::copyVisual("ActiveObject", "LineColor", from); Gui::Command::copyVisual("ActiveObject", "PointColor", from); } activeDoc->commitTransaction(); activeDoc->recompute(); return true; }
bool DlgFilletEdges::accept() { if (!d->object) { QMessageBox::warning(this, tr("No shape selected"), tr("No valid shape is selected.\n" "Please select a valid shape in the drop-down box first.")); return false; } App::Document* activeDoc = App::GetApplication().getActiveDocument(); QAbstractItemModel* model = ui->treeView->model(); bool end_radius = !ui->treeView->isColumnHidden(2); bool todo = false; QString shape, type, name; std::string fillet = getFilletType(); int index = ui->shapeObject->currentIndex(); shape = ui->shapeObject->itemData(index).toString(); type = QString::fromAscii("Part::%1").arg(QString::fromAscii(fillet.c_str())); if (d->fillet) name = QString::fromAscii(d->fillet->getNameInDocument()); else name = QString::fromAscii(activeDoc->getUniqueObjectName(fillet.c_str()).c_str()); activeDoc->openTransaction(fillet.c_str()); QString code; if (!d->fillet) { code = QString::fromAscii( "FreeCAD.ActiveDocument.addObject(\"%1\",\"%2\")\n" "FreeCAD.ActiveDocument.%2.Base = FreeCAD.ActiveDocument.%3\n") .arg(type).arg(name).arg(shape); } code += QString::fromAscii("__fillets__ = []\n"); for (int i=0; i<model->rowCount(); ++i) { QVariant value = model->index(i,0).data(Qt::CheckStateRole); Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt()); // is item checked if (checkState & Qt::Checked) { // the index value of the edge int id = model->index(i,0).data(Qt::UserRole).toInt(); double r1 = model->index(i,1).data().toDouble(); double r2 = r1; if (end_radius) r2 = model->index(i,2).data().toDouble(); code += QString::fromAscii( "__fillets__.append((%1,%2,%3))\n") .arg(id).arg(r1,0,'f',2).arg(r2,0,'f',2); todo = true; } } if (!todo) { QMessageBox::warning(this, tr("No edge selected"), tr("No edge entity is checked to fillet.\n" "Please check one or more edge entities first.")); return false; } Gui::WaitCursor wc; code += QString::fromAscii( "FreeCAD.ActiveDocument.%1.Edges = __fillets__\n" "del __fillets__\n" "FreeCADGui.ActiveDocument.%2.Visibility = False\n") .arg(name).arg(shape); Gui::Application::Instance->runPythonCode((const char*)code.toAscii()); activeDoc->commitTransaction(); activeDoc->recompute(); if (d->fillet) { Gui::ViewProvider* vp; vp = Gui::Application::Instance->getViewProvider(d->fillet); if (vp) vp->show(); } QByteArray to = name.toAscii(); QByteArray from = shape.toAscii(); Gui::Command::copyVisual(to, "ShapeColor", from); Gui::Command::copyVisual(to, "LineColor", from); Gui::Command::copyVisual(to, "PointColor", from); return true; }