Code

Output extensions for UniConverter export (wmf, sk1 and plt).
[inkscape.git] / share / extensions / simpletransform.py
index cbd7956657b03d543ae0b16617d04f7a3bad5089..ec224990b258af2943a635825de1a2e1f6422cda 100644 (file)
@@ -23,13 +23,14 @@ attribute easier.
 import inkex, cubicsuperpath, bezmisc, simplestyle
 import copy, math, re
 
-def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
+def parseTransform(transf,mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]):
     if transf=="" or transf==None:
         return(mat)
-    result=re.match("(translate|scale|rotate|skewX|skewY|matrix)\(([^)]*)\)",transf)
+    stransf = transf.strip()
+    result=re.match("(translate|scale|rotate|skewX|skewY|matrix)\s*\(([^)]*)\)\s*,?",stransf)
 #-- translate --
     if result.group(1)=="translate":
-        args=result.group(2).split(",")
+        args=result.group(2).replace(',',' ').split()
         dx=float(args[0])
         if len(args)==1:
             dy=0.0
@@ -37,8 +38,8 @@ def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
             dy=float(args[1])
         matrix=[[1,0,dx],[0,1,dy]]
 #-- scale --
-    if result.groups(1)=="scale":
-        args=result.group(2).split(",")
+    if result.group(1)=="scale":
+        args=result.group(2).replace(',',' ').split()
         sx=float(args[0])
         if len(args)==1:
             sy=sx
@@ -46,44 +47,44 @@ def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
             sy=float(args[1])
         matrix=[[sx,0,0],[0,sy,0]]
 #-- rotate --
-    if result.groups(1)=="rotate":
-        args=result.group(2).split(",")
+    if result.group(1)=="rotate":
+        args=result.group(2).replace(',',' ').split()
         a=float(args[0])*math.pi/180
         if len(args)==1:
             cx,cy=(0.0,0.0)
         else:
-            cx,cy=args[1:]
+            cx,cy=map(float,args[1:])
         matrix=[[math.cos(a),-math.sin(a),cx],[math.sin(a),math.cos(a),cy]]
 #-- skewX --
-    if result.groups(1)=="skewX":
+    if result.group(1)=="skewX":
         a=float(result.group(2))*math.pi/180
         matrix=[[1,math.tan(a),0],[0,1,0]]
-#-- skewX --
-    if result.groups(1)=="skewX":
+#-- skewY --
+    if result.group(1)=="skewY":
         a=float(result.group(2))*math.pi/180
         matrix=[[1,0,0],[math.tan(a),1,0]]
 #-- matrix --
     if result.group(1)=="matrix":
-        a11,a21,a12,a22,v1,v2=result.group(2).split(",")
-        matrix=[[float(a11),float(a12),float(v1)],[float(a21),float(a22),float(v2)]]
-    
+        a11,a21,a12,a22,v1,v2=result.group(2).replace(',',' ').split()
+        matrix=[[float(a11),float(a12),float(v1)], [float(a21),float(a22),float(v2)]]
+
     matrix=composeTransform(mat,matrix)
-    if result.end()<len(transf):
-        return(parseTransform(transf[result.end():],matrix))
+    if result.end() < len(stransf):
+        return(parseTransform(stransf[result.end():], matrix))
     else:
         return matrix
 
 def formatTransform(mat):
-    return("matrix(%f,%f,%f,%f,%f,%f)"%(mat[0][0],mat[1][0],mat[0][1],mat[1][1],mat[0][2],mat[1][2]))
+    return ("matrix(%f,%f,%f,%f,%f,%f)" % (mat[0][0], mat[1][0], mat[0][1], mat[1][1], mat[0][2], mat[1][2]))
 
 def composeTransform(M1,M2):
-    a11=M1[0][0]*M2[0][0]+M1[0][1]*M2[1][0]
-    a12=M1[0][0]*M2[0][1]+M1[0][1]*M2[1][1]
-    a21=M1[1][0]*M2[0][0]+M1[1][1]*M2[1][0]
-    a22=M1[1][0]*M2[0][1]+M1[1][1]*M2[1][1]
+    a11 = M1[0][0]*M2[0][0] + M1[0][1]*M2[1][0]
+    a12 = M1[0][0]*M2[0][1] + M1[0][1]*M2[1][1]
+    a21 = M1[1][0]*M2[0][0] + M1[1][1]*M2[1][0]
+    a22 = M1[1][0]*M2[0][1] + M1[1][1]*M2[1][1]
 
-    v1=M1[0][0]*M2[0][2]+M1[0][1]*M2[1][2]+M1[0][2]
-    v2=M1[1][0]*M2[0][2]+M1[1][1]*M2[1][2]+M1[1][2]
+    v1 = M1[0][0]*M2[0][2] + M1[0][1]*M2[1][2] + M1[0][2]
+    v2 = M1[1][0]*M2[0][2] + M1[1][1]*M2[1][2] + M1[1][2]
     return [[a11,a12,v1],[a21,a22,v2]]
 
 def applyTransformToNode(mat,node):
@@ -92,8 +93,8 @@ def applyTransformToNode(mat,node):
     node.set("transform", newtransf)
 
 def applyTransformToPoint(mat,pt):
-    x=mat[0][0]*pt[0]+mat[0][1]*pt[1]+mat[0][2]
-    y=mat[1][0]*pt[0]+mat[1][1]*pt[1]+mat[1][2]
+    x = mat[0][0]*pt[0] + mat[0][1]*pt[1] + mat[0][2]
+    y = mat[1][0]*pt[0] + mat[1][1]*pt[1] + mat[1][2]
     pt[0]=x
     pt[1]=y
 
@@ -105,7 +106,7 @@ def applyTransformToPath(mat,path):
 
 def fuseTransform(node):
     if node.get('d')==None:
-        #FIX ME: how do you raise errors?
+        #FIXME: how do you raise errors?
         raise AssertionError, 'can not fuse "transform" of elements that have no "d" attribute'
     t = node.get("transform")
     if t == None:
@@ -127,7 +128,7 @@ def boxunion(b1,b2):
     elif b2 is None:
         return b1    
     else:
-        return((min(b1[0],b2[0]),max(b1[1],b2[1]),min(b1[2],b2[2]),max(b1[3],b2[3])))
+        return((min(b1[0],b2[0]), max(b1[1],b2[1]), min(b1[2],b2[2]), max(b1[3],b2[3])))
 
 def roughBBox(path):
     xmin,xMax,ymin,yMax = path[0][0][0][0],path[0][0][0][0],path[0][0][0][1],path[0][0][0][1]