+ 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
This commit is contained in:
parent
2e149d05c7
commit
b40e4c011b
|
@ -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 += '<circle cx="'+str(p2.x)+'" cy="'+str(p2.y)
|
||||
svg += '" r="'+str(obj.ViewObject.FontSize/(pmod))+'" '
|
||||
svg += 'fill="'+ getrgb(obj.ViewObject.LineColor) +'" stroke="none" '
|
||||
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none"/>\n'
|
||||
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
|
||||
svg += 'freecad:skip="1"'
|
||||
svg += '/>\n'
|
||||
svg += '<circle cx="'+str(p3.x)+'" cy="'+str(p3.y)
|
||||
svg += '" r="'+str(obj.ViewObject.FontSize/(pmod))+'" '
|
||||
svg += 'fill="#000000" stroke="none" '
|
||||
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none"/>\n'
|
||||
svg += 'style="stroke-miterlimit:4;stroke-dasharray:none" '
|
||||
svg += 'freecad:skip="1"'
|
||||
svg += '/>\n'
|
||||
svg += '<text id="' + obj.Name + '" fill="'
|
||||
svg += getrgb(obj.ViewObject.LineColor) +'" font-size="'
|
||||
svg += str(obj.ViewObject.FontSize*(tmod/5))+'" '
|
||||
|
@ -1021,7 +1029,9 @@ def getSVG(obj,modifier=100,textmodifier=100,linestyle="continuous",fillstyle="s
|
|||
svg += 'transform="rotate('+str(math.degrees(angle))
|
||||
svg += ','+ str(tbase.x) + ',' + str(tbase.y) + ') '
|
||||
svg += 'translate(' + str(tbase.x) + ',' + str(tbase.y) + ') '
|
||||
svg += 'scale('+str(tmod/2000)+',-'+str(tmod/2000)+')">'
|
||||
svg += 'scale('+str(tmod/2000)+',-'+str(tmod/2000)+')" '
|
||||
svg += 'freecad:skip="1"'
|
||||
svg += '>\n'
|
||||
svg += dimText % p3.sub(p2).Length
|
||||
svg += '</text>\n</g>\n'
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user