summaryrefslogtreecommitdiff
path: root/host
diff options
context:
space:
mode:
authorNicolas Schodet2011-04-28 22:08:31 +0200
committerNicolas Schodet2011-04-28 22:08:31 +0200
commitb0ef2ecc8467319f27fd5de45c0bc9906013147b (patch)
tree7575cf51a08b5ef92513e51ce00ecb827c1e1cf8 /host
parenta62e936645808b33558168bd2225c96ad388740c (diff)
host/simu: add transformation matrix push/pop
Diffstat (limited to 'host')
-rw-r--r--host/simu/inter/drawable.py2
-rw-r--r--host/simu/utils/trans_matrix.py20
2 files changed, 22 insertions, 0 deletions
diff --git a/host/simu/inter/drawable.py b/host/simu/inter/drawable.py
index bcf1823f..af7c62a2 100644
--- a/host/simu/inter/drawable.py
+++ b/host/simu/inter/drawable.py
@@ -43,6 +43,8 @@ class Drawable:
self.trans_translate = self.__trans_matrix.translate
self.trans_scale = self.__trans_matrix.scale
self.trans_identity = self.__trans_matrix.identity
+ self.trans_push = self.__trans_matrix.push
+ self.trans_pop = self.__trans_matrix.pop
self.__children = [ ]
self.children = self.__children
self.__onto.__children.append (self)
diff --git a/host/simu/utils/trans_matrix.py b/host/simu/utils/trans_matrix.py
index 99ffe707..12bc7b35 100644
--- a/host/simu/utils/trans_matrix.py
+++ b/host/simu/utils/trans_matrix.py
@@ -47,6 +47,7 @@ class TransMatrix:
self.matrix = m
else:
self.matrix = self.IDENTITY
+ self.stack = [ ]
def identity (self):
"""Set to identity.
@@ -163,6 +164,25 @@ class TransMatrix:
vl = sqrt (v[0] ** 2 + v[1] ** 2)
return vl
+ def push (self):
+ """Save the current value to be poped later.
+
+ >>> a = TransMatrix ()
+ >>> a.translate ((2, 3)); a
+ ((1, 0), (0, 1), (2, 3))
+ >>> a.push ()
+ >>> a.scale (2); a
+ ((2, 0), (0, 2), (4, 6))
+ >>> a.pop ()
+ >>> a
+ ((1, 0), (0, 1), (2, 3))
+ """
+ self.stack.append (self.matrix)
+
+ def pop (self):
+ """Restore saved value, see push."""
+ self.matrix = self.stack.pop ()
+
def __repr__ (self):
return self.matrix.__repr__ ()