diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index fe09291cc..b3775bb1a 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -744,7 +744,7 @@ void MDIViewPage::print(QPrinter* printer) static_cast (blockConnection(true)); // avoid to be notified by itself Gui::Selection().clearSelection(); - m_view->toggleEdit(false); + m_view->toggleMarkers(false); m_view->scene()->update(); Gui::Selection().clearSelection(); @@ -752,7 +752,7 @@ void MDIViewPage::print(QPrinter* printer) m_view->scene()->render(&p, rect); // Reset - m_view->toggleEdit(true); + m_view->toggleMarkers(true); } @@ -812,7 +812,7 @@ QPrinter::PageSize MDIViewPage::getPageSize(int w, int h) const void MDIViewPage::setFrameState(bool state) { m_frameState = state; - m_view->toggleEdit(state); + m_view->toggleMarkers(state); m_view->scene()->update(); } diff --git a/src/Mod/TechDraw/Gui/QGIFace.cpp b/src/Mod/TechDraw/Gui/QGIFace.cpp index 559c79265..3722bb6d7 100644 --- a/src/Mod/TechDraw/Gui/QGIFace.cpp +++ b/src/Mod/TechDraw/Gui/QGIFace.cpp @@ -175,6 +175,17 @@ void QGIFace::setHatchColor(std::string c) m_svgCol = c; } +//QtSvg does not handle clipping, so we must be able to turn the hatching on/off +void QGIFace::toggleSvg(bool b) +{ + if (b) { + m_rect->show(); + } else { + m_rect->hide(); + } + update(); +} + QRectF QGIFace::boundingRect() const { return shape().controlPointRect(); diff --git a/src/Mod/TechDraw/Gui/QGIFace.h b/src/Mod/TechDraw/Gui/QGIFace.h index 3eb7addcb..99b8194e5 100644 --- a/src/Mod/TechDraw/Gui/QGIFace.h +++ b/src/Mod/TechDraw/Gui/QGIFace.h @@ -65,6 +65,7 @@ public: void setPath(const QPainterPath & path); void buildHatch(void); void setHatchColor(std::string c); + void toggleSvg(bool b); protected: bool load(QByteArray *svgBytes); diff --git a/src/Mod/TechDraw/Gui/QGITemplate.h b/src/Mod/TechDraw/Gui/QGITemplate.h index 68c79e7b0..4370b0280 100644 --- a/src/Mod/TechDraw/Gui/QGITemplate.h +++ b/src/Mod/TechDraw/Gui/QGITemplate.h @@ -57,6 +57,7 @@ public: inline qreal getY() { return y() * -1; } virtual void updateView(bool update = false); + std::vector getTestFields(void) { return textFields; }; virtual void draw() = 0; diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index a641c6722..0422dc073 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -79,8 +79,8 @@ QGIView::QGIView() m_colCurrent = getNormalColor(); m_pen.setColor(m_colCurrent); + //Border/Label styling m_font.setPointSize(5.0); //scene units (mm), not points - m_decorPen.setStyle(Qt::DashLine); m_decorPen.setWidth(0); // 0 => 1px "cosmetic pen" diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index 58dde4486..1ab5fd156 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -28,7 +28,6 @@ # include # include # include -//# include # include # include # include @@ -61,7 +60,9 @@ #include "QGIDrawingTemplate.h" +#include "QGITemplate.h" #include "QGISVGTemplate.h" +#include "TemplateTextField.h" #include "QGIViewCollection.h" #include "QGIViewDimension.h" #include "QGIProjGroup.h" @@ -71,6 +72,7 @@ #include "QGIViewSymbol.h" #include "QGIViewClip.h" #include "QGIViewSpreadsheet.h" +#include "QGIFace.h" #include "ZVALUE.h" #include "ViewProviderPage.h" @@ -101,9 +103,9 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGraphicsScene& s, QWidget *parent) setCursor(QCursor(Qt::ArrowCursor)); setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); - m_backgroundItem = new QGraphicsRectItem(); - m_backgroundItem->setCacheMode(QGraphicsItem::NoCache); - m_backgroundItem->setZValue(ZVALUE::BACKGROUND); + //m_backgroundItem = new QGraphicsRectItem(); + //m_backgroundItem->setCacheMode(QGraphicsItem::NoCache); + //m_backgroundItem->setZValue(ZVALUE::BACKGROUND); // scene()->addItem(m_backgroundItem); // TODO IF SEGFAULTS WITH DRAW ENABLE THIS (REDRAWS ARE SLOWER :s) bkgBrush = new QBrush(QColor::fromRgb(70,70,70)); @@ -113,7 +115,7 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGraphicsScene& s, QWidget *parent) QGVPage::~QGVPage() { delete bkgBrush; - delete m_backgroundItem; + //delete m_backgroundItem; } void QGVPage::drawBackground(QPainter *p, const QRectF &) @@ -465,10 +467,10 @@ void QGVPage::setHighQualityAntialiasing(bool highQualityAntialiasing) void QGVPage::setViewBackground(bool enable) { - if (!m_backgroundItem) - return; +// if (!m_backgroundItem) +// return; - m_backgroundItem->setVisible(enable); +// m_backgroundItem->setVisible(enable); } void QGVPage::setViewOutline(bool enable) @@ -479,46 +481,49 @@ void QGVPage::setViewOutline(bool enable) m_outlineItem->setVisible(enable); } -void QGVPage::toggleEdit(bool enable) +void QGVPage::toggleMarkers(bool enable) { -// TODO: needs fiddling to handle items that don't inherit QGIViewPart: Annotation, Symbol, Templates, Edges, Faces, Vertices,... QList list = scene()->items(); - for (QList::iterator it = list.begin(); it != list.end(); ++it) { QGIView *itemView = dynamic_cast(*it); if(itemView) { - QGIViewPart *viewPart = dynamic_cast(*it); itemView->setSelected(false); + itemView->toggleBorder(enable); + QGIViewPart *viewPart = dynamic_cast(*it); if(viewPart) { - viewPart->toggleCache(enable); - viewPart->toggleCosmeticLines(enable); viewPart->toggleVertices(enable); - viewPart->toggleBorder(enable); - setViewBackground(enable); - } else { - itemView->toggleBorder(enable); } - //itemView->updateView(true); } - - int textItemType = QGraphicsItem::UserType + 160; - QGraphicsItem*item = dynamic_cast(*it); - if(item) { - //item->setCacheMode((enable) ? QGraphicsItem::DeviceCoordinateCache : QGraphicsItem::NoCache); - item->setCacheMode((enable) ? QGraphicsItem::NoCache : QGraphicsItem::NoCache); - item->update(); - if (item->type() == textItemType) { //TODO: move this into SVGTemplate or TemplateTextField + QGISVGTemplate* itemTemplate = dynamic_cast (*it); + if (itemTemplate) { + std::vector textFields = itemTemplate->getTestFields(); + for (auto& t:textFields) { if (enable) { - item->show(); + t->show(); } else { - item->hide(); + t->hide(); + } + } + } + } +} + +void QGVPage::toggleHatch(bool enable) +{ + QList sceneItems = scene()->items(); + for (auto& qgi:sceneItems) { + QGIViewPart* qgiPart = dynamic_cast(qgi); + if(qgiPart) { + QList partChildren = qgiPart->childItems(); + int faceItemType = QGraphicsItem::UserType + 104; + for (auto& c:partChildren) { + if (c->type() == faceItemType) { + QGIFace* f = dynamic_cast(c); + f->toggleSvg(enable); } } } } - scene()->update(); - update(); - viewport()->repaint(); } void QGVPage::saveSvg(QString filename) @@ -545,7 +550,7 @@ void QGVPage::saveSvg(QString filename) // postprocess generated file to mult all font-size attrib by 2.835 to get pts? // duplicate all textItems and only show the appropriate one for screen/print vs export? -// TODO: Was svgGen.setResolution(25.4000508); // mm/inch?? docs say this is DPI +// TODO: Was svgGen.setResolution(25.4000508); // mm/inch?? docs say this is DPI //really "user space units/inch"? svgGen.setResolution(25); // mm/inch?? docs say this is DPI //svgGen.setResolution(600); // resulting page is ~12.5x9mm @@ -555,8 +560,10 @@ void QGVPage::saveSvg(QString filename) Gui::Selection().clearSelection(); - toggleEdit(false); //fiddle cache, cosmetic lines, vertices, etc + toggleMarkers(false); //fiddle cache, vertices, frames, etc + toggleHatch(false); scene()->update(); + viewport()->repaint(); Gui::Selection().clearSelection(); QPainter p; @@ -565,8 +572,10 @@ void QGVPage::saveSvg(QString filename) scene()->render(&p); p.end(); - toggleEdit(true); + toggleMarkers(true); + toggleHatch(true); scene()->update(); + viewport()->repaint(); } diff --git a/src/Mod/TechDraw/Gui/QGVPage.h b/src/Mod/TechDraw/Gui/QGVPage.h index ef6224488..73fe7e1da 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.h +++ b/src/Mod/TechDraw/Gui/QGVPage.h @@ -85,7 +85,8 @@ public: TechDraw::DrawPage * getDrawPage(); - void toggleEdit(bool enable); + void toggleMarkers(bool enable); + void toggleHatch(bool enable); /// Renders the page to SVG with filename. void saveSvg(QString filename);