From f240972ffa261d165ce97d0ac1823879b76cbaeb Mon Sep 17 00:00:00 2001 From: vocx-fc Date: Wed, 8 Jul 2020 17:24:00 -0500 Subject: [PATCH] Draft: move getArrow out of getSVG function --- src/Mod/Draft/getSVG.py | 165 +++++++++++++++++++++++++--------------- 1 file changed, 103 insertions(+), 62 deletions(-) diff --git a/src/Mod/Draft/getSVG.py b/src/Mod/Draft/getSVG.py index 6e6d0826e1..219d2029ba 100644 --- a/src/Mod/Draft/getSVG.py +++ b/src/Mod/Draft/getSVG.py @@ -239,6 +239,85 @@ def getEllipse(plane, return get_ellipse(plane, fill, stroke, linewidth, lstyle, edge) +def get_arrow(obj, + arrowtype, point, arrowsize, color, linewidth, angle=0): + """Get the SVG representation from an arrow.""" + svg = "" + + if not FreeCAD.GuiUp or not obj.ViewObject: + return svg + + _cx_cy_r = 'cx="{}" cy="{}" r="{}"'.format(point.x, point.y, arrowsize) + _rotate = 'rotate({},{},{})'.format(math.degrees(angle), + point.x, point.y) + _transl = 'translate({},{})'.format(point.x, point.y) + _scale = 'scale({},{})'.format(arrowsize, arrowsize) + _style = 'style="stroke-miterlimit:4;stroke-dasharray:none"' + + if obj.ViewObject.ArrowType == "Circle": + svg += '\n' - else: - print("getSVG: arrow type not implemented") - return svg - def getOvershoot(point,shootsize,color,linewidth,angle=0): svg = '= 2: last_segment = FreeCAD.Vector(obj.Points[-1] - obj.Points[-2]) angle = -DraftVecUtils.angle(get_proj(last_segment, plane)) + math.pi - svg += getArrow( - arrowtype=obj.ViewObject.ArrowType, - point=proj_points[-1], - arrowsize=obj.ViewObject.ArrowSize.Value/pointratio, - color=stroke, - linewidth=linewidth, - angle=angle - ) + svg += get_arrow(obj, + obj.ViewObject.ArrowType, + proj_points[-1], + obj.ViewObject.ArrowSize.Value/pointratio, + stroke, linewidth, angle) # print text if FreeCAD.GuiUp: @@ -1162,7 +1201,9 @@ def getSVG(obj, p2 = get_proj(obj.Shape.Vertexes[-2].Point, plane) angle = -DraftVecUtils.angle(p2.sub(p1)) arrowsize = obj.ViewObject.ArrowSize.Value/pointratio - svg += getArrow(obj.ViewObject.ArrowType,p1,arrowsize,stroke,linewidth,angle) + svg += get_arrow(obj, + obj.ViewObject.ArrowType, + p1, arrowsize, stroke, linewidth, angle) # techdraw expects bottom-to-top coordinates if techdraw: