summaryrefslogtreecommitdiffstats
path: root/share/extensions/simpletransform.py
diff options
context:
space:
mode:
Diffstat (limited to 'share/extensions/simpletransform.py')
-rw-r--r--[-rwxr-xr-x]share/extensions/simpletransform.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/share/extensions/simpletransform.py b/share/extensions/simpletransform.py
index 47cc61ec8..8b6f46935 100755..100644
--- a/share/extensions/simpletransform.py
+++ b/share/extensions/simpletransform.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
'''
Copyright (C) 2006 Jean-Francois Barraud, barraud@math.univ-lille1.fr
Copyright (C) 2010 Alvin Penner, penner@vaxxine.com
@@ -79,6 +78,21 @@ def parseTransform(transf,mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]):
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]))
+def invertTransform(mat):
+ det = mat[0][0]*mat[1][1] - mat[0][1]*mat[1][0]
+ if det !=0: # det is 0 only in case of 0 scaling
+ # invert the rotation/scaling part
+ a11 = mat[1][1]/det
+ a12 = -mat[0][1]/det
+ a21 = -mat[1][0]/det
+ a22 = mat[0][0]/det
+ # invert the translational part
+ a13 = -(a11*mat[0][2] + a12*mat[1][2])
+ a23 = -(a21*mat[0][2] + a22*mat[1][2])
+ return [[a11,a12,a13],[a21,a22,a23]]
+ else:
+ return[[0,0,-mat[0][2]],[0,0,-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]
@@ -238,4 +252,10 @@ def computeBBox(aList,mat=[[1,0,0],[0,1,0]]):
return bbox
+def computePointInNode(pt, node, mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]):
+ if node.getparent() is not None:
+ applyTransformToPoint(invertTransform(composeParents(node, mat)), pt)
+ return pt
+
+
# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99