void CmdTechDrawArchView::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); if (!page) { return; } std::vector<App::DocumentObject*> objects = getSelection().getObjectsOfType(App::DocumentObject::getClassTypeId()); if (objects.size() != 1) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Arch Section Plane object.")); return; } App::Property* prop1 = objects[0]->getPropertyByName("Objects"); App::Property* prop2 = objects[0]->getPropertyByName("OnlySolids"); if ( (!prop1) || (!prop2) ) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("The selected object is not an Arch Section Plane.")); return; } std::string PageName = page->getNameInDocument(); std::string FeatName = getUniqueObjectName("ArchView"); std::string SourceName = objects[0]->getNameInDocument(); openCommand("Create ArchView"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewArch','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),SourceName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); }
void CmdTechDrawNewViewDetail::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); if (!page) { return; } std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(TechDraw::DrawViewPart::getClassTypeId()); if (shapes.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select at least 1 DrawingView object.")); return; } App::DocumentObject* dObj = *(shapes.begin()); TechDraw::DrawViewPart* dvp = static_cast<TechDraw::DrawViewPart*>(dObj); std::string PageName = page->getNameInDocument(); Gui::WaitCursor wc; openCommand("Create view"); std::string FeatName = getUniqueObjectName("Detail"); std::string SourceName = dvp->Source.getValue()->getNameInDocument(); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewDetail','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),SourceName.c_str()); doCommand(Doc,"App.activeDocument().%s.BaseView = App.activeDocument().%s",FeatName.c_str(),(dObj)->getNameInDocument()); doCommand(Doc,"App.activeDocument().%s.Direction = App.activeDocument().%s.Direction",FeatName.c_str(),(dObj)->getNameInDocument()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); }
void CmdTechDrawNewMulti::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); if (!page) { return; } const std::vector<App::DocumentObject*>& shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); if (shapes.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select at least 1 Part object.")); return; } std::string PageName = page->getNameInDocument(); Gui::WaitCursor wc; openCommand("Create view"); std::string FeatName = getUniqueObjectName("MultiView"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewMulti','%s')",FeatName.c_str()); App::DocumentObject *docObj = getDocument()->getObject(FeatName.c_str()); auto multiView( static_cast<TechDraw::DrawViewMulti *>(docObj) ); multiView->Sources.setValues(shapes); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); }
void CmdTechDrawNewHatch::activated(int iMsg) { if (!_checkSelectionHatch(this)) { return; } std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); TechDraw::DrawViewPart * objFeat = dynamic_cast<TechDraw::DrawViewPart *>(selection[0].getObject()); const std::vector<std::string> &subNames = selection[0].getSubNames(); TechDraw::DrawPage* page = objFeat->findParentPage(); std::string PageName = page->getNameInDocument(); TechDraw::DrawHatch *hatch = 0; std::string FeatName = getUniqueObjectName("Hatch"); std::stringstream featLabel; featLabel << FeatName << "F" << TechDraw::DrawUtil::getIndexFromName(subNames.at(0)); openCommand("Create Hatch"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawHatch','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Label = '%s'",FeatName.c_str(),featLabel.str().c_str()); hatch = dynamic_cast<TechDraw::DrawHatch *>(getDocument()->getObject(FeatName.c_str())); hatch->Source.setValue(objFeat, subNames); //should this be: doCommand(Doc,"App..Feat..Source = [(App...%s,%s),(App..%s,%s),...]",objs[0]->getNameInDocument(),subs[0],...); //seems very unwieldy commitCommand(); //Horrible hack to force Tree update ??still required?? double x = objFeat->X.getValue(); objFeat->X.setValue(x); getDocument()->recompute(); }
void CmdTechDrawSymbol::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); // Reading an image QString filename = Gui::FileDialog::getOpenFileName(Gui::getMainWindow(), QObject::tr("Choose an SVG file to open"), QString::null, QString::fromLatin1("%1 (*.svg *.svgz)").arg(QObject::tr("Scalable Vector Graphic"))); if (!filename.isEmpty()) { std::string FeatName = getUniqueObjectName("Symbol"); openCommand("Create Symbol"); doCommand(Doc,"f = open(unicode(\"%s\",'utf-8'),'r')",(const char*)filename.toUtf8()); doCommand(Doc,"svg = f.read()"); doCommand(Doc,"f.close()"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewSymbol','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Symbol = svg",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); } }
void CmdTechDrawDraftView::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::vector<App::DocumentObject*> objects = getSelection().getObjectsOfType(App::DocumentObject::getClassTypeId()); if (objects.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select at least one object.")); return; } std::string PageName = page->getNameInDocument(); for (std::vector<App::DocumentObject*>::iterator it = objects.begin(); it != objects.end(); ++it) { std::string FeatName = getUniqueObjectName("DraftView"); std::string SourceName = (*it)->getNameInDocument(); openCommand("Create DraftView"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewDraft','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),SourceName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); } }
void CmdTechDrawSpreadsheet::activated(int iMsg) { Q_UNUSED(iMsg); const std::vector<App::DocumentObject*> spreads = getSelection().getObjectsOfType(Spreadsheet::Sheet::getClassTypeId()); if (spreads.size() != 1) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Spreadsheet object.")); return; } std::string SpreadName = spreads.front()->getNameInDocument(); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); openCommand("Create spreadsheet view"); std::string FeatName = getUniqueObjectName("Sheet"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewSpreadsheet','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),SpreadName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); }
void DrawSVGTemplate::onChanged(const App::Property* prop) { bool updatePage = false; if (prop == &PageResult) { if (isRestoring()) { //original template has been stored in fcstd file Template.setValue(PageResult.getValue()); } } else if (prop == &Template) { if (!isRestoring()) { EditableTexts.setValues(getEditableTextsFromTemplate()); updatePage = true; } } else if (prop == &EditableTexts) { if (!isRestoring()) { updatePage = true; } } if (updatePage) { execute(); // Update the parent page if exists TechDraw::DrawPage *page = getParentPage(); if (page) page->touch(); } TechDraw::DrawTemplate::onChanged(prop); }
void CmdTechDrawClipPlus::activated(int iMsg) { Q_UNUSED(iMsg); std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); if (selection.size() != 2) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select 1 DrawViewClip and 1 DrawView.")); return; } TechDraw::DrawViewClip* clip = 0; TechDraw::DrawView* view = 0; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { clip = static_cast<TechDraw::DrawViewClip*>((*itSel).getObject()); } else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { view = static_cast<TechDraw::DrawView*>((*itSel).getObject()); } } if (!view) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Drawing View object.")); return; } if (!clip) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Clip object.")); return; } TechDraw::DrawPage* pageClip = clip->findParentPage(); TechDraw::DrawPage* pageView = view->findParentPage(); if (pageClip != pageView) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Clip and View must be from same Page.")); return; } std::string PageName = pageClip->getNameInDocument(); std::string ClipName = clip->getNameInDocument(); std::string ViewName = view->getNameInDocument(); double newX = clip->Width.getValue() / 2.0; double newY = clip->Height.getValue() / 2.0; openCommand("ClipPlus"); doCommand(Doc,"App.activeDocument().%s.ViewObject.Visibility = False",ViewName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",ClipName.c_str(),ViewName.c_str()); doCommand(Doc,"App.activeDocument().%s.X = %.3f",ViewName.c_str(),newX); doCommand(Doc,"App.activeDocument().%s.Y = %.3f",ViewName.c_str(),newY); doCommand(Doc,"App.activeDocument().%s.ViewObject.Visibility = True",ViewName.c_str()); updateActive(); commitCommand(); }
void MDIViewPage::saveDXF(std::string fileName) { TechDraw::DrawPage* page = m_vpPage->getDrawPage(); std::string PageName = page->getNameInDocument(); Gui::Command::openCommand("Save page to dxf"); Gui::Command::doCommand(Gui::Command::Doc,"import TechDraw"); Gui::Command::doCommand(Gui::Command::Doc,"TechDraw.writeDXFPage(App.activeDocument().%s,u\"%s\")", PageName.c_str(),(const char*)fileName.c_str()); Gui::Command::commitCommand(); }
void CmdTechDrawNewView::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); if (shapes.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select at least 1 Part object.")); return; } std::string PageName = page->getNameInDocument(); Gui::WaitCursor wc; const auto selectedProjections( getSelection().getObjectsOfType(TechDraw::DrawView::getClassTypeId()) ); float newScale = 1.0; float newRotation = 0.0; Base::Vector3d newDirection(0.0, 0.0, 1.0); if (!selectedProjections.empty()) { const auto myView( static_cast<TechDraw::DrawView*>(selectedProjections.front()) ); newScale = myView->Scale.getValue(); newRotation = myView->Rotation.getValue(); // The "Direction" property does not belong to TechDraw::DrawView, but to one of the // many child classes that are projecting objects into the drawing. Therefore, we get the // property by name. const App::PropertyVector* const propDirection = dynamic_cast<App::PropertyVector*>(myView->getPropertyByName("Direction")); if (propDirection) { newDirection = propDirection->getValue(); } } openCommand("Create view"); for (std::vector<App::DocumentObject*>::iterator it = shapes.begin(); it != shapes.end(); ++it) { std::string FeatName = getUniqueObjectName("View"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewPart','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),(*it)->getNameInDocument()); doCommand(Doc,"App.activeDocument().%s.Direction = (%e,%e,%e)",FeatName.c_str(), newDirection.x, newDirection.y, newDirection.z); doCommand(Doc,"App.activeDocument().%s.Scale = %e",FeatName.c_str(), newScale); doCommand(Doc,"App.activeDocument().%s.Rotation = %e",FeatName.c_str(), newRotation); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); } updateActive(); commitCommand(); }
void CmdTechDrawLinkDimension::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); bool result = _checkSelection(this,2); if (!result) return; std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); App::DocumentObject* obj3D = 0; std::vector<App::DocumentObject*> parts; std::vector<std::string> subs; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(Part::Feature::getClassTypeId())) { obj3D = ((*itSel).getObject()); std::vector<std::string> subList = (*itSel).getSubNames(); for (auto& s:subList) { parts.push_back(obj3D); subs.push_back(s); } } } if (!obj3D) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr("There is no 3D object in your selection")); return; } if (subs.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr("There are no 3D Edges or Vertices in your selection")); return; } // dialog to select the Dimension to link Gui::Control().showDialog(new TaskDlgLinkDim(parts,subs,page)); page->getDocument()->recompute(); //still need to recompute in Gui. why? }
void CmdTechDrawAnnotation::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); std::string FeatName = getUniqueObjectName("Annotation"); openCommand("Create Annotation"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewAnnotation','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); }
// Function provided by Joe Dowsett, 2014 double DrawProjGroup::calculateAutomaticScale() const { TechDraw::DrawPage *page = getPage(); if (page == NULL) throw Base::Exception("No page is assigned to this feature"); if(!page->hasValidTemplate()) throw Base::Exception("Page template isn't valid"); DrawProjGroupItem *viewPtrs[10]; arrangeViewPointers(viewPtrs); double width, height; minimumBbViews(viewPtrs, width, height); // C++ Standard says casting bool to int gives 0 or 1 int numVertSpaces = (viewPtrs[0] || viewPtrs[3] || viewPtrs[7]) + (viewPtrs[2] || viewPtrs[5] || viewPtrs[9]) + (viewPtrs[6] != NULL); int numHorizSpaces = (viewPtrs[0] || viewPtrs[1] || viewPtrs[2]) + (viewPtrs[7] || viewPtrs[8] || viewPtrs[9]); double availableX = page->getPageWidth() - spacingX.getValue() * (numVertSpaces + 1); double availableY = page->getPageHeight() - spacingY.getValue() * (numHorizSpaces + 1); double scale_x = availableX / width; double scale_y = availableY / height; float working_scale = std::min(scale_x, scale_y); //which gives the largest scale for which the min_space requirements can be met, but we want a 'sensible' scale, rather than 0.28457239... //eg if working_scale = 0.115, then we want to use 0.1, similarly 7.65 -> 5, and 76.5 -> 50 float exponent = std::floor(std::log10(working_scale)); //if working_scale = a * 10^b, what is b? working_scale *= std::pow(10, -exponent); //now find what 'a' is. float valid_scales[2][8] = {{1.0, 1.25, 2.0, 2.5, 3.75, 5.0, 7.5, 10.0}, //equate to 1:10, 1:8, 1:5, 1:4, 3:8, 1:2, 3:4, 1:1 {1.0, 1.5 , 2.0, 3.0, 4.0 , 5.0, 8.0, 10.0}}; //equate to 1:1, 3:2, 2:1, 3:1, 4:1, 5:1, 8:1, 10:1 int i = 7; while (valid_scales[(exponent >= 0)][i] > working_scale) //choose closest value smaller than 'a' from list. i -= 1; //choosing top list if exponent -ve, bottom list for +ve exponent //now have the appropriate scale, reapply the *10^b return valid_scales[(exponent >= 0)][i] * pow(10, exponent); }
void CmdTechDrawNewViewSection::activated(int iMsg) { Q_UNUSED(iMsg); //TODO: should just use BaseView's page TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } //std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(TechDraw::DrawViewPart::getClassTypeId()); if (shapes.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select at least 1 DrawingView object.")); return; } App::DocumentObject* dObj = *(shapes.begin()); TechDraw::DrawViewPart* dvp = static_cast<TechDraw::DrawViewPart*>(dObj); if (dvp->getSectionRef()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("This View already has a related Section. Choose another.")); return; } std::string PageName = page->getNameInDocument(); Gui::WaitCursor wc; openCommand("Create view"); std::string FeatName = getUniqueObjectName("Section"); std::string SourceName = dvp->Source.getValue()->getNameInDocument(); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewSection','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",FeatName.c_str(),SourceName.c_str()); doCommand(Doc,"App.activeDocument().%s.BaseView = App.activeDocument().%s",FeatName.c_str(),(dObj)->getNameInDocument()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); App::DocumentObject *docObj = getDocument()->getObject(FeatName.c_str()); TechDraw::DrawViewSection* dsv = dynamic_cast<TechDraw::DrawViewSection *>(docObj); if (!dsv) { throw Base::Exception("CmdTechDrawNewViewSection DSV not found\n"); } Gui::Control().showDialog(new TaskDlgSectionView(dvp,dsv)); updateActive(); commitCommand(); }
void CmdTechDrawProjGroup::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::vector<App::DocumentObject*> shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); if (shapes.size() != 1) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly 1 Part object.")); return; } std::string PageName = page->getNameInDocument(); Gui::WaitCursor wc; openCommand("Create Projection Group"); std::string multiViewName = getUniqueObjectName("cView"); std::string SourceName = (*shapes.begin())->getNameInDocument(); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawProjGroup','%s')",multiViewName.c_str()); doCommand(Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",multiViewName.c_str(),SourceName.c_str()); App::DocumentObject *docObj = getDocument()->getObject(multiViewName.c_str()); auto multiView( static_cast<TechDraw::DrawProjGroup *>(docObj) ); // set the anchor std::string anchor = "Front"; doCommand(Doc,"App.activeDocument().%s.addProjection('%s')",multiViewName.c_str(),anchor.c_str()); doCommand(Doc,"App.activeDocument().%s.Anchor = App.activeDocument().%s.getItemByLabel('%s')", multiViewName.c_str(),multiViewName.c_str(),anchor.c_str()); // add the multiView to the page doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),multiViewName.c_str()); // create the rest of the desired views Gui::Control().showDialog(new TaskDlgProjGroup(multiView,true)); // // add the multiView to the page // doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),multiViewName.c_str()); updateActive(); commitCommand(); }
App::DocumentObjectExecReturn *DrawView::execute(void) { TechDraw::DrawPage *page = findParentPage(); if(page) { if (ScaleType.isValue("Document")) { if(std::abs(page->Scale.getValue() - Scale.getValue()) > FLT_EPSILON) { Scale.setValue(page->Scale.getValue()); } } else if (ScaleType.isValue("Automatic")) { //check fit. if too big, rescale if (!checkFit(page)) { double newScale = autoScale(page->getPageWidth(),page->getPageHeight()); if(std::abs(newScale - Scale.getValue()) > FLT_EPSILON) { //stops onChanged/execute loop Scale.setValue(newScale); } } } } return App::DocumentObject::execute(); }
void CmdTechDrawClip::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); std::string FeatName = getUniqueObjectName("Clip"); openCommand("Create Clip"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewClip','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.ShowFrame = True",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Height = 30.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Width = 30.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.ShowLabels = False",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); updateActive(); commitCommand(); }
void CmdTechDrawToggleFrame::activated(int iMsg) { TechDraw::DrawPage* page = _findPageCD(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(page); ViewProviderPage* dvp = dynamic_cast<ViewProviderPage*>(vp); if (dvp && dvp->getMDIViewPage()) { dvp->getMDIViewPage()->setFrameState(!dvp->getMDIViewPage()->getFrameState()); } else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No TechDraw Page"), QObject::tr("Need a TechDraw Page for this command")); return; } }
void CmdTechDrawExportPage::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = _findPage(this); if (!page) { return; } std::string PageName = page->getNameInDocument(); Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(page); ViewProviderPage* dvp = dynamic_cast<ViewProviderPage*>(vp); if (dvp && dvp->getMDIViewPage()) { dvp->getMDIViewPage()->saveSVG(); } else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No Drawing View"), QObject::tr("Open Drawing View before attempting export to SVG.")); return; } }
void CmdTechDrawNewDimension::activated(int iMsg) { Q_UNUSED(iMsg); bool result = _checkSelection(this,2); if (!result) return; result = _checkDrawViewPart(this); if (!result) return; //do we still need to pick DVPs out of selection? or should we complain about junk? std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); TechDraw::DrawViewPart* objFeat = 0; std::vector<std::string> SubNames; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { objFeat = static_cast<TechDraw::DrawViewPart*> ((*itSel).getObject()); SubNames = (*itSel).getSubNames(); } } TechDraw::DrawPage* page = objFeat->findParentPage(); std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); std::string dimType; std::vector<App::DocumentObject *> objs; std::vector<std::string> subs; int edgeType = _isValidSingleEdge(this); if (edgeType) { if (edgeType < isCircle) { dimType = "Distance"; objs.push_back(objFeat); subs.push_back(SubNames[0]); } else if (edgeType == isCircle) { dimType = "Radius"; } else { dimType = "Radius"; } } else if (_isValidVertexes(this)) { dimType = "Distance"; objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); } else if (_isValidEdgeToEdge(this)) { int edgeCase = _isValidEdgeToEdge(this); objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); switch (edgeCase) { case isHorizontal: dimType = "DistanceX"; break; case isVertical: dimType = "DistanceY"; break; case isDiagonal: dimType = "Distance"; break; case isAngle: dimType = "Angle"; default: break; } } else if (_isValidVertexToEdge(this)) { dimType = "Distance"; objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); } else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr("Can't make a Dimension from this selection")); return; } openCommand("Create Dimension"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewDimension','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Type = '%s'",FeatName.c_str() ,dimType.c_str()); dim = dynamic_cast<TechDraw::DrawViewDimension *>(getDocument()->getObject(FeatName.c_str())); if (!dim) { throw Base::Exception("CmdTechDrawNewDimension - dim not found\n"); } dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); dim->recomputeFeature(); //Horrible hack to force Tree update double x = objFeat->X.getValue(); objFeat->X.setValue(x); }
void CmdTechDrawNewDiameterDimension::activated(int iMsg) { Q_UNUSED(iMsg); bool result = _checkSelection(this,1); if (!result) return; result = _checkDrawViewPart(this); if (!result) return; std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); TechDraw::DrawViewPart * objFeat = 0; std::vector<std::string> SubNames; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { objFeat = static_cast<TechDraw::DrawViewPart*> ((*itSel).getObject()); SubNames = (*itSel).getSubNames(); } } TechDraw::DrawPage* page = objFeat->findParentPage(); std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); std::vector<App::DocumentObject *> objs; std::vector<std::string> subs; int edgeType = _isValidSingleEdge(this); if (edgeType == isCircle) { objs.push_back(objFeat); subs.push_back(SubNames[0]); } else if (edgeType == isBSplineCircle) { QMessageBox::StandardButton result = QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Warning"), QObject::tr("Selected edge is a BSpline. Diameter will be approximate."), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel); if (result == QMessageBox::Ok) { objs.push_back(objFeat); subs.push_back(SubNames[0]); } else { return; } } else { std::stringstream edgeMsg; edgeMsg << "Selection for Diameter does not contain a circular edge (edge type: " << _edgeTypeToText(edgeType) << ")"; QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr(edgeMsg.str().c_str())); return; } openCommand("Create Dimension"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewDimension','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Type = '%s'",FeatName.c_str() ,"Diameter"); dim = dynamic_cast<TechDraw::DrawViewDimension *>(getDocument()->getObject(FeatName.c_str())); if (!dim) { throw Base::Exception("CmdTechDrawNewDiameterDimension - dim not found\n"); } dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); dim->recomputeFeature(); //Horrible hack to force Tree update double x = objFeat->X.getValue(); objFeat->X.setValue(x); }
void CmdTechDrawNewDistanceYDimension::activated(int iMsg) { Q_UNUSED(iMsg); bool result = _checkSelection(this,2); if (!result) return; result = _checkDrawViewPart(this); if (!result) return; std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); TechDraw::DrawViewPart * objFeat = 0; std::vector<std::string> SubNames; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { objFeat = static_cast<TechDraw::DrawViewPart*> ((*itSel).getObject()); SubNames = (*itSel).getSubNames(); } } TechDraw::DrawPage* page = objFeat->findParentPage(); std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); std::string dimType; std::vector<App::DocumentObject *> objs; std::vector<std::string> subs; int edgeType = _isValidSingleEdge(this); if ((edgeType == isVertical) || (edgeType == isDiagonal)) { objs.push_back(objFeat); subs.push_back(SubNames[0]); } else if (_isValidVertexes(this)) { objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); } else if ((_isValidEdgeToEdge(this) == isVertical) || (_isValidEdgeToEdge(this) == isHorizontal) || (_isValidEdgeToEdge(this) == isDiagonal) || (_isValidEdgeToEdge(this) == isAngle)) { edgeType = _isValidEdgeToEdge(this); objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); } else if (_isValidVertexToEdge(this)) { objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); } else { std::stringstream edgeMsg; edgeMsg << "Need 2 Vertexes, 1 straight Edge, 1 Vertex/1 straight edge or 2 straight Edges for Horizontal Dimension (edge type: " << _edgeTypeToText(edgeType) << ")"; QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr(edgeMsg.str().c_str())); return; } openCommand("Create Dimension"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewDimension','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Type = '%s'",FeatName.c_str() ,"DistanceY"); dim = dynamic_cast<TechDraw::DrawViewDimension *>(getDocument()->getObject(FeatName.c_str())); if (!dim) { throw Base::Exception("CmdTechDrawNewDistanceYDimension - dim not found\n"); } dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); dim->recomputeFeature(); TechDraw::pointPair pp = dim->getLinearPoints(); Base::Vector3d mid = (pp.first + pp.second)/2.0; dim->X.setValue(mid.x); dim->Y.setValue(-mid.y); //Horrible hack to force Tree update double x = objFeat->X.getValue(); objFeat->X.setValue(x); }
void CmdTechDrawNewAngle3PtDimension::activated(int iMsg) { Q_UNUSED(iMsg); bool result = _checkSelection(this,3); if (!result) return; result = _checkDrawViewPart(this); if (!result) return; std::vector<Gui::SelectionObject> selection = getSelection().getSelectionEx(); TechDraw::DrawViewPart * objFeat = 0; std::vector<std::string> SubNames; std::vector<Gui::SelectionObject>::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { objFeat = static_cast<TechDraw::DrawViewPart*> ((*itSel).getObject()); SubNames = (*itSel).getSubNames(); } } TechDraw::DrawPage* page = objFeat->findParentPage(); std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); std::vector<App::DocumentObject *> objs; std::vector<std::string> subs; if (_isValidVertexes(this, 3)) { objs.push_back(objFeat); objs.push_back(objFeat); objs.push_back(objFeat); subs.push_back(SubNames[0]); subs.push_back(SubNames[1]); subs.push_back(SubNames[2]); } else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr("Need three points to make an 3 point Angle Dimension")); return; } openCommand("Create Dimension"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewDimension','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Type = '%s'",FeatName.c_str() ,"Angle3Pt"); dim = dynamic_cast<TechDraw::DrawViewDimension *>(getDocument()->getObject(FeatName.c_str())); if (!dim) { throw Base::Exception("CmdTechDrawNewAngle3PtDimension - dim not found\n"); } dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); dim->recomputeFeature(); //Horrible hack to force Tree update double x = objFeat->X.getValue(); objFeat->X.setValue(x); }