Mercurial > MadButterfly
diff pyink/MBScene.py @ 1136:950076863b7e
Fix the tween calculation for the inbetween frames. Now, we can use primitive instead og group to defin ethe animation. Currently, it has been tested against rectangle only. We need to check others as well.
author | wycc |
---|---|
date | Tue, 21 Dec 2010 14:35:42 +0800 |
parents | bc619172bd2c |
children | a2b068594412 d4dbcb93aee0 |
line wrap: on
line diff
--- a/pyink/MBScene.py Sun Dec 19 20:47:23 2010 +0800 +++ b/pyink/MBScene.py Tue Dec 21 14:35:42 2010 +0800 @@ -561,6 +561,7 @@ if i+2 < len(layer._keys): layer.duplicateGroup = self.document.createElement("svg:g") layer.duplicateGroup.setAttribute("inkscape:label","dup") + layer.duplicateGroup.setAttribute("sodipodi:insensitive","1") s.ref.setAttribute("style","display:none") s.ref.parent().appendChild(layer.duplicateGroup) self.updateTweenContent(layer.duplicateGroup, layer.get_tween_type(s.idx),s, layer._keys[i+2], nth) @@ -755,11 +756,11 @@ ss = self.decomposition(sm) dm = self.parseTransform(d) dd = self.decomposition(dm) - sx = ss[0]*(1-p)+dd[0]*p - sy = ss[1]*(1-p)+dd[1]*p - a = ss[2]*(1-p)+dd[2]*p - tx = ox*(1-p)+dx*p - ty = oy*(1-p)+dy*p + sx = (ss[0]*(1-p)+dd[0]*p)/ss[0] + sy = (ss[1]*(1-p)+dd[1]*p)/ss[0] + a = ss[2]*(1-p)+dd[2]*p-ss[2] + tx = ox*(1-p)+dx*p-ox + ty = oy*(1-p)+dy*p-oy m = [math.cos(a),math.sin(a),-math.sin(a),math.cos(a),0,0] m = self.mulA([sx,0,0,sy,0,0],m) m = self.mulA(m,[1,0,0,1,-ox,oy-self.height]) @@ -772,10 +773,43 @@ sh = float(s.attribute("height")) dw = float(d.attribute("width")) dh = float(d.attribute("height")) - tx = (dw-sw)*p+sw - ty = (dh-sh)*p+sh - print tx,ty - top.setAttribute("transform","matrix(%g,0,0,%g,0,0)" % (tx,ty)) + try: + item = self.nodeToItem[s.attribute("id")] + (ox,oy) = item.getCenter() + except: + ox = 0 + oy = 0 + try: + item = self.nodeToItem[d.attribute("id")] + (dx,dy) = item.getCenter() + except: + dx = 0 + dy = 0 + try: + sm = self.parseTransform(s) + ss = self.decomposition(sm) + except: + ss = [1,1,0,0,0] + pass + try: + dm = self.parseTransform(d) + dd = self.decomposition(dm) + except: + dd = [1,1,0,0,0] + pass + dd[0] = ss[0]*dw/sw + dd[1] = ss[1]*dh/sh + sx = (ss[0]*(1-p)+dd[0]*p)/ss[0] + sy = (ss[1]*(1-p)+dd[1]*p)/ss[1] + a = ss[2]*(1-p)+dd[2]*p-ss[2] + tx = ox*(1-p)+dx*p + ty = oy*(1-p)+dy*p + m = [math.cos(a),math.sin(a),-math.sin(a),math.cos(a),0,0] + m = self.mulA([sx,0,0,sy,0,0],m) + m = self.mulA(m,[1,0,0,1,-ox,oy-self.height]) + m = self.mulA([1,0,0,1,tx,self.height-ty],m) + + top.setAttribute("transform","matrix(%g,%g,%g,%g,%g,%g)" % (m[0],m[2],m[1],m[3],m[4],m[5])) except: traceback.print_exc() pass