OSDN Git Service

Fill の edges の最初と最後を比較して繋げる処理で対象をごっちゃにしてる所があったので直した
authorYoshihiro Yamazaki <yoya@awm.jp>
Fri, 28 Dec 2012 03:53:26 +0000 (12:53 +0900)
committerYoshihiro Yamazaki <yoya@awm.jp>
Fri, 28 Dec 2012 03:53:26 +0000 (12:53 +0900)
src/swf/shaperecords.js

index 585325b..f164218 100644 (file)
@@ -263,18 +263,27 @@ FlappSWFShapeRecords.markFillEdgeLoop = function(fillEdges) {
        edgesInfoList = fillEdges[style];
        for (i = 0, l = edgesInfoList.length ; i < l ; i++) {
            edgesInfo = edgesInfoList[i];
+           if (edgesInfo.next !== null) {
+               continue; // skip
+           }
            edges = edgesInfo.edges;
            var edgesLastX = edges[edges.length - 2];
            var edgesLastY = edges[edges.length - 1];
+           // self loop check
+           if ((edgesLastX === edges[0]) && (edgesLastY === edges[1])) {
+               edgesInfo.next = edgesInfo.prev = i;
+               continue;
+           }
            for (i2 = 0; i2 < l ; i2++) {
-               if (edgesInfo.prev !== null) {
-                   continue; // skip
+               var targetEdgesIngo = edgesInfoList[i2];
+               if (targetEdgesInfo.prev !== null) {
+                   continue;
                }
-               var targetEdge = edgesInfoList[i2].edges;
-               if ((edgesLastX === edges[0]) &&
-                   (edgesLastY === edges[1])){
+               var targetEdges = targetEdgesInfo.edges;
+               if ((edgesLastX === targetEdges[0]) &&
+                   (edgesLastY === targetEdges[1])){
                    edgesInfo.next = i2;
-                   edgesInfoList[i2].prev = i;
+                   targetEdgesInfo.prev = i;
                    break;
                }
            }