From da047abdd9b46ddffbfded50121e4a5b82aa1116 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sat, 25 May 2019 10:29:43 -0400 Subject: [PATCH] Add Fork arrowhead option --- src/Mod/TechDraw/Gui/DlgPrefsTechDraw2.ui | 9 ++ src/Mod/TechDraw/Gui/QGIArrow.cpp | 41 +++++++ src/Mod/TechDraw/Gui/QGIArrow.h | 4 +- src/Mod/TechDraw/Gui/Resources/TechDraw.qrc | 1 + .../Gui/Resources/icons/arrowfork.svg | 103 ++++++++++++++++++ src/Mod/TechDraw/Gui/TaskLeaderLine.ui | 18 +++ 6 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 src/Mod/TechDraw/Gui/Resources/icons/arrowfork.svg diff --git a/src/Mod/TechDraw/Gui/DlgPrefsTechDraw2.ui b/src/Mod/TechDraw/Gui/DlgPrefsTechDraw2.ui index ce28bd9d58..6b5587e678 100644 --- a/src/Mod/TechDraw/Gui/DlgPrefsTechDraw2.ui +++ b/src/Mod/TechDraw/Gui/DlgPrefsTechDraw2.ui @@ -216,6 +216,15 @@ + + + 5 - Fork + + + + :/icons/arrowfork.svg:/icons/arrowfork.svg + + diff --git a/src/Mod/TechDraw/Gui/QGIArrow.cpp b/src/Mod/TechDraw/Gui/QGIArrow.cpp index b6bf29d560..f52377f376 100644 --- a/src/Mod/TechDraw/Gui/QGIArrow.cpp +++ b/src/Mod/TechDraw/Gui/QGIArrow.cpp @@ -86,6 +86,12 @@ void QGIArrow::draw() { path = makeDot(m_size/2.0,m_size/2.0,isFlipped); } else if (m_style == 4) { path = makeOpenDot(m_size/2.0,m_size/2.0,isFlipped); + } else if (m_style == 5) { + if (m_dirMode) { + path = makeForkArrow(getDirection(), m_size/2.0,m_size/2.0); //big enough? + } else { + path = makeForkArrow(m_size/2.0,m_size/2.0,isFlipped); //big enough? + } } else { path = makeFilledTriangle(m_size,m_size/6.0,isFlipped); //sb a question mark or ??? } @@ -217,6 +223,41 @@ QPainterPath QGIArrow::makeOpenDot(double length, double width, bool flipped) return path; } +QPainterPath QGIArrow::makeForkArrow(double length, double width, bool flipped) +{ +//(0,0) is tip of arrow + if (flipped) { + length *= -1; + } + + QPainterPath path; + path.moveTo(QPointF(Rez::guiX(length),Rez::guiX(-width))); + path.lineTo(QPointF(0.,0.)); + path.lineTo(QPointF(Rez::guiX(length),Rez::guiX(width))); + m_fill = Qt::NoBrush; + return path; +} + +QPainterPath QGIArrow::makeForkArrow(Base::Vector3d dir, double length, double width) +{ +//(0,0) is tip of arrow + Base::Vector3d negDir = -dir; + Base::Vector3d normDir = dir; + negDir.Normalize(); + normDir.Normalize(); + Base::Vector3d perp(-normDir.y,normDir.x, 0.0); + Base::Vector3d barb1 = normDir * length + perp * width; + Base::Vector3d barb2 = normDir * length - perp * width; + + QPainterPath path; + path.moveTo(QPointF(Rez::guiX(barb1.x),Rez::guiX(barb1.y))); + path.lineTo(QPointF(0.,0.)); + path.lineTo(QPointF(Rez::guiX(barb2.x),Rez::guiX(barb2.y))); + m_fill = Qt::NoBrush; + return path; +} + + int QGIArrow::getPrefArrowStyle() { diff --git a/src/Mod/TechDraw/Gui/QGIArrow.h b/src/Mod/TechDraw/Gui/QGIArrow.h index 758afab897..714f288142 100644 --- a/src/Mod/TechDraw/Gui/QGIArrow.h +++ b/src/Mod/TechDraw/Gui/QGIArrow.h @@ -69,7 +69,9 @@ protected: QPainterPath makeHashMark(Base::Vector3d dir, double length, double width); QPainterPath makeDot(double length, double width, bool flipped); QPainterPath makeOpenDot(double length, double width, bool flipped); - + QPainterPath makeForkArrow(double length, double width, bool flipped); + QPainterPath makeForkArrow(Base::Vector3d dir, double length, double width); + private: QBrush m_brush; Qt::BrushStyle m_fill; diff --git a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc index 2ffcc25fcb..23457be130 100644 --- a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc +++ b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc @@ -39,6 +39,7 @@ icons/arrowfilled.svg icons/arrowopen.svg icons/arrowtick.svg + icons/arrowfork.svg icons/actions/techdraw-new-default.svg icons/actions/techdraw-new-pick.svg icons/actions/techdraw-view.svg diff --git a/src/Mod/TechDraw/Gui/Resources/icons/arrowfork.svg b/src/Mod/TechDraw/Gui/Resources/icons/arrowfork.svg new file mode 100644 index 0000000000..7cb4a8f49f --- /dev/null +++ b/src/Mod/TechDraw/Gui/Resources/icons/arrowfork.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/Mod/TechDraw/Gui/TaskLeaderLine.ui b/src/Mod/TechDraw/Gui/TaskLeaderLine.ui index 9ea57ea1b6..e4ea19d704 100644 --- a/src/Mod/TechDraw/Gui/TaskLeaderLine.ui +++ b/src/Mod/TechDraw/Gui/TaskLeaderLine.ui @@ -205,6 +205,15 @@ :/icons/arrowopendot.svg:/icons/arrowopendot.svg + + + Fork + + + + :/icons/arrowfork.svg:/icons/arrowfork.svg + + @@ -266,6 +275,15 @@ :/icons/arrowopendot.svg:/icons/arrowopendot.svg + + + Fork + + + + :/icons/arrowfork.svg:/icons/arrowfork.svg + +