From fb439b3d34827acd528552e7a8aa296550bde556 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Mon, 25 Apr 2016 14:30:50 -0400 Subject: [PATCH] Handle multiple DrawPage in Document --- src/Mod/TechDraw/App/DrawViewClip.cpp | 12 + src/Mod/TechDraw/App/DrawViewClip.h | 1 + src/Mod/TechDraw/Gui/Command.cpp | 320 ++++++++++----------- src/Mod/TechDraw/Gui/CommandCreateDims.cpp | 203 +++++++++---- src/Mod/TechDraw/Gui/CommandDecorate.cpp | 79 +++-- src/Mod/TechDraw/Gui/MDIViewPage.h | 2 + src/Mod/TechDraw/Gui/QGVPage.h | 4 + src/Mod/TechDraw/Gui/ViewProviderPage.cpp | 2 - 8 files changed, 372 insertions(+), 251 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewClip.cpp b/src/Mod/TechDraw/App/DrawViewClip.cpp index 27d286a61..1cbb582a8 100644 --- a/src/Mod/TechDraw/App/DrawViewClip.cpp +++ b/src/Mod/TechDraw/App/DrawViewClip.cpp @@ -160,6 +160,18 @@ std::vector DrawViewClip::getChildViewNames() return childNames; } +bool DrawViewClip::isViewInClip(App::DocumentObject* view) +{ + bool result = false; + std::vector children = Views.getValues(); + for (std::vector::iterator it = children.begin(); it != children.end(); ++it) { + if ((*it) == view) { + result = true; + } + } + return result; +} + PyObject *DrawViewClip::getPyObject(void) { if (PythonObject.is(Py::_None())) { diff --git a/src/Mod/TechDraw/App/DrawViewClip.h b/src/Mod/TechDraw/App/DrawViewClip.h index 67415c90b..ebc077e2a 100644 --- a/src/Mod/TechDraw/App/DrawViewClip.h +++ b/src/Mod/TechDraw/App/DrawViewClip.h @@ -70,6 +70,7 @@ public: virtual PyObject *getPyObject(void); std::vector getChildViewNames(); + bool isViewInClip(App::DocumentObject* view); protected: diff --git a/src/Mod/TechDraw/Gui/Command.cpp b/src/Mod/TechDraw/Gui/Command.cpp index 81dac0cd2..42169daa1 100644 --- a/src/Mod/TechDraw/Gui/Command.cpp +++ b/src/Mod/TechDraw/Gui/Command.cpp @@ -63,7 +63,6 @@ #include #include - #include "MDIViewPage.h" #include "TaskProjGroup.h" #include "ViewProviderPage.h" @@ -71,15 +70,60 @@ using namespace TechDrawGui; using namespace std; + +//=========================================================================== +// utility routines +//=========================================================================== + +//! find a DrawPage in Selection or Document +//TODO: code is duplicated in CommandCreateDims and CommandDecorate +TechDraw::DrawPage* _findPage(Gui::Command* cmd) +{ + TechDraw::DrawPage* page = 0; + //check if a DrawPage is currently displayed + Gui::MainWindow* w = Gui::getMainWindow(); + Gui::MDIView* mv = w->activeWindow(); + MDIViewPage* mvp = dynamic_cast(mv); + if (mvp) { + QGVPage* qp = mvp->getQGVPage(); + page = qp->getDrawPage(); + } else { + //DrawPage not displayed, check Selection and/or Document for a DrawPage + std::vector selPages = cmd->getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); + if (selPages.empty()) { //no page in selection + selPages = cmd->getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); + if (selPages.empty()) { //no page in document + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), + QObject::tr("Create a page first.")); + return page; + } else if (selPages.size() > 1) { //multiple pages in document + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Too many pages"), + QObject::tr("Can not determine correct page.")); + return page; + } else { //use only page in document + page = dynamic_cast(selPages.front()); + } + } else if (selPages.size() > 1) { //multiple pages in selection + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Too many pages"), + QObject::tr("Select exactly 1 page.")); + return page; + } else { //use only page in selection + page = dynamic_cast(selPages.front()); + } + } + return page; +} + bool isDrawingPageActive(Gui::Document *doc) { if (doc) - // checks if a Sketch Viewprovider is in Edit and is in no special mode + // checks if a DrawPage Viewprovider is in Edit and is in no special mode if (doc->getInEdit() && doc->getInEdit()->isDerivedFrom(TechDrawGui::ViewProviderPage::getClassTypeId())) return true; return false; } + //=========================================================================== // TechDraw_NewPageDef (default template) //=========================================================================== @@ -173,8 +217,6 @@ void CmdTechDrawNewPage::activated(int iMsg) std::string defaultDir = App::Application::getResourceDir() + "Mod/Drawing/Templates"; QString templateDir = QString::fromStdString(hGrp->GetASCII("TemplateDir", defaultDir.c_str())); - - //TODO: Some templates are too complex for regex? QString templateFileName = Gui::FileDialog::getOpenFileName(Gui::getMainWindow(), QString::fromUtf8(QT_TR_NOOP("Select a Template File")), templateDir, @@ -249,26 +291,23 @@ CmdTechDrawNewView::CmdTechDrawNewView() void CmdTechDrawNewView::activated(int iMsg) { + TechDraw::DrawPage* page = _findPage(this); + if (!page) { + return; + } + std::vector shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); if (shapes.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select a Part object.")); + QObject::tr("Select at least 1 Part object.")); return; } -// std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - //pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - //if (pages.empty()){ - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); - return; - //} - } + std::string PageName = page->getNameInDocument(); Gui::WaitCursor wc; const std::vector selectedProjections = getSelection().getObjectsOfType(TechDraw::DrawView::getClassTypeId()); + float newX = 10.0; float newY = 10.0; float newScale = 1.0; @@ -291,8 +330,6 @@ void CmdTechDrawNewView::activated(int iMsg) } } - std::string PageName = pages.front()->getNameInDocument(); - openCommand("Create view"); for (std::vector::iterator it = shapes.begin(); it != shapes.end(); ++it) { std::string FeatName = getUniqueObjectName("View"); @@ -304,9 +341,6 @@ void CmdTechDrawNewView::activated(int iMsg) 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()); - //TechDraw::DrawPage *page = dynamic_cast(pages.front()); - //TODO: page->addView sb Python function?? - //page->addView(page->getDocument()->getObject(FeatName.c_str())); } updateActive(); commitCommand(); @@ -338,22 +372,20 @@ CmdTechDrawNewViewSection::CmdTechDrawNewViewSection() void CmdTechDrawNewViewSection::activated(int iMsg) { + TechDraw::DrawPage* page = _findPage(this); + if (!page) { + return; + } + std::vector shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); if (shapes.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select a Part object.")); + QObject::tr("Select at least 1 Part object.")); return; } + std::string PageName = page->getNameInDocument(); - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()){ - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page to insert"), - QObject::tr("Create a page to insert.")); - return; - } - - std::string PageName = pages.front()->getNameInDocument(); - + Gui::WaitCursor wc; openCommand("Create view"); for (std::vector::iterator it = shapes.begin(); it != shapes.end(); ++it) { std::string FeatName = getUniqueObjectName("Section"); @@ -364,8 +396,6 @@ void CmdTechDrawNewViewSection::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.Y = 10.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); - //TechDraw::DrawPage *page = dynamic_cast(pages.front()); - //page->addView(page->getDocument()->getObject(FeatName.c_str())); } updateActive(); commitCommand(); @@ -397,32 +427,20 @@ CmdTechDrawProjGroup::CmdTechDrawProjGroup() void CmdTechDrawProjGroup::activated(int iMsg) { - // Check that a Part::Feature is in the Selection - std::vector shapes = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); - if (shapes.size() != 1) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select exactly one Part object.")); + TechDraw::DrawPage* page = _findPage(this); + if (!page) { return; } - // Check if a Drawing Page is in the Selection. - TechDraw::DrawPage *page; - const std::vector selPages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (!selPages.empty()) { - page = dynamic_cast(selPages.front()); - } else { - // Check that any page object exists in Document - const std::vector docPages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (!docPages.empty()) { - page = dynamic_cast(docPages.front()); - } else { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No Drawing Page found"), - QObject::tr("Create a Drawing Page first.")); - return; - } + std::vector 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; } -// TODO: is there a way to use "Active Page" instead of pages.front? if a second page is in the document, we will always -// use page#1 if there isn't a page in the selection. + std::string PageName = page->getNameInDocument(); + + Gui::WaitCursor wc; openCommand("Create Projection Group"); std::string multiViewName = getUniqueObjectName("cView"); @@ -446,7 +464,6 @@ void CmdTechDrawProjGroup::activated(int iMsg) Gui::Control().showDialog(new TaskDlgProjGroup(multiView)); // add the multiView to the page - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),multiViewName.c_str()); updateActive(); @@ -481,14 +498,12 @@ CmdTechDrawAnnotation::CmdTechDrawAnnotation() void CmdTechDrawAnnotation::activated(int iMsg) { -// std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); - return; + TechDraw::DrawPage* page = _findPage(this); + if (!page) { + return; } - std::string PageName = pages.front()->getNameInDocument(); + std::string PageName = page->getNameInDocument(); + std::string FeatName = getUniqueObjectName("Annotation"); openCommand("Create Annotation"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewAnnotation','%s')",FeatName.c_str()); @@ -525,16 +540,12 @@ CmdTechDrawClip::CmdTechDrawClip() void CmdTechDrawClip::activated(int iMsg) { - -// std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); + TechDraw::DrawPage* page = _findPage(this); + if (!page) { return; } + std::string PageName = page->getNameInDocument(); - std::string PageName = pages.front()->getNameInDocument(); std::string FeatName = getUniqueObjectName("Clip"); openCommand("Create Clip"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawViewClip','%s')",FeatName.c_str()); @@ -572,32 +583,23 @@ CmdTechDrawClipPlus::CmdTechDrawClipPlus() void CmdTechDrawClipPlus::activated(int iMsg) { + std::vector selection = getSelection().getSelectionEx(); + if (selection.size() != 2) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Select 1 DrawViewClip and 1 DrawView.")); + return; + } - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); - return; - } - - std::vector views = getSelection().getObjectsOfType(TechDraw::DrawView::getClassTypeId()); - if (views.size() != 2) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select exactly one Clip and one View object.")); - return; - } - - TechDraw::DrawViewClip* clip; - TechDraw::DrawView* view; - std::vector::iterator it = views.begin(); - for (; it != views.end(); it++) { - if ((*it)->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { - clip = dynamic_cast ((*it)); - } else { - view = dynamic_cast ((*it)); + TechDraw::DrawViewClip* clip = 0; + TechDraw::DrawView* view = 0; + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { + clip = dynamic_cast((*itSel).getObject()); + } else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { + view = dynamic_cast((*itSel).getObject()); } } - if (!view) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Drawing View object.")); @@ -609,8 +611,19 @@ void CmdTechDrawClipPlus::activated(int iMsg) 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(); + openCommand("ClipPlus"); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",ClipName.c_str(),ViewName.c_str()); updateActive(); @@ -641,45 +654,43 @@ CmdTechDrawClipMinus::CmdTechDrawClipMinus() void CmdTechDrawClipMinus::activated(int iMsg) { - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); - return; + std::vector selection = getSelection().getSelectionEx(); + if (selection.size() != 2) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Select 1 DrawViewClip and 1 DrawView.")); + return; } - std::vector views = getSelection().getObjectsOfType(TechDraw::DrawView::getClassTypeId()); - if (views.size() != 2) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select exactly one Clip and one View object.")); - return; - } - - TechDraw::DrawViewClip* clip; - TechDraw::DrawView* view; - std::vector::iterator it = views.begin(); - for (; it != views.end(); it++) { - if ((*it)->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { - clip = dynamic_cast ((*it)); - } else { - view = dynamic_cast ((*it)); + TechDraw::DrawViewClip* clip = 0; + TechDraw::DrawView* view = 0; + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { + clip = dynamic_cast((*itSel).getObject()); + } else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { + view = dynamic_cast((*itSel).getObject()); } } - if (!view) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select exactly one Drawing View object.")); + 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.")); + QObject::tr("Select exactly one Clip object.")); + return; + } + + if (!clip->isViewInClip(view)) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Selected View is not in Clip.")); return; } std::string ClipName = clip->getNameInDocument(); std::string ViewName = view->getNameInDocument(); + openCommand("ClipMinus"); doCommand(Doc,"App.activeDocument().%s.removeView(App.activeDocument().%s)",ClipName.c_str(),ViewName.c_str()); updateActive(); @@ -712,22 +723,19 @@ CmdTechDrawSymbol::CmdTechDrawSymbol() void CmdTechDrawSymbol::activated(int iMsg) { -// std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); + 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 PageName = pages.front()->getNameInDocument(); std::string FeatName = getUniqueObjectName("Symbol"); openCommand("Create Symbol"); - //doCommand(Doc,"import Drawing"); doCommand(Doc,"f = open(unicode(\"%s\",'utf-8'),'r')",(const char*)filename.toUtf8()); doCommand(Doc,"svg = f.read()"); doCommand(Doc,"f.close()"); @@ -766,37 +774,30 @@ CmdTechDrawDraftView::CmdTechDrawDraftView() void CmdTechDrawDraftView::activated(int iMsg) { -// std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), - QObject::tr("Create a page first.")); + TechDraw::DrawPage* page = _findPage(this); + if (!page) { return; } - std::vector feats = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); - if (feats.empty()) { - feats = getSelection().getObjectsOfType(App::FeaturePython::getClassTypeId()); - if (feats.empty()) { - feats = getSelection().getObjectsOfType(Part::Part2DObject::getClassTypeId()); - if (feats.empty()) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No Source Object"), - QObject::tr("Select a Draft object first.")); - return; - } - } + std::vector 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(); + std::string SourceName = shapes.front()->getNameInDocument(); - std::string PageName = pages.front()->getNameInDocument(); - std::string SourceName = feats.front()->getNameInDocument(); - std::string FeatName = getUniqueObjectName("DraftView"); - - 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(); + for (std::vector::iterator it = shapes.begin(); it != shapes.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(); + } } bool CmdTechDrawDraftView::isActive(void) @@ -814,7 +815,6 @@ DEF_STD_CMD_A(CmdTechDrawExportPage); CmdTechDrawExportPage::CmdTechDrawExportPage() : Command("TechDraw_ExportPage") { - // seting the sGroup = QT_TR_NOOP("File"); sMenuText = QT_TR_NOOP("&Export page..."); sToolTipText = QT_TR_NOOP("Export a page to an SVG file"); @@ -825,24 +825,11 @@ CmdTechDrawExportPage::CmdTechDrawExportPage() void CmdTechDrawExportPage::activated(int iMsg) { - std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { // no Pages in Selection - pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { // no Pages in Document - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No pages found"), - QObject::tr("Create a drawing page first.")); - return; - } - } - - unsigned int n = getSelection().countObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (n > 1) { // too many Pages - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select only one Page object.")); + TechDraw::DrawPage* page = _findPage(this); + if (!page) { return; } - - TechDraw::DrawPage* page = dynamic_cast(pages.front()); + std::string PageName = page->getNameInDocument(); Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(page); @@ -855,7 +842,6 @@ void CmdTechDrawExportPage::activated(int iMsg) QObject::tr("Open Drawing View before attempting export to SVG.")); return; } - } bool CmdTechDrawExportPage::isActive(void) diff --git a/src/Mod/TechDraw/Gui/CommandCreateDims.cpp b/src/Mod/TechDraw/Gui/CommandCreateDims.cpp index f530e64e0..ff77c5459 100644 --- a/src/Mod/TechDraw/Gui/CommandCreateDims.cpp +++ b/src/Mod/TechDraw/Gui/CommandCreateDims.cpp @@ -31,6 +31,8 @@ # include #endif //#ifndef _PreComp_ +#include + # include # include # include @@ -51,6 +53,8 @@ # include # include # include +#include + # include "MDIViewPage.h" # include "ViewProviderPage.h" @@ -59,6 +63,49 @@ using namespace TechDrawGui; using namespace std; +//=========================================================================== +// utility routines +//=========================================================================== + +//TODO: still need this as separate routine? only used in LinkDimension now +//TODO: code is duplicated in Command and CommandDecorate +TechDraw::DrawPage* _findPageCCD(Gui::Command* cmd) +{ + TechDraw::DrawPage* page = 0; + //check if a DrawPage is currently displayed + Gui::MainWindow* w = Gui::getMainWindow(); + Gui::MDIView* mv = w->activeWindow(); + MDIViewPage* mvp = dynamic_cast(mv); + if (mvp) { + QGVPage* qp = mvp->getQGVPage(); + page = qp->getDrawPage(); + } else { + //DrawPage not displayed, check Selection and/or Document for a DrawPage + std::vector selPages = cmd->getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); + if (selPages.empty()) { //no page in selection + selPages = cmd->getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); + if (selPages.empty()) { //no page in document + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), + QObject::tr("Create a page first.")); + return page; + } else if (selPages.size() > 1) { //multiple pages in document + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Too many pages"), + QObject::tr("Can not determine correct page.")); + return page; + } else { //use only page in document + page = dynamic_cast(selPages.front()); + } + } else if (selPages.size() > 1) { //multiple pages in selection + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Too many pages"), + QObject::tr("Select exactly 1 page.")); + return page; + } else { //use only page in selection + page = dynamic_cast(selPages.front()); + } + } + return page; +} + //internal functions bool _checkSelection(Gui::Command* cmd, unsigned maxObjs = 2); bool _checkDrawViewPart(Gui::Command* cmd); @@ -77,6 +124,7 @@ enum EdgeType{ isAngle }; + //=========================================================================== // TechDraw_NewDimension //=========================================================================== @@ -104,9 +152,19 @@ void CmdTechDrawNewDimension::activated(int iMsg) if (!result) return; +//do we still need to pick DVPs out of selection? or should we complain about junk? std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart* objFeat = 0; + std::vector SubNames; + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -189,10 +247,6 @@ void CmdTechDrawNewDimension::activated(int iMsg) dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -235,8 +289,18 @@ void CmdTechDrawNewRadiusDimension::activated(int iMsg) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart * objFeat = 0; + std::vector SubNames; + + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -275,10 +339,6 @@ void CmdTechDrawNewRadiusDimension::activated(int iMsg) dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -322,8 +382,18 @@ void CmdTechDrawNewDiameterDimension::activated(int iMsg) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart * objFeat = 0; + std::vector SubNames; + + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -362,10 +432,6 @@ void CmdTechDrawNewDiameterDimension::activated(int iMsg) dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -409,8 +475,18 @@ void CmdTechDrawNewLengthDimension::activated(int iMsg) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart * objFeat = 0; + std::vector SubNames; + + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -455,10 +531,6 @@ void CmdTechDrawNewLengthDimension::activated(int iMsg) doCommand(Doc, "App.activeDocument().%s.FormatSpec = '%%value%%'", FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -502,8 +574,18 @@ void CmdTechDrawNewDistanceXDimension::activated(int iMsg) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart * objFeat = 0; + std::vector SubNames; + + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -546,10 +628,6 @@ void CmdTechDrawNewDistanceXDimension::activated(int iMsg) doCommand(Doc, "App.activeDocument().%s.FormatSpec = '%%value%%'", FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -593,8 +671,18 @@ void CmdTechDrawNewDistanceYDimension::activated(int iMsg) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart * objFeat = 0; + std::vector SubNames; + + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -636,10 +724,6 @@ void CmdTechDrawNewDistanceYDimension::activated(int iMsg) doCommand(Doc, "App.activeDocument().%s.FormatSpec = '%%value%%'", FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -683,8 +767,18 @@ void CmdTechDrawNewAngleDimension::activated(int iMsg) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawViewPart * objFeat = 0; + std::vector SubNames; + + std::vector::iterator itSel = selection.begin(); + for (; itSel != selection.end(); itSel++) { + if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { + objFeat = dynamic_cast ((*itSel).getObject()); + SubNames = (*itSel).getSubNames(); + } + } + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawViewDimension *dim = 0; std::string FeatName = getUniqueObjectName("Dimension"); @@ -716,10 +810,6 @@ void CmdTechDrawNewAngleDimension::activated(int iMsg) dim->References2D.setValues(objs, subs); doCommand(Doc,"App.activeDocument().%s.MeasureType = 'Projected'",FeatName.c_str()); - - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str()); commitCommand(); @@ -735,6 +825,8 @@ bool CmdTechDrawNewAngleDimension::isActive(void) return hasActiveDocument(); } +//! link 3D geometry to Dimension(s) on a Page +//TODO: should we present all potential Dimensions from all Pages? //=========================================================================== // TechDraw_LinkDimension //=========================================================================== @@ -755,32 +847,29 @@ CmdTechDrawLinkDimension::CmdTechDrawLinkDimension() void CmdTechDrawLinkDimension::activated(int iMsg) { + TechDraw::DrawPage* page = _findPageCCD(this); + if (!page) { + return; + } + std::string PageName = page->getNameInDocument(); + bool result = _checkSelection(this,2); if (!result) return; std::vector selection = getSelection().getSelectionEx(); - TechDraw::DrawPage* page = 0; Part::Feature* obj3D = 0; std::vector subs; + std::vector::iterator itSel = selection.begin(); for (; itSel != selection.end(); itSel++) { if ((*itSel).getObject()->isDerivedFrom(Part::Feature::getClassTypeId())) { obj3D = dynamic_cast ((*itSel).getObject()); subs = (*itSel).getSubNames(); } - if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawPage::getClassTypeId())) { - page = dynamic_cast((*itSel).getObject()); - } } - //no page in selection, use first - if (!page) { - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - page = dynamic_cast(pages.front()); - } - - if (!page || !obj3D) { + if (!obj3D) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect Selection"), QObject::tr("Can't link a dimension to this selection")); return; @@ -825,7 +914,7 @@ bool _checkSelection(Gui::Command* cmd, unsigned maxObjs) { return false; } - const std::vector &SubNames = selection[0].getSubNames(); + const std::vector SubNames = selection[0].getSubNames(); if (SubNames.size() > maxObjs){ QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Incorrect selection"), QObject::tr("Too many objects selected")); @@ -873,7 +962,7 @@ int _isValidSingleEdge(Gui::Command* cmd) { int edgeType = isInvalid; std::vector selection = cmd->getSelection().getSelectionEx(); TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + const std::vector SubNames = selection[0].getSubNames(); if (SubNames.size() == 1) { //only 1 subshape selected if (DrawUtil::getGeomTypeFromName(SubNames[0]) == "Edge") { //the Name starts with "Edge" int GeoId = DrawUtil::getIndexFromName(SubNames[0]); @@ -914,7 +1003,7 @@ int _isValidSingleEdge(Gui::Command* cmd) { //! verify that Selection contains valid geometries for a Vertex to Vertex Dimension bool _isValidVertexes(Gui::Command* cmd) { std::vector selection = cmd->getSelection().getSelectionEx(); - const std::vector &SubNames = selection[0].getSubNames(); + const std::vector SubNames = selection[0].getSubNames(); if(SubNames.size() == 2) { //there are 2 if (DrawUtil::getGeomTypeFromName(SubNames[0]) == "Vertex" && //they both start with "Vertex" DrawUtil::getGeomTypeFromName(SubNames[1]) == "Vertex") { @@ -931,7 +1020,7 @@ int _isValidEdgeToEdge(Gui::Command* cmd) { std::vector selection = cmd->getSelection().getSelectionEx(); TechDraw::DrawViewPart* objFeat0 = dynamic_cast(selection[0].getObject()); //TechDraw::DrawViewPart* objFeat1 = dynamic_cast(selection[1].getObject()); - const std::vector &SubNames = selection[0].getSubNames(); + const std::vector SubNames = selection[0].getSubNames(); if(SubNames.size() == 2) { //there are 2 if (DrawUtil::getGeomTypeFromName(SubNames[0]) == "Edge" && //they both start with "Edge" DrawUtil::getGeomTypeFromName(SubNames[1]) == "Edge") { diff --git a/src/Mod/TechDraw/Gui/CommandDecorate.cpp b/src/Mod/TechDraw/Gui/CommandDecorate.cpp index 36c30c3f9..f1f99681a 100644 --- a/src/Mod/TechDraw/Gui/CommandDecorate.cpp +++ b/src/Mod/TechDraw/Gui/CommandDecorate.cpp @@ -31,6 +31,8 @@ # include #endif //#ifndef _PreComp_ +#include + # include # include # include @@ -45,9 +47,11 @@ # include -# include -# include -# include +#include +#include +#include +#include +#include # include "MDIViewPage.h" # include "ViewProviderPage.h" @@ -55,6 +59,48 @@ using namespace TechDrawGui; using namespace std; +//=========================================================================== +// utility routines +//=========================================================================== + +//TODO: code is duplicated in Command and CommandCreateDims +TechDraw::DrawPage* _findPageCD(Gui::Command* cmd) +{ + TechDraw::DrawPage* page = 0; + //check if a DrawPage is currently displayed + Gui::MainWindow* w = Gui::getMainWindow(); + Gui::MDIView* mv = w->activeWindow(); + MDIViewPage* mvp = dynamic_cast(mv); + if (mvp) { + QGVPage* qp = mvp->getQGVPage(); + page = qp->getDrawPage(); + } else { + //DrawPage not displayed, check Selection and/or Document for a DrawPage + std::vector selPages = cmd->getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); + if (selPages.empty()) { //no page in selection + selPages = cmd->getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); + if (selPages.empty()) { //no page in document + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No page found"), + QObject::tr("Create a page first.")); + return page; + } else if (selPages.size() > 1) { //multiple pages in document + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Too many pages"), + QObject::tr("Can not determine correct page.")); + return page; + } else { //use only page in document + page = dynamic_cast(selPages.front()); + } + } else if (selPages.size() > 1) { //multiple pages in selection + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Too many pages"), + QObject::tr("Select exactly 1 page.")); + return page; + } else { //use only page in selection + page = dynamic_cast(selPages.front()); + } + } + return page; +} + //internal functions bool _checkSelectionHatch(Gui::Command* cmd); @@ -85,6 +131,8 @@ void CmdTechDrawNewHatch::activated(int iMsg) std::vector selection = getSelection().getSelectionEx(); TechDraw::DrawViewPart * objFeat = dynamic_cast(selection[0].getObject()); const std::vector &SubNames = selection[0].getSubNames(); + TechDraw::DrawPage* page = objFeat->findParentPage(); + std::string PageName = page->getNameInDocument(); TechDraw::DrawHatch *hatch = 0; std::string FeatName = getUniqueObjectName("Hatch"); @@ -98,11 +146,6 @@ void CmdTechDrawNewHatch::activated(int iMsg) subs.push_back((*itSub)); } - //TODO: this should be the active page or a selected page? not first page - std::vector pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - TechDraw::DrawPage *page = dynamic_cast(pages.front()); - std::string PageName = page->getNameInDocument(); - openCommand("Create Hatch"); doCommand(Doc,"App.activeDocument().addObject('TechDraw::DrawHatch','%s')",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.PartView = App.activeDocument().%s",FeatName.c_str(),objFeat->getNameInDocument()); @@ -146,26 +189,12 @@ CmdTechDrawToggleFrame::CmdTechDrawToggleFrame() void CmdTechDrawToggleFrame::activated(int iMsg) { - std::vector pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { // no Pages in Selection - pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (pages.empty()) { // no Pages in Document - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No pages found"), - QObject::tr("Create a TechDraw Page first.")); - return; - } - } - - unsigned int n = getSelection().countObjectsOfType(TechDraw::DrawPage::getClassTypeId()); - if (n > 1) { // too many Pages - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select only one Page object.")); + TechDraw::DrawPage* page = _findPageCD(this); + if (!page) { return; } + std::string PageName = page->getNameInDocument(); - TechDraw::DrawPage* page = dynamic_cast(pages.front()); - -//TODO: this should probably work on the currently displayed page, rather than selecting one in the Tree Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(page); ViewProviderPage* dvp = dynamic_cast(vp); diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.h b/src/Mod/TechDraw/Gui/MDIViewPage.h index fb2af61b5..d737e99ba 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.h +++ b/src/Mod/TechDraw/Gui/MDIViewPage.h @@ -93,6 +93,8 @@ public: void setDocumentObject(const std::string&); PyObject* getPyObject(); + QGVPage* getQGVPage(void) {return m_view;}; + protected: void findMissingViews( const std::vector &list, std::vector &missing); bool hasQView(App::DocumentObject *obj); diff --git a/src/Mod/TechDraw/Gui/QGVPage.h b/src/Mod/TechDraw/Gui/QGVPage.h index 16a31a705..c66e730e8 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.h +++ b/src/Mod/TechDraw/Gui/QGVPage.h @@ -35,6 +35,7 @@ class DrawViewAnnotation; class DrawViewSymbol; class DrawViewClip; class DrawHatch; +class DrawViewCollection; } namespace TechDrawGui @@ -81,6 +82,9 @@ public: QGITemplate * getTemplate() const; void removeTemplate(); + /// Getter for DrawPage feature + TechDraw::DrawPage * getDrawPage() { return pageFeat; } + void toggleEdit(bool enable); /// Renders the page to SVG with filename. diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp index 8c8f67eeb..dab060221 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp @@ -48,8 +48,6 @@ #include #include #include -#include -#include #include #include #include