Handle multiple DrawPage in Document
This commit is contained in:
parent
bd1c150930
commit
fb439b3d34
|
@ -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())) {
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
virtual PyObject *getPyObject(void);
|
||||
|
||||
std::vector<std::string> getChildViewNames();
|
||||
bool isViewInClip(App::DocumentObject* view);
|
||||
|
||||
|
||||
protected:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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") {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue
Block a user