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 += '\n'
+ svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
+ svg += 'freecad:skip="1"'
+ svg += '/>\n'
svg += '\n'
+ svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
+ svg += 'freecad:skip="1"'
+ 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)