Handle multiple DrawPage in Document

This commit is contained in:
WandererFan 2016-04-25 14:30:50 -04:00 committed by wmayer
parent bd1c150930
commit fb439b3d34
8 changed files with 372 additions and 251 deletions

View File

@ -160,6 +160,18 @@ std::vector<std::string> DrawViewClip::getChildViewNames()
return childNames;
}
bool DrawViewClip::isViewInClip(App::DocumentObject* view)
{
bool result = false;
std::vector<App::DocumentObject*> children = Views.getValues();
for (std::vector<App::DocumentObject*>::iterator it = children.begin(); it != children.end(); ++it) {
if ((*it) == view) {
result = true;
}
}
return result;
}
PyObject *DrawViewClip::getPyObject(void)
{
if (PythonObject.is(Py::_None())) {

View File

@ -70,6 +70,7 @@ public:
virtual PyObject *getPyObject(void);
std::vector<std::string> getChildViewNames();
bool isViewInClip(App::DocumentObject* view);
protected:

View File

@ -63,7 +63,6 @@
#include <Mod/TechDraw/App/DrawViewDraft.h>
#include <Mod/TechDraw/Gui/QGVPage.h>
#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<MDIViewPage*>(mv);
if (mvp) {
QGVPage* qp = mvp->getQGVPage();
page = qp->getDrawPage();
} else {
//DrawPage not displayed, check Selection and/or Document for a DrawPage
std::vector<App::DocumentObject*> 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<TechDraw::DrawPage*>(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<TechDraw::DrawPage*>(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<App::DocumentObject*> 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<App::DocumentObject*> pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
std::vector<App::DocumentObject*> 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<App::DocumentObject*> 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<App::DocumentObject*>::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<TechDraw::DrawPage *>(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<App::DocumentObject*> 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<App::DocumentObject*> 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<App::DocumentObject*>::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<TechDraw::DrawPage *>(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<App::DocumentObject*> 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<App::DocumentObject*> selPages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
if (!selPages.empty()) {
page = dynamic_cast<TechDraw::DrawPage *>(selPages.front());
} else {
// Check that any page object exists in Document
const std::vector<App::DocumentObject*> docPages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
if (!docPages.empty()) {
page = dynamic_cast<TechDraw::DrawPage *>(docPages.front());
} else {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No Drawing Page found"),
QObject::tr("Create a Drawing Page first."));
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;
}
// 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<App::DocumentObject*> pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
std::vector<App::DocumentObject*> 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<App::DocumentObject*> pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
std::vector<App::DocumentObject*> 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<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;
}
std::vector<App::DocumentObject*> 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<App::DocumentObject*> 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<App::DocumentObject*>::iterator it = views.begin();
for (; it != views.end(); it++) {
if ((*it)->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) {
clip = dynamic_cast<TechDraw::DrawViewClip*> ((*it));
} else {
view = dynamic_cast<TechDraw::DrawView*> ((*it));
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 = dynamic_cast<TechDraw::DrawViewClip*>((*itSel).getObject());
} else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) {
view = dynamic_cast<TechDraw::DrawView*>((*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<App::DocumentObject*> 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<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;
}
std::vector<App::DocumentObject*> 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<App::DocumentObject*>::iterator it = views.begin();
for (; it != views.end(); it++) {
if ((*it)->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) {
clip = dynamic_cast<TechDraw::DrawViewClip*> ((*it));
} else {
view = dynamic_cast<TechDraw::DrawView*> ((*it));
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 = dynamic_cast<TechDraw::DrawViewClip*>((*itSel).getObject());
} else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) {
view = dynamic_cast<TechDraw::DrawView*>((*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<App::DocumentObject*> pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
std::vector<App::DocumentObject*> 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<App::DocumentObject*> pages = getSelection().getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
std::vector<App::DocumentObject*> 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<App::DocumentObject*> 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<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();
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<App::DocumentObject*>::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<App::DocumentObject*> 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<TechDraw::DrawPage*>(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)

View File

@ -31,6 +31,8 @@
# include <boost/regex.hpp>
#endif //#ifndef _PreComp_
#include <QGraphicsView>
# include <App/DocumentObject.h>
# include <Gui/Action.h>
# include <Gui/Application.h>
@ -51,6 +53,8 @@
# include <Mod/TechDraw/App/DrawViewDimension.h>
# include <Mod/TechDraw/App/DrawPage.h>
# include <Mod/TechDraw/App/DrawUtil.h>
#include <Mod/TechDraw/Gui/QGVPage.h>
# 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<MDIViewPage*>(mv);
if (mvp) {
QGVPage* qp = mvp->getQGVPage();
page = qp->getDrawPage();
} else {
//DrawPage not displayed, check Selection and/or Document for a DrawPage
std::vector<App::DocumentObject*> 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<TechDraw::DrawPage*>(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<TechDraw::DrawPage*>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<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::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 = dynamic_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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<Gui::SelectionObject> selection = getSelection().getSelectionEx();
TechDraw::DrawPage* page = 0;
Part::Feature* obj3D = 0;
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 = dynamic_cast<Part::Feature*> ((*itSel).getObject());
subs = (*itSel).getSubNames();
}
if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawPage::getClassTypeId())) {
page = dynamic_cast<TechDraw::DrawPage*>((*itSel).getObject());
}
}
//no page in selection, use first
if (!page) {
std::vector<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
page = dynamic_cast<TechDraw::DrawPage *>(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<std::string> &SubNames = selection[0].getSubNames();
const std::vector<std::string> 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<Gui::SelectionObject> selection = cmd->getSelection().getSelectionEx();
TechDraw::DrawViewPart * objFeat = dynamic_cast<TechDraw::DrawViewPart *>(selection[0].getObject());
const std::vector<std::string> &SubNames = selection[0].getSubNames();
const std::vector<std::string> 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<Gui::SelectionObject> selection = cmd->getSelection().getSelectionEx();
const std::vector<std::string> &SubNames = selection[0].getSubNames();
const std::vector<std::string> 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<Gui::SelectionObject> selection = cmd->getSelection().getSelectionEx();
TechDraw::DrawViewPart* objFeat0 = dynamic_cast<TechDraw::DrawViewPart *>(selection[0].getObject());
//TechDraw::DrawViewPart* objFeat1 = dynamic_cast<TechDraw::DrawViewPart *>(selection[1].getObject());
const std::vector<std::string> &SubNames = selection[0].getSubNames();
const std::vector<std::string> 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") {

View File

@ -31,6 +31,8 @@
# include <boost/regex.hpp>
#endif //#ifndef _PreComp_
#include <QGraphicsView>
# include <App/DocumentObject.h>
# include <Gui/Action.h>
# include <Gui/Application.h>
@ -45,9 +47,11 @@
# include <Mod/Part/App/PartFeature.h>
# include <Mod/TechDraw/App/DrawViewPart.h>
# include <Mod/TechDraw/App/DrawHatch.h>
# include <Mod/TechDraw/App/DrawPage.h>
#include <Mod/TechDraw/App/DrawView.h>
#include <Mod/TechDraw/App/DrawViewPart.h>
#include <Mod/TechDraw/App/DrawHatch.h>
#include <Mod/TechDraw/App/DrawPage.h>
#include <Mod/TechDraw/Gui/QGVPage.h>
# 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<MDIViewPage*>(mv);
if (mvp) {
QGVPage* qp = mvp->getQGVPage();
page = qp->getDrawPage();
} else {
//DrawPage not displayed, check Selection and/or Document for a DrawPage
std::vector<App::DocumentObject*> 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<TechDraw::DrawPage*>(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<TechDraw::DrawPage*>(selPages.front());
}
}
return page;
}
//internal functions
bool _checkSelectionHatch(Gui::Command* cmd);
@ -85,6 +131,8 @@ void CmdTechDrawNewHatch::activated(int iMsg)
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");
@ -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<App::DocumentObject*> pages = getDocument()->getObjectsOfType(TechDraw::DrawPage::getClassTypeId());
TechDraw::DrawPage *page = dynamic_cast<TechDraw::DrawPage *>(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<App::DocumentObject*> 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<TechDraw::DrawPage*>(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<ViewProviderPage*>(vp);

View File

@ -93,6 +93,8 @@ public:
void setDocumentObject(const std::string&);
PyObject* getPyObject();
QGVPage* getQGVPage(void) {return m_view;};
protected:
void findMissingViews( const std::vector<App::DocumentObject*> &list, std::vector<App::DocumentObject*> &missing);
bool hasQView(App::DocumentObject *obj);

View File

@ -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.

View File

@ -48,8 +48,6 @@
#include <Gui/Document.h>
#include <Gui/MainWindow.h>
#include <Gui/Selection.h>
#include <Gui/Selection.h>
#include <Gui/MainWindow.h>
#include <Gui/BitmapFactory.h>
#include <Gui/ViewProvider.h>
#include <Gui/ViewProviderDocumentObject.h>