[Sie-announce] SIEコード [2778] SVGAnimateMotionElementの修正

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2011年 6月 17日 (金) 23:44:32 JST


Revision: 2778
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2778
Author:   dhrname
Date:     2011-06-17 23:44:32 +0900 (Fri, 17 Jun 2011)

Log Message:
-----------
SVGAnimateMotionElementの修正

Modified Paths:
--------------
    branches/08x/080/org/w3c/dom/svg.js

Modified: branches/08x/080/org/w3c/dom/svg.js
===================================================================
--- branches/08x/080/org/w3c/dom/svg.js	2011-06-17 14:27:37 UTC (rev 2777)
+++ branches/08x/080/org/w3c/dom/svg.js	2011-06-17 14:44:32 UTC (rev 2778)
@@ -5471,13 +5471,13 @@
           d = tgsd * 0.8,
           n = _tar._valueList.length - 1,
           tg = _tar.getCurrentTime(),
-          ii, di, ti;
+          ii;
       if (tgsd === 0) {
          tgsd = null;
          return;
       }
       if (tpn) { //path属性が指定されていた場合、tpnは属性値となる
-        var st = tpn.getTotalLength() * tg / d, //stは現在の距離
+        var st = tpn.getTotalLength() * tg / d, //stは現在に至るまでの距離
             p = tpn.getPointAtLength(st),
             trans = _tar.targetElement.transform;
         p = p.matrixTransform(_tar.targetElement.getScreenCTM());
@@ -5490,7 +5490,9 @@
         trans.baseVal = base;
         evtt = base = trans = st = p = null;
       } else if (tar._valueList) {
-        var total = 0;
+        var total = 0, //totalは総距離
+            st = 0,    //stは現在にいたるまでの距離
+            tav = tar._valueList;
         if ((n !== -1) && (d !== 0) && (tg <= d)) {
           ii = Math.floor((tg*n) / d);
           if (ii === n) { //iiが境い目のときは、n-2を適用
@@ -5499,19 +5501,17 @@
         } else {
           return;
         }
-        if (tar._keyTimes) {
-          di = (tar._keyTimes[ii+1] - tar._keyTimes[ii]) * d;
-          ti = tar._keyTimes[ii];
-        } else {
-          di = d / n; //keyTimesがなければ均等に時間を配分しておく
-          ti = ii / n;
-        }
-        for (var i=1, tav=tar._valueList, tvli=tav.length;i<tvli;i+=2) {
+        for (var i=1, tvli=tav.length;i<tvli;i+=2) {
           total += Math.sqrt(Math.pow(tav[i][1] - tav[i][0], 2) + Math.pow(tav[i-1][1] - tav[i-1][0], 2));
         }
-        var st = (total / tgsd) * _tar.getCurrentTime() / 125 * 0.8,
+        for (var i=1;i<ii;i+=2) {
+          st += Math.sqrt(Math.pow(tav[i][1] - tav[i-1][1], 2) + Math.pow(tav[i][0] - tav[i-1][0], 2));
+        }
+        var st = (st / total) * d,
             p = tar.ownerDocument.documentElement.createSVGPoint(),
             trans = _tar.targetElement.transform;
+        p.x = tav[ii][0] + (tav[ii+1][0] - tav[ii][0]) * (tg - st) / d;
+        p.y = tav[ii][1] + (tav[ii+1][1] - tav[ii][1]) * (tg - st) / d;
         p = p.matrixTransform(_tar.targetElement.getScreenCTM());
         trans.animVal.getItem(trans.animVal.numberOfItems-1).setTranslate(p.x, p.y);
         var base = trans.baseVal;




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る