Mercurial > MadButterfly
annotate pyink/tween.py @ 1311:e6bb9d00341f
Make content dom and comp_dock synchronized
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Thu, 20 Jan 2011 13:08:26 +0800 |
parents | 0e27e3aa21ed |
children | 20cf3e2a0a9d |
rev | line source |
---|---|
1140 | 1 # -*- indent-tabs-mode: t; tab-width: 8; python-indent: 4; -*- |
2 # vim: sw=4:ts=8:sts=4 | |
3 import traceback | |
4 import math | |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
5 |
1225
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
6 def parse_opacity(obj): |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
7 style = obj.getAttribute("style") |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
8 arr = style.split(';') |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
9 for a in arr: |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
10 f = a.split(':') |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
11 if f[0] == 'opacity': |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
12 return float(f[1]) |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
13 return 1 |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
14 |
1227 | 15 def change_opacity(obj, opacity): |
16 try: | |
17 style = obj.getAttribute("style") | |
18 except: | |
19 obj.setAttribute("style","opacity:%g" % opacity) | |
20 return | |
1225
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
21 arr = style.split(';') |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
22 s='' |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
23 for a in arr: |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
24 f = a.split(':') |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
25 f[0] = f[0].replace(' ','') |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
26 if f[0] == 'opacity': |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
27 if s != '': |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
28 s = s + ('; opacity:%g' % opacity) |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
29 else: |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
30 s = 'opacity:%g' % opacity |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
31 elif f[0] != '': |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
32 if s == '': |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
33 s = a |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
34 else: |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
35 s = s +';'+ a |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
36 obj.setAttribute("style",s) |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
37 |
a05c8deb6523
Add opacity support to implement fadein/fadeout effect
wycc
parents:
1199
diff
changeset
|
38 |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
39 class TweenObject(object): |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
40 TWEEN_TYPE_NORMAL = 0 |
1157
3a891dccabd8
Remove the locate tween. It is a special case for the scale tween
wycc
parents:
1156
diff
changeset
|
41 #TWEEN_TYPE_RELOCATE = 1 |
3a891dccabd8
Remove the locate tween. It is a special case for the scale tween
wycc
parents:
1156
diff
changeset
|
42 TWEEN_TYPE_SCALE = 1 |
1156
ad9c44a08645
If an object does not exist in the destination group, we should duplicate it.
wycc
parents:
1151
diff
changeset
|
43 |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
44 def __init__(self, doc, root): |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
45 super(TweenObject, self).__init__() |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
46 self._doc = doc |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
47 self._root = root |
1141 | 48 try: |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
49 self.width = float(root.getAttribute("width")) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
50 self.height = float(root.getAttribute("height")) |
1141 | 51 except: |
52 self.width = 640 | |
53 self.height = 480 | |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
54 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
55 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
56 |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
57 def updateTweenContent(self, duplicate_group, tween_type, |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
58 start_scene_group, stop_scene_group, percent): |
1140 | 59 """ |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
60 Update the content of the duplicate scene group. We will |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
61 use precent, start_scene_group, stop_scene_group to |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
62 compute transform matrix and update duplicate scene group |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
63 specified. |
1140 | 64 """ |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
65 # Collect ref from the obj |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
66 node = duplicate_group.firstChild() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
67 dup_nodes = {} |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
68 while node: |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
69 try: |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
70 ref = node.getAttribute("ref") |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
71 dup_nodes[ref] = node |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
72 except: |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
73 ref = None |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
74 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
75 node = node.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
76 pass |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
77 |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
78 # Collect all nodes in stop scene |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
79 stop_nodes = {} |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
80 node = stop_scene_group.firstChild() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
81 while node: |
1140 | 82 try: |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
83 node_label = node.getAttribute("ns0:duplicate-src") |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
84 stop_nodes[node_label] = node |
1140 | 85 except: |
86 pass | |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
87 node = node.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
88 pass |
1199
25e1579ed3d1
Fix bug of running animation
Thinker K.F. Li <thinker@codemud.net>
parents:
1172
diff
changeset
|
89 |
1172
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
90 # Collect all nodes in start scene |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
91 start_nodes = {} |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
92 node = start_scene_group.firstChild() |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
93 while node: |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
94 try: |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
95 node_label = node.getAttribute("id") |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
96 start_nodes[node_label] = node |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
97 except: |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
98 pass |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
99 node = node.next() |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
100 pass |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
101 |
1172
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
102 # Remove duplicate nodes that is not in the set of start nodes |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
103 for node_ref in dup_nodes: |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
104 if node_ref not in start_nodes: |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
105 node = dup_nodes[node_ref] |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
106 duplicate_group.removeChild(node) |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
107 pass |
178b126edd2c
Implement the correct normal tween. We will duplicate the node in the start scene. Insted of deleting all nodes which is not in the stop scene, we should delete the object which is not in the start scene instead. If we delete objecvt the the stop scene, the object should appear until we reach the stop scene.
wycc
parents:
1170
diff
changeset
|
108 pass |
1160
1a699dc00fa3
Fix the issue of not removing node in old scene when switching scenes.
Thinker K.F. Li <thinker@codemud.net>
parents:
1157
diff
changeset
|
109 |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
110 # |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
111 # Node ID of a node of start scene must be mapped to |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
112 # 'ns0:duplicate-src' attribute of a node of stop scene. The |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
113 # nodes which can not be mapped to a node of stop scene are |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
114 # not manipulated by the tween. |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
115 # |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
116 # When a scene is duplicated, 'ns0:duplicate-src' attribute of |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
117 # nodes, in the new scene, must be setted to ID of respective |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
118 # one in the duplicated scene. |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
119 # |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
120 start_node = start_scene_group.firstChild() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
121 while start_node: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
122 start_node_id = start_node.getAttribute('id') |
1163 | 123 dup_node = dup_nodes.setdefault(start_node_id, None) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
124 try: |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
125 stop_node = stop_nodes[start_node_id] |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
126 except KeyError: |
1170
e64b02951627
Fix the issue in the normal tween. We duplicate the object only when the object is not in the duplicated node yet.
wycc
parents:
1167
diff
changeset
|
127 self.updateTweenObject(duplicate_group, tween_type, |
e64b02951627
Fix the issue in the normal tween. We duplicate the object only when the object is not in the duplicated node yet.
wycc
parents:
1167
diff
changeset
|
128 start_node, start_node, |
e64b02951627
Fix the issue in the normal tween. We duplicate the object only when the object is not in the duplicated node yet.
wycc
parents:
1167
diff
changeset
|
129 percent, dup_node) |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
130 start_node = start_node.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
131 continue |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
132 |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
133 |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
134 self.updateTweenObject(duplicate_group, tween_type, |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
135 start_node, stop_node, |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
136 percent, dup_node) |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
137 start_node = start_node.next() |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
138 pass |
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
139 pass |
1140 | 140 |
141 def parseTransform(self,obj): | |
142 """ | |
143 Return the transform matrix of an object | |
144 """ | |
145 try: | |
1141 | 146 t = obj.getAttribute("transform") |
1140 | 147 if t[0:9] == 'translate': |
148 fields = t[10:].split(',') | |
149 x = float(fields[0]) | |
150 fields = fields[1].split(')') | |
151 y = float(fields[0]) | |
152 return [1,0,0,1,x,y] | |
153 elif t[0:6] == 'matrix': | |
154 fields=t[7:].split(')') | |
155 fields = fields[0].split(',') | |
156 return [float(fields[0]),float(fields[1]),float(fields[2]),float(fields[3]),float(fields[4]),float(fields[5])] | |
157 except: | |
158 #traceback.print_exc() | |
159 return [1,0,0,1,0,0] | |
160 | |
161 def invA(self,m): | |
162 d = m[0]*m[3]-m[2]*m[1] | |
163 return [m[3]/d, -m[1]/d, -m[2]/d, m[0]/d, (m[1]*m[5]-m[4]*m[3])/d, (m[4]*m[2]-m[0]*m[5])/d] | |
164 | |
165 def mulA(self,a,b): | |
166 return [a[0]*b[0]+a[1]*b[2], | |
167 a[0]*b[1]+a[1]*b[3], | |
168 a[2]*b[0]+a[3]*b[2], | |
169 a[2]*b[1]+a[3]*b[3], | |
170 a[0]*b[4]+a[1]*b[5]+a[4], | |
171 a[2]*b[4]+a[3]*b[5]+a[5]] | |
172 | |
173 def decomposition(self,m): | |
174 """ | |
175 Decompose the affine matrix into production of translation,rotation,shear and scale. | |
176 The algorithm is documented at http://lists.w3.org/Archives/Public/www-style/2010Jun/0602.html | |
177 """ | |
178 if m[0]*m[3] == m[1]*m[2]: | |
179 print "The affine matrix is singular" | |
180 return [1,0,0,1,0,0] | |
181 A=m[0] | |
182 B=m[2] | |
183 C=m[1] | |
184 D=m[3] | |
185 E=m[4] | |
186 F=m[5] | |
187 sx = math.sqrt(A*A+B*B) | |
188 A = A/sx | |
189 B = B/sx | |
190 shear = m[0]*m[1]+m[2]*m[3] | |
191 C = C - A*shear | |
192 D = D - B*shear | |
193 sy = math.sqrt(C*C+D*D) | |
194 C = C/sy | |
195 D = D/sy | |
196 r = A*D-B*C | |
197 if r == -1: | |
198 shear = -shear | |
199 sy = -sy | |
200 R = math.atan2(B,A) | |
201 return [sx,sy, R, E,F] | |
202 | |
203 | |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
204 def updateTweenObject(self,obj,typ,s,d,p,newobj): |
1140 | 205 """ |
206 Generate tweened object in the @obj by using s and d in the @p percent | |
207 http://lists.w3.org/Archives/Public/www-style/2010Jun/0602.html | |
208 """ | |
1157
3a891dccabd8
Remove the locate tween. It is a special case for the scale tween
wycc
parents:
1156
diff
changeset
|
209 if typ == self.TWEEN_TYPE_SCALE: |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
210 self.updateTweenObjectScale(obj,s,d,p,newobj) |
1140 | 211 pass |
1151
71c72e8d6755
Refactory cod eof TweenObject.updateTweenContent and MBScene.setCurrentScene().
Thinker K.F. Li <thinker@codemud.net>
parents:
1150
diff
changeset
|
212 elif typ == self.TWEEN_TYPE_NORMAL: |
1170
e64b02951627
Fix the issue in the normal tween. We duplicate the object only when the object is not in the duplicated node yet.
wycc
parents:
1167
diff
changeset
|
213 if newobj == None: |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
214 newobj = s.duplicate(self._doc) |
1170
e64b02951627
Fix the issue in the normal tween. We duplicate the object only when the object is not in the duplicated node yet.
wycc
parents:
1167
diff
changeset
|
215 newobj.setAttribute("ref", s.getAttribute("id")) |
e64b02951627
Fix the issue in the normal tween. We duplicate the object only when the object is not in the duplicated node yet.
wycc
parents:
1167
diff
changeset
|
216 obj.appendChild(newobj) |
1140 | 217 pass |
218 | |
1297 | 219 def updateTweenObjectScale_Group(self, s, d, p, newobj, top): |
1296
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
220 # Parse the translate or matrix |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
221 # |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
222 # D = B inv(A) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
223 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
224 (ox,oy) = s.spitem.getCenter() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
225 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
226 ox = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
227 oy = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
228 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
229 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
230 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
231 (dx,dy) = d.spitem.getCenter() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
232 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
233 dx = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
234 dy = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
235 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
236 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
237 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
238 start_opacity = parse_opacity(s) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
239 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
240 start_opacity = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
241 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
242 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
243 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
244 end_opacity =parse_opacity( d) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
245 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
246 end_opacity = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
247 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
248 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
249 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
250 cur_opacity = start_opacity*(1-p)+end_opacity*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
251 change_opacity(newobj,cur_opacity) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
252 sm = self.parseTransform(s) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
253 ss = self.decomposition(sm) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
254 dm = self.parseTransform(d) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
255 dd = self.decomposition(dm) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
256 sx = (ss[0]*(1-p)+dd[0]*p)/ss[0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
257 sy = (ss[1]*(1-p)+dd[1]*p)/ss[1] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
258 a = ss[2]*(1-p)+dd[2]*p-ss[2] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
259 tx = ox*(1-p)+dx*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
260 ty = oy*(1-p)+dy*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
261 m = [math.cos(a),math.sin(a),-math.sin(a),math.cos(a),0,0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
262 m = self.mulA([sx,0,0,sy,0,0],m) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
263 m = self.mulA(m,[1,0,0,1,-ox,oy-self.height]) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
264 m = self.mulA([1,0,0,1,tx,self.height-ty],m) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
265 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
266 top.setAttribute("transform","matrix(%g,%g,%g,%g,%g,%g)" % (m[0],m[2],m[1],m[3],m[4],m[5])) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
267 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
268 |
1297 | 269 def updateTweenObjectScale_Use(self, s, d, p, newobj, top): |
1296
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
270 # Parse the translate or matrix |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
271 # |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
272 # D = B inv(A) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
273 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
274 (ox,oy) = s.spitem.getCenter() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
275 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
276 ox = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
277 oy = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
278 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
279 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
280 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
281 (dx,dy) = d.spitem.getCenter() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
282 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
283 dx = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
284 dy = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
285 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
286 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
287 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
288 start_opacity = parse_opacity(s) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
289 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
290 start_opacity = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
291 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
292 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
293 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
294 end_opacity =parse_opacity( d) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
295 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
296 end_opacity = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
297 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
298 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
299 cur_opacity = start_opacity*(1-p)+end_opacity*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
300 change_opacity(newobj,cur_opacity) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
301 dm = self.parseTransform(d) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
302 dd = self.decomposition(dm) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
303 sx = 1-(1-dd[0])*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
304 sy = 1-(1-dd[1])*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
305 a = dd[2]*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
306 tx = ox*(1-p)+dx*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
307 ty = oy*(1-p)+dy*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
308 m = [math.cos(a),math.sin(a),-math.sin(a),math.cos(a),0,0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
309 m = self.mulA([sx,0,0,sy,0,0],m) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
310 m = self.mulA(m,[1,0,0,1,-ox,oy-self.height]) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
311 m = self.mulA([1,0,0,1,tx,self.height-ty],m) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
312 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
313 top.setAttribute("transform","matrix(%g,%g,%g,%g,%g,%g)" % (m[0],m[2],m[1],m[3],m[4],m[5])) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
314 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
315 |
1297 | 316 def updateTweenObjectScale_Primitive(self, s, d, p, newobj, top): |
1296
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
317 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
318 if d.name() == "svg:use": |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
319 sw = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
320 sh = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
321 dw = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
322 dh = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
323 else: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
324 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
325 sw = float(s.getAttribute("width")) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
326 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
327 sw = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
328 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
329 sh = float(s.getAttribute("height")) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
330 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
331 sh = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
332 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
333 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
334 dw = float(d.getAttribute("width")) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
335 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
336 dw = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
337 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
338 dh = float(d.getAttribute("height")) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
339 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
340 dh = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
341 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
342 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
343 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
344 start_opacity = parse_opacity(s) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
345 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
346 start_opacity = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
347 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
348 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
349 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
350 end_opacity =parse_opacity( d) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
351 if d.name() == "svg:use": |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
352 end_opacity = end_opacity * start_opacity |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
353 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
354 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
355 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
356 if d.name() == "svg:use": |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
357 end_opacity = start_opacity |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
358 else: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
359 end_opacity = 1 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
360 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
361 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
362 cur_opacity = start_opacity*(1-p)+end_opacity*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
363 change_opacity(newobj,cur_opacity) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
364 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
365 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
366 (ox,oy) = s.spitem.getCenter() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
367 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
368 ox = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
369 oy = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
370 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
371 (dx,dy) = d.spitem.getCenter() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
372 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
373 dx = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
374 dy = 0 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
375 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
376 sm = self.parseTransform(s) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
377 ss = self.decomposition(sm) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
378 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
379 ss = [1,1,0,0,0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
380 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
381 try: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
382 dm = self.parseTransform(d) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
383 dd = self.decomposition(dm) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
384 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
385 dd = [1,1,0,0,0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
386 dd[0] = dd[0]*dw/sw |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
387 dd[1] = dd[1]*dh/sh |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
388 sx = (ss[0]*(1-p)+dd[0]*p)/ss[0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
389 sy = (ss[1]*(1-p)+dd[1]*p)/ss[1] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
390 a = ss[2]*(1-p)+dd[2]*p-ss[2] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
391 tx = ox*(1-p)+dx*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
392 ty = oy*(1-p)+dy*p |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
393 m = [math.cos(a),math.sin(a),-math.sin(a),math.cos(a),0,0] |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
394 m = self.mulA([sx,0,0,sy,0,0],m) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
395 m = self.mulA(m,[1,0,0,1,-ox,oy-self.height]) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
396 m = self.mulA([1,0,0,1,tx,self.height-ty],m) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
397 |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
398 top.setAttribute("transform","matrix(%g,%g,%g,%g,%g,%g)" % (m[0],m[2],m[1],m[3],m[4],m[5])) |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
399 except: |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
400 traceback.print_exc() |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
401 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
402 pass |
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
403 |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
404 def updateTweenObjectScale(self,obj,s,d,p,newobj): |
1140 | 405 """ |
406 Generate a new group which contains the original group and then | |
407 add the transform matrix to generate a tween frame between the | |
408 origin and destination scene group. | |
409 | |
410 We will parse the transform matrix of the @s and @d and then | |
411 generate the matrix which is (1-p) of @s and p percent of @d. | |
412 """ | |
1239
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
413 if newobj and not newobj.firstChild(): |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
414 # newobj is not with expect structure. |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
415 # |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
416 # When a user change tween type of a scene, the structure |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
417 # of dup group created by old tween type may not satisfy |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
418 # the requirement of current tween type. |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
419 newobj.parent().removeChild(newobj) |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
420 newobj = None |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
421 pass |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
422 |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
423 if newobj == None: |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
424 newobj = s.duplicate(self._doc) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
425 top = self._doc.createElement("svg:g") |
1146
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
426 top.setAttribute("ref",s.getAttribute("id")) |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
427 top.appendChild(newobj) |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
428 obj.appendChild(top) |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
429 else: |
e14ec6d1a661
CHange the implementation to set the transformation matrix only. This is be more friendly for the animation inside the inskcape.
wycc
parents:
1141
diff
changeset
|
430 top = newobj |
1239
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
431 newobj = newobj.firstChild() |
447cd3359cf2
Fix bug of mal-structured dup group
Thinker K.F. Li <thinker@codemud.net>
parents:
1227
diff
changeset
|
432 pass |
1284
cbcb91b196fa
Use svg:use to duplicate the key frame. The current inkscape will not keep the extra attributes when we break the reference. Therefore, we may modify the inkscape directly or implemnet a break by ourself. In addition, we may need to improve the duplication to sync the new-added objects to an existed group.
wycc
parents:
1245
diff
changeset
|
433 print s.name() |
1296
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
434 if s.name() == 'svg:g': |
1297 | 435 self.updateTweenObjectScale_Group(s,d,p,newobj,top) |
1296
7f0a16125eeb
When we animate from a use, we should not consider its matrix because the matrix of the destination group is apply to the whole <svg:use> include its matrix.
wycc
parents:
1284
diff
changeset
|
436 elif s.name() == 'svg:use': |
1297 | 437 self.updateTweenObjectScale_Use(s,d,p,newobj,top) |
1140 | 438 else: |
1297 | 439 self.updateTweenObjectScale_Primitive(s,d,p,newobj,top) |
1245
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
440 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
441 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
442 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
443 ## \brief Providing capability of showing scenes. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
444 # |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
445 # This class computes and shows scenes for a \ref domview_ui. The |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
446 # content of layers and frames are read from domview_ui to generate |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
447 # scenes properly. When caller requests to show a scene 'n', this |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
448 # class compute content of frame 'n' for every layer of the |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
449 # domview_ui. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
450 # |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
451 class scenes_director(object): |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
452 _tween_obj_tween_types = (TweenObject.TWEEN_TYPE_NORMAL, |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
453 TweenObject.TWEEN_TYPE_SCALE) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
454 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
455 def __init__(self, domview_ui): |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
456 super(scenes_director, self).__init__() |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
457 self._domview = domview_ui |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
458 self._tween_obj = TweenObject(domview_ui.doc, domview_ui.root) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
459 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
460 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
461 def show_scene(self, idx): |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
462 """ |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
463 Update the scene group according to the curretn scene |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
464 data. There are a couple of cases. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
465 1. If the type of the scene is normal, we display it when |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
466 it contains the current frame. Otherwise hide it. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
467 2. If the type of the scene is relocate or scale, we need |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
468 to duplicate the scene group and then modify its |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
469 transform matrix according to the definition of the |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
470 scene. Then, hide the original scenr group and display |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
471 the duplciate scene group. In addition, we may need to |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
472 delete the old duplicated scene group as well. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
473 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
474 For each layer, we will always use the duplicated scene |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
475 group whose name as dup. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
476 We will put the duplicated scene group inside it. We will |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
477 create this group if it is not |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
478 available. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
479 """ |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
480 for layer_idx in range(self._domview.get_layer_num()): |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
481 dup_group = self._domview.get_layer_dup_group(layer_idx) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
482 dup_group.setAttribute('style', 'display: none') |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
483 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
484 all_key_tweens = self._domview.get_layer_keys(layer_idx) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
485 for start, end, tween_type in all_key_tweens: |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
486 if start == idx: # at key frame |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
487 scene_group = \ |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
488 self._domview.get_key_group(layer_idx, start) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
489 scene_group.setAttribute('style', '') |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
490 elif start < idx and end >= idx: # in Tween |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
491 dup_group.setAttribute('style', '') |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
492 scene_group = \ |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
493 self._domview.get_key_group(layer_idx, start) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
494 scene_group.setAttribute('style', 'display: none') |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
495 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
496 try: |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
497 next_scene_group = \ |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
498 self._domview.get_key_group(layer_idx, end + 1) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
499 except: # no next key frame |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
500 next_scene_group = scene_group |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
501 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
502 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
503 tween_obj_type = self._tween_obj_tween_types[tween_type] |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
504 nframes = end - start + 1 |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
505 percent = float(idx - start) / nframes |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
506 self._tween_obj.updateTweenContent(dup_group, |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
507 tween_obj_type, |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
508 scene_group, |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
509 next_scene_group, |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
510 percent) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
511 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
512 else: # this scene should not be showed. |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
513 scene_group = \ |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
514 self._domview.get_key_group(layer_idx, start) |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
515 scene_group.setAttribute('style', 'display: none') |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
516 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
517 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
518 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
519 pass |
ccbf0c5d01d1
Move code of setCurrentScene to tween.py.
Thinker K.F. Li <thinker@codemud.net>
parents:
1239
diff
changeset
|
520 pass |