From 05d94f31f8c3ba5c30bf735b7bda4b392cf9cdee Mon Sep 17 00:00:00 2001 From: WandererFan Date: Thu, 16 Jun 2016 10:33:20 -0400 Subject: [PATCH] Colored SVG Hatch patterns --- src/Mod/TechDraw/App/DrawHatch.cpp | 3 +-- src/Mod/TechDraw/App/DrawPage.cpp | 1 - src/Mod/TechDraw/Gui/QGIFace.cpp | 24 +++++++++++++++++++----- src/Mod/TechDraw/Gui/QGIFace.h | 6 +++++- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 2 ++ 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawHatch.cpp b/src/Mod/TechDraw/App/DrawHatch.cpp index 4fb725291..08979bea7 100644 --- a/src/Mod/TechDraw/App/DrawHatch.cpp +++ b/src/Mod/TechDraw/App/DrawHatch.cpp @@ -55,7 +55,7 @@ DrawHatch::DrawHatch(void) ADD_PROPERTY_TYPE(DirProjection ,(0,0,1.0) ,vgroup,App::Prop_None,"Projection direction when Hatch was defined"); //sb RO? ADD_PROPERTY_TYPE(Source,(0),vgroup,(App::PropertyType)(App::Prop_None),"The View + Face to be hatched"); ADD_PROPERTY_TYPE(HatchPattern ,(""),vgroup,App::Prop_None,"The hatch pattern file for this area"); - ADD_PROPERTY_TYPE(HatchColor,(0.0f,0.0f,0.0f),vgroup,App::Prop_None,"The color of the hatch area"); + ADD_PROPERTY_TYPE(HatchColor,(0.0f,0.0f,0.0f),vgroup,App::Prop_None,"The color of the hatch pattern"); Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw"); @@ -90,7 +90,6 @@ void DrawHatch::onChanged(const App::Property* prop) App::DocumentObjectExecReturn *DrawHatch::execute(void) { - //TODO: need to refresh DrawViewPart to reflect change in hatch DrawViewPart* parent = getSourceView(); if (parent) { parent->touch(); diff --git a/src/Mod/TechDraw/App/DrawPage.cpp b/src/Mod/TechDraw/App/DrawPage.cpp index 55cd8e2cc..a8e6bd971 100644 --- a/src/Mod/TechDraw/App/DrawPage.cpp +++ b/src/Mod/TechDraw/App/DrawPage.cpp @@ -103,7 +103,6 @@ void DrawPage::onChanged(const App::Property* prop) if (prop == &Template) { if (!isRestoring()) { //TODO: reload if Template prop changes (ie different Template) - Base::Console().Message("TODO: Unimplemented function DrawPage::onChanged(Template)\n"); } } else if (prop == &Views) { if (!isRestoring()) { diff --git a/src/Mod/TechDraw/Gui/QGIFace.cpp b/src/Mod/TechDraw/Gui/QGIFace.cpp index c8caa0b57..2ab2e2cce 100644 --- a/src/Mod/TechDraw/Gui/QGIFace.cpp +++ b/src/Mod/TechDraw/Gui/QGIFace.cpp @@ -94,6 +94,8 @@ QGIFace::QGIFace(int index) : m_rect = new QGCustomRect(); m_rect->setParentItem(this); + + m_svgCol = SVGCOLDEFAULT; } QGIFace::~QGIFace() @@ -190,8 +192,8 @@ void QGIFace::setHatch(std::string fileSpec) Base::Console().Error("QGIFace could not read %s\n",fileSpec.c_str()); return; } - m_qba = f.readAll(); - if (!m_svg->load(&m_qba)) { + m_svgXML = f.readAll(); + if (!m_svg->load(&m_svgXML)) { Base::Console().Error("Error - Could not load hatch into SVG renderer for %s\n", fileSpec.c_str()); return; } @@ -202,7 +204,7 @@ void QGIFace::setHatch(std::string fileSpec) void QGIFace::setPath(const QPainterPath & path) { QGraphicsPathItem::setPath(path); - if (!m_qba.isEmpty()) { + if (!m_svgXML.isEmpty()) { buildHatch(); } } @@ -220,12 +222,17 @@ void QGIFace::buildHatch() h = nh * SVGSIZEW; m_rect->setRect(0.,0.,w,-h); m_rect->centerAt(fCenter); - QPointF rPos = m_rect->pos(); + //QPointF rPos = m_rect->pos(); r = m_rect->rect(); + QByteArray before,after; + before.append(QString::fromStdString(SVGCOLPREFIX + SVGCOLDEFAULT)); + after.append(QString::fromStdString(SVGCOLPREFIX + m_svgCol)); + QByteArray colorXML = m_svgXML.replace(before,after); for (int iw = 0; iw < int(nw); iw++) { for (int ih = 0; ih < int(nh); ih++) { QGCustomSvg* tile = new QGCustomSvg(); - if (tile->load(&m_qba)) { + if (tile->load(&colorXML)) { + //if (tile->load(&m_svgXML)) { tile->setParentItem(m_rect); tile->setPos(iw*SVGSIZEW,-h + ih*SVGSIZEH); } @@ -234,6 +241,13 @@ void QGIFace::buildHatch() } +//c is a CSS color ie "#000000" +//set hatch color before building hatch +void QGIFace::setHatchColor(std::string c) +{ + m_svgCol = c; +} + void QGIFace::resetFill() { m_colNormalFill = m_colDefFill; //m_styleCurr = m_styleDef; diff --git a/src/Mod/TechDraw/Gui/QGIFace.h b/src/Mod/TechDraw/Gui/QGIFace.h index d2e4df2b2..dcc2c3906 100644 --- a/src/Mod/TechDraw/Gui/QGIFace.h +++ b/src/Mod/TechDraw/Gui/QGIFace.h @@ -45,6 +45,8 @@ namespace TechDrawGui const double SVGSIZEW = 64.0; //width and height of standard FC SVG pattern const double SVGSIZEH = 64.0; + const std::string SVGCOLPREFIX = "stroke:"; + const std::string SVGCOLDEFAULT = "#000000"; class QGIFace : public QGraphicsPathItem { @@ -71,6 +73,7 @@ public: void resetFill(void); void setPath(const QPainterPath & path); void buildHatch(void); + void setHatchColor(std::string c); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * event); @@ -88,7 +91,8 @@ protected: bool isHighlighted; QGCustomRect *m_rect; QGCustomSvg *m_svg; - QByteArray m_qba; + QByteArray m_svgXML; + std::string m_svgCol; private: QPen m_pen; diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 846a7d858..23a96c0c0 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -313,6 +313,8 @@ void QGIViewPart::drawViewPart() TechDraw::DrawHatch* fHatch = faceIsHatched(i,hatchObjs); if (fHatch) { if (!fHatch->HatchPattern.isEmpty()) { + App::Color hColor = fHatch->HatchColor.getValue(); + newFace->setHatchColor(hColor.asCSSString()); newFace->setHatch(fHatch->HatchPattern.getValue()); } }