From b40e4c011bf719138332ef92813bc7da0532bd0d Mon Sep 17 00:00:00 2001 From: yorikvanhavre Date: Fri, 28 Oct 2011 15:25:14 +0000 Subject: [PATCH] + Draft dimensions exported to SVG are now reimportable as Draft dimensions git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5079 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Mod/Draft/Draft.py | 18 ++++++-- src/Mod/Draft/importSVG.py | 88 ++++++++++++++++++++++++-------------- 2 files changed, 69 insertions(+), 37 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index ceb67df1d..c4dec8bdd 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1004,15 +1004,23 @@ def getSVG(obj,modifier=100,textmodifier=100,linestyle="continuous",fillstyle="s svg += getrgb(obj.ViewObject.LineColor) + '" ' svg += 'stroke-width="' + str(obj.ViewObject.LineWidth/modifier) + ' px" ' svg += 'style="stroke-width:'+ str(obj.ViewObject.LineWidth/modifier) - svg += ';stroke-miterlimit:4;stroke-dasharray:none"/>\n' + svg += ';stroke-miterlimit:4;stroke-dasharray:none" ' + svg += 'freecad:basepoint1="'+str(p1.x)+' '+str(p1.y)+'" ' + svg += 'freecad:basepoint2="'+str(p4.x)+' '+str(p4.y)+'" ' + svg += 'freecad:dimpoint="'+str(p2.x)+' '+str(p2.y)+'"' + svg += '/>\n' svg += '' + svg += 'scale('+str(tmod/2000)+',-'+str(tmod/2000)+')" ' + svg += 'freecad:skip="1"' + svg += '>\n' svg += dimText % p3.sub(p2).Length svg += '\n\n' diff --git a/src/Mod/Draft/importSVG.py b/src/Mod/Draft/importSVG.py index 2988ed5c3..d93d01b1f 100644 --- a/src/Mod/Draft/importSVG.py +++ b/src/Mod/Draft/importSVG.py @@ -240,6 +240,7 @@ class svgHandler(xml.sax.ContentHandler): self.count = 0 self.transform = None self.grouptransform = [] + self.lastdim = None if gui and draftui: r = float(draftui.color.red()/255.0) @@ -391,6 +392,19 @@ class svgHandler(xml.sax.ContentHandler): # print "debug: pathdata:",pathdata + if "freecad:basepoint1" in data: + p1 = data["freecad:basepoint1"] + p1 = Vector(float(p1[0]),-float(p1[1]),0) + p2 = data["freecad:basepoint2"] + p2 = Vector(float(p2[0]),-float(p2[1]),0) + p3 = data["freecad:dimpoint"] + p3 = Vector(float(p3[0]),-float(p3[1]),0) + obj = Draft.makeDimension(p1,p2,p3) + self.applyTrans(obj) + self.format(obj) + pathdata = [] + self.lastdim = obj + for d in pathdata: if (d == "M"): command = "move" @@ -608,7 +622,7 @@ class svgHandler(xml.sax.ContentHandler): # processing circles - if name == "circle": + if (name == "circle") and (not ("freecad:skip" in data)) : if not pathname: pathname = 'Circle' c = Vector(float(data['cx'][0]),-float(data['cy'][0]),0) r = float(data['r'][0]) @@ -624,21 +638,25 @@ class svgHandler(xml.sax.ContentHandler): # processing texts - if (name in ["text","tspan"]): - print "processing a text" - if 'x' in data: - self.x = data['x'] + if name in ["text","tspan"]: + if not("freecad:skip" in data): + print "processing a text" + if 'x' in data: + self.x = data['x'] + else: + self.x = 0 + if 'y' in data: + self.y = data['y'] + else: + self.y = 0 + if 'font-size' in data: + if data['font-size'] != 'none': + self.text = getsize(data['font-size']) + else: + self.text = 1 else: - self.x = 0 - if 'y' in data: - self.y = data['y'] - else: - self.y = 0 - if 'font-size' in data: - if data['font-size'] != 'none': - self.text = getsize(data['font-size']) - else: - self.text = 1 + if self.lastdim: + self.lastdim.ViewObject.FontSize = int(getsize(data['font-size'])) print "done processing element ",self.count @@ -670,24 +688,28 @@ class svgHandler(xml.sax.ContentHandler): self.grouptransform.pop() def applyTrans(self,sh): - if self.transform: - print "applying object transform: ",self.transform - sh = sh.transformGeometry(self.transform) - for i in range(len(self.grouptransform)): - print "applying group transform: ",self.grouptransform[-i-1] - sh = sh.transformGeometry(self.grouptransform[-i-1]) - ''' - if 'scale' in self.transform: - print "applying scale factor: ",self.transform['scale'] - m = FreeCAD.Matrix() - m.scale(self.transform['scale']) - sh = sh.transformGeometry(m) - if 'translate' in self.transform: - print "applying translation: ",self.transform['translate'] - sh.translate(self.transform['translate']) - self.transform = {} - ''' - return sh + if isinstance(sh,Part.Shape): + if self.transform: + print "applying object transform: ",self.transform + sh = sh.transformGeometry(self.transform) + for i in range(len(self.grouptransform)): + print "applying group transform: ",self.grouptransform[-i-1] + sh = sh.transformGeometry(self.grouptransform[-i-1]) + return sh + elif Draft.getType(sh) == "Dimension": + pts = [] + for p in [sh.Start,sh.End,sh.Dimline]: + cp = Vector(p) + if self.transform: + print "applying object transform: ",self.transform + cp = self.transform.multiply(cp) + for i in range(len(self.grouptransform)): + print "applying group transform: ",self.grouptransform[-i-1] + cp = self.grouptransform[-i-1].multiply(cp) + pts.append(cp) + sh.Start = pts[0] + sh.End = pts[1] + sh.Dimline = pts[2] def translateVec(self,vec,mat): v = Vector(mat.A14,mat.A24,mat.A34)