From ead006131f8c4c74777aea3e1fed5e8e10e90d19 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 27 Apr 2017 13:07:28 -0300 Subject: [PATCH] Draft: fixed getSVG to work in non-GUI mode --- src/Mod/Draft/Draft.py | 143 +++++++++++++++++++++++------------------ 1 file changed, 79 insertions(+), 64 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index e07fd147bbe9..b30dc6b0026b 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2075,6 +2075,8 @@ def getEllipse(edge): def getArrow(arrowtype,point,arrowsize,color,linewidth,angle=0): svg = "" + if not obj.ViewObject: + return svg if obj.ViewObject.ArrowType == "Circle": svg += '= n: - svg += '\n' - svg += '\n' - n += 1 + if not obj.ViewObject: + print ("export of axes to SVG is only available in GUI mode") + else: + vobj = obj.ViewObject + lorig = getLineStyle() + fill = 'none' + rad = vobj.BubbleSize.Value/2 + n = 0 + for e in obj.Shape.Edges: + lstyle = lorig + svg += getPath([e]) + lstyle = "none" + pos = ["Start"] + if hasattr(vobj,"BubblePosition"): + if vobj.BubblePosition == "Both": + pos = ["Start","End"] + else: + pos = [vobj.BubblePosition] + for p in pos: + if p == "Start": + p1 = e.Vertexes[0].Point + p2 = e.Vertexes[1].Point + else: + p1 = e.Vertexes[1].Point + p2 = e.Vertexes[0].Point + dv = p2.sub(p1) + dv.normalize() + center = p2.add(dv.scale(rad,rad,rad)) + svg += getCircle(Part.makeCircle(rad,center)) + if hasattr(vobj.Proxy,"bubbletexts"): + if len (vobj.Proxy.bubbletexts) >= n: + svg += '\n' + svg += '\n' + n += 1 elif getType(obj) == "Pipe": fill = stroke @@ -2371,25 +2383,28 @@ def getText(color,fontsize,fontname,angle,base,text,linespacing=0.5,align="cente elif getType(obj) == "Space": "returns an SVG fragment for the text of a space" - c = getrgb(obj.ViewObject.TextColor) - n = obj.ViewObject.FontName - a = 0 - if rotation != 0: - a = math.radians(rotation) - t1 = obj.ViewObject.Proxy.text1.string.getValues() - t2 = obj.ViewObject.Proxy.text2.string.getValues() - scale = obj.ViewObject.FirstLine.Value/obj.ViewObject.FontSize.Value - f1 = fontsize*scale - p2 = FreeCAD.Vector(obj.ViewObject.Proxy.coords.translation.getValue().getValue()) - lspc = FreeCAD.Vector(obj.ViewObject.Proxy.header.translation.getValue().getValue()) - p1 = p2.add(lspc) - j = obj.ViewObject.TextAlign - svg += getText(c,f1,n,a,getProj(p1),t1,linespacing,j,flip=True) - if t2: - ofs = FreeCAD.Vector(0,lspc.Length,0) - if a: - ofs = FreeCAD.Rotation(FreeCAD.Vector(0,0,1),-rotation).multVec(ofs) - svg += getText(c,fontsize,n,a,getProj(p1).add(ofs),t2,linespacing,j,flip=True) + if not obj.ViewObject: + print ("export of spaces to SVG is only available in GUI mode") + else: + c = getrgb(obj.ViewObject.TextColor) + n = obj.ViewObject.FontName + a = 0 + if rotation != 0: + a = math.radians(rotation) + t1 = obj.ViewObject.Proxy.text1.string.getValues() + t2 = obj.ViewObject.Proxy.text2.string.getValues() + scale = obj.ViewObject.FirstLine.Value/obj.ViewObject.FontSize.Value + f1 = fontsize*scale + p2 = FreeCAD.Vector(obj.ViewObject.Proxy.coords.translation.getValue().getValue()) + lspc = FreeCAD.Vector(obj.ViewObject.Proxy.header.translation.getValue().getValue()) + p1 = p2.add(lspc) + j = obj.ViewObject.TextAlign + svg += getText(c,f1,n,a,getProj(p1),t1,linespacing,j,flip=True) + if t2: + ofs = FreeCAD.Vector(0,lspc.Length,0) + if a: + ofs = FreeCAD.Rotation(FreeCAD.Vector(0,0,1),-rotation).multVec(ofs) + svg += getText(c,fontsize,n,a,getProj(p1).add(ofs),t2,linespacing,j,flip=True) elif obj.isDerivedFrom('Part::Feature'): if obj.Shape.isNull():