2 updates.
[chise/kage.git] / polygons.js
1 function Polygons(){\r
2   // method\r
3         function clear(){ // void\r
4     this.array = new Array();\r
5   }\r
6   Polygons.prototype.clear = clear;\r
7         \r
8   function push(polygon){ // void\r
9     // only a simple check\r
10     var minx = 200;\r
11     var maxx = 0;\r
12     var miny = 200;\r
13     var maxy = 0;\r
14     var error = 0;\r
15     for(var i = 0; i < polygon.array.length; i++){\r
16       if(polygon.array[i].x < minx){\r
17         minx = polygon.array[i].x;\r
18       }\r
19       if(polygon.array[i].x > maxx){\r
20         maxx = polygon.array[i].x;\r
21       }\r
22       if(polygon.array[i].y < miny){\r
23         miny = polygon.array[i].y;\r
24       }\r
25       if(polygon.array[i].y > maxy){\r
26         maxy = polygon.array[i].y;\r
27       }\r
28       if(isNaN(polygon.array[i].x) || isNaN(polygon.array[i].y)){\r
29         error++;\r
30       }\r
31     }\r
32     if(error == 0 && minx != maxx && miny != maxy && polygon.array.length >= 3){\r
33       var newArray = new Array();\r
34       newArray.push(polygon.array.shift());\r
35       while(polygon.array.length != 0){\r
36         var temp = polygon.array.shift();\r
37         //if(newArray[newArray.length - 1].x != temp.x ||\r
38         //   newArray[newArray.length - 1].y != temp.y){\r
39           newArray.push(temp);\r
40         //}\r
41       }\r
42       if(newArray.length >= 3){\r
43         polygon.array = newArray;\r
44         this.array.push(polygon);\r
45       }\r
46     }\r
47   }\r
48   Polygons.prototype.push = push;\r
49   \r
50   function generateSVG(curve){ // string\r
51     var buffer = "";\r
52     buffer += "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" baseProfile=\"full\" viewBox=\"0 0 200 200\" width=\"200\" height=\"200\">\n";\r
53     if(curve){\r
54       for(var i = 0; i < this.array.length; i++){\r
55         var mode = "L";\r
56         buffer += "<path d=\"M ";\r
57         buffer += this.array[i].array[0].x + "," + this.array[i].array[0].y + " ";\r
58         for(var j = 1; j < this.array[i].array.length; j++){\r
59           if(this.array[i].array[j].off == 1){\r
60             buffer += "Q ";\r
61             mode = "Q";\r
62           } else if(mode == "Q" && this.array[i].array[j - 1].off != 1){\r
63             buffer += "L ";\r
64           } else if(mode == "L" && j == 1){\r
65             buffer += "L ";\r
66           }\r
67           buffer += this.array[i].array[j].x + "," + this.array[i].array[j].y + " ";\r
68         }\r
69         buffer += "Z\" fill=\"black\" />\n";\r
70       }\r
71       buffer += "</svg>\n";\r
72     } else {\r
73       buffer += "<g fill=\"black\">\n";\r
74       for(var i = 0; i < this.array.length; i++){\r
75         buffer += "<polygon points=\"";\r
76         for(var j = 0; j < this.array[i].array.length; j++){\r
77           buffer += this.array[i].array[j].x + "," + this.array[i].array[j].y + " ";\r
78         }\r
79         buffer += "\" />\n";\r
80       }\r
81       buffer += "</g>\n";\r
82       buffer += "</svg>\n";\r
83     }\r
84     return buffer;\r
85   }\r
86   Polygons.prototype.generateSVG = generateSVG;\r
87   \r
88   function generateEPS(){ // string\r
89     var buffer = "";\r
90     buffer += "%!PS-Adobe-3.0 EPSF-3.0\n";\r
91     buffer += "%%BoundingBox: 0 -208 1024 816\n";\r
92     buffer += "%%Pages: 0\n";\r
93     buffer += "%%Title: Kanji glyph\n";\r
94     buffer += "%%Creator: GlyphWiki powered by KAGE system\n";\r
95     buffer += "%%CreationDate: " + new Date() + "\n";\r
96     buffer += "%%EndComments\n";\r
97     buffer += "%%EndProlog\n";\r
98     \r
99     for(var i = 0; i < this.array.length; i++){\r
100       for(var j = 0; j < this.array[i].array.length; j++){\r
101         buffer += (this.array[i].array[j].x * 5) + " " + (1000 - this.array[i].array[j].y * 5 - 200) + " ";\r
102         if(j == 0){\r
103           buffer += "newpath\nmoveto\n";\r
104         } else {\r
105           buffer += "lineto\n";\r
106         }\r
107       }\r
108       buffer += "closepath\nfill\n";\r
109     }\r
110     buffer += "%%EOF\n";\r
111     return buffer;\r
112   }\r
113   Polygons.prototype.generateEPS = generateEPS;\r
114   \r
115   // property\r
116   this.array = new Array();\r
117   \r
118   return this;\r
119 }\r