geomerative 1.1.0-java → 2.0.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.mvn/extensions.xml +1 -1
- data/.mvn/wrapper/maven-wrapper.properties +1 -1
- data/CHANGELOG.md +3 -0
- data/COPYING.md +1 -1
- data/README.md +0 -1
- data/Rakefile +2 -15
- data/docs/_includes/header.html +6 -6
- data/docs/_includes/icon-github.svg +3 -1
- data/docs/_includes/icon-twitter.svg +3 -1
- data/docs/_includes/navigation.html +18 -18
- data/docs/_sass/_base.scss +79 -79
- data/docs/_sass/_layout.scss +137 -137
- data/docs/_sass/_syntax-highlighting.scss +64 -64
- data/docs/index.html +18 -18
- data/examples/data/bot1.svg +1 -1
- data/examples/data/lion.svg +156 -156
- data/examples/data/ruby.svg +1 -1
- data/geomerative.gemspec +1 -2
- data/lib/geomerative/version.rb +1 -1
- data/mvnw +234 -0
- data/mvnw.cmd +145 -0
- data/pom.rb +14 -13
- data/pom.xml +14 -13
- data/src/geomerative/FastRClip.java +2149 -2156
- data/src/geomerative/RClip.java +2237 -2539
- data/src/geomerative/RClosest.java +33 -31
- data/src/geomerative/RCommand.java +1750 -1758
- data/src/geomerative/RContour.java +290 -292
- data/src/geomerative/RFont.java +277 -246
- data/src/geomerative/RG.java +722 -727
- data/src/geomerative/RGeomElem.java +967 -960
- data/src/geomerative/RGroup.java +508 -467
- data/src/geomerative/RMatrix.java +304 -289
- data/src/geomerative/RMesh.java +241 -229
- data/src/geomerative/RPath.java +924 -925
- data/src/geomerative/RPoint.java +391 -391
- data/src/geomerative/RPolygon.java +998 -988
- data/src/geomerative/RRectangle.java +43 -52
- data/src/geomerative/RSVG.java +480 -516
- data/src/geomerative/RShape.java +1767 -1777
- data/src/geomerative/RStrip.java +173 -176
- data/src/geomerative/RStyle.java +197 -194
- data/src/org/apache/batik/svggen/font/Font.java +141 -142
- data/src/org/apache/batik/svggen/font/Glyph.java +102 -71
- data/src/org/apache/batik/svggen/font/Point.java +12 -12
- data/src/org/apache/batik/svggen/font/RandomAccessFileEmulator.java +14 -12
- data/src/org/apache/batik/svggen/font/table/ClassDef.java +12 -12
- data/src/org/apache/batik/svggen/font/table/ClassDefFormat1.java +27 -24
- data/src/org/apache/batik/svggen/font/table/ClassDefFormat2.java +20 -17
- data/src/org/apache/batik/svggen/font/table/CmapFormat.java +43 -43
- data/src/org/apache/batik/svggen/font/table/CmapFormat0.java +33 -26
- data/src/org/apache/batik/svggen/font/table/CmapFormat2.java +25 -20
- data/src/org/apache/batik/svggen/font/table/CmapFormat4.java +106 -96
- data/src/org/apache/batik/svggen/font/table/CmapFormat6.java +36 -32
- data/src/org/apache/batik/svggen/font/table/CmapIndexEntry.java +69 -49
- data/src/org/apache/batik/svggen/font/table/CmapTable.java +50 -50
- data/src/org/apache/batik/svggen/font/table/Coverage.java +19 -19
- data/src/org/apache/batik/svggen/font/table/CoverageFormat1.java +30 -27
- data/src/org/apache/batik/svggen/font/table/CoverageFormat2.java +26 -24
- data/src/org/apache/batik/svggen/font/table/CvtTable.java +16 -16
- data/src/org/apache/batik/svggen/font/table/Device.java +32 -32
- data/src/org/apache/batik/svggen/font/table/DirectoryEntry.java +39 -39
- data/src/org/apache/batik/svggen/font/table/Feature.java +26 -23
- data/src/org/apache/batik/svggen/font/table/FeatureList.java +37 -35
- data/src/org/apache/batik/svggen/font/table/FeatureRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/FeatureTags.java +4 -3
- data/src/org/apache/batik/svggen/font/table/FpgmTable.java +9 -9
- data/src/org/apache/batik/svggen/font/table/GlyfCompositeComp.java +134 -132
- data/src/org/apache/batik/svggen/font/table/GlyfCompositeDescript.java +123 -122
- data/src/org/apache/batik/svggen/font/table/GlyfDescript.java +44 -44
- data/src/org/apache/batik/svggen/font/table/GlyfSimpleDescript.java +110 -109
- data/src/org/apache/batik/svggen/font/table/GlyfTable.java +46 -46
- data/src/org/apache/batik/svggen/font/table/GlyphDescription.java +25 -13
- data/src/org/apache/batik/svggen/font/table/GposTable.java +26 -23
- data/src/org/apache/batik/svggen/font/table/GsubTable.java +85 -82
- data/src/org/apache/batik/svggen/font/table/HeadTable.java +131 -131
- data/src/org/apache/batik/svggen/font/table/HheaTable.java +80 -80
- data/src/org/apache/batik/svggen/font/table/HmtxTable.java +50 -49
- data/src/org/apache/batik/svggen/font/table/KernSubtable.java +29 -27
- data/src/org/apache/batik/svggen/font/table/KernSubtableFormat0.java +35 -32
- data/src/org/apache/batik/svggen/font/table/KernSubtableFormat2.java +28 -26
- data/src/org/apache/batik/svggen/font/table/KernTable.java +36 -31
- data/src/org/apache/batik/svggen/font/table/KerningPair.java +27 -23
- data/src/org/apache/batik/svggen/font/table/LangSys.java +28 -26
- data/src/org/apache/batik/svggen/font/table/LangSysRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/Ligature.java +24 -24
- data/src/org/apache/batik/svggen/font/table/LigatureSet.java +24 -24
- data/src/org/apache/batik/svggen/font/table/LigatureSubst.java +9 -9
- data/src/org/apache/batik/svggen/font/table/LigatureSubstFormat1.java +30 -30
- data/src/org/apache/batik/svggen/font/table/LocaTable.java +37 -37
- data/src/org/apache/batik/svggen/font/table/Lookup.java +41 -40
- data/src/org/apache/batik/svggen/font/table/LookupList.java +34 -34
- data/src/org/apache/batik/svggen/font/table/LookupSubtableFactory.java +7 -5
- data/src/org/apache/batik/svggen/font/table/MaxpTable.java +96 -96
- data/src/org/apache/batik/svggen/font/table/NameRecord.java +64 -65
- data/src/org/apache/batik/svggen/font/table/NameTable.java +33 -33
- data/src/org/apache/batik/svggen/font/table/Os2Table.java +196 -196
- data/src/org/apache/batik/svggen/font/table/Panose.java +14 -12
- data/src/org/apache/batik/svggen/font/table/PostTable.java +338 -338
- data/src/org/apache/batik/svggen/font/table/PrepTable.java +9 -9
- data/src/org/apache/batik/svggen/font/table/Program.java +15 -15
- data/src/org/apache/batik/svggen/font/table/RangeRecord.java +26 -25
- data/src/org/apache/batik/svggen/font/table/Script.java +38 -38
- data/src/org/apache/batik/svggen/font/table/ScriptList.java +42 -42
- data/src/org/apache/batik/svggen/font/table/ScriptRecord.java +22 -22
- data/src/org/apache/batik/svggen/font/table/ScriptTags.java +2 -1
- data/src/org/apache/batik/svggen/font/table/SingleSubst.java +15 -16
- data/src/org/apache/batik/svggen/font/table/SingleSubstFormat1.java +33 -33
- data/src/org/apache/batik/svggen/font/table/SingleSubstFormat2.java +32 -32
- data/src/org/apache/batik/svggen/font/table/Table.java +171 -170
- data/src/org/apache/batik/svggen/font/table/TableDirectory.java +55 -55
- data/src/org/apache/batik/svggen/font/table/TableFactory.java +92 -93
- metadata +10 -11
- data/.travis.yml +0 -9
|
@@ -1,91 +1,82 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
2
|
+
* Copyright 2004-2008 Ricard Marxer <email@ricardmarxer.com>
|
|
3
|
+
*
|
|
4
|
+
* This file is part of Geomerative.
|
|
5
|
+
*
|
|
6
|
+
* Geomerative is free software: you can redistribute it and/or modify it under
|
|
7
|
+
* the terms of the GNU General Public License as published by the Free Software
|
|
8
|
+
* Foundation, either version 3 of the License, or (at your option) any later
|
|
9
|
+
* version.
|
|
10
|
+
*
|
|
11
|
+
* Geomerative is distributed in the hope that it will be useful, but WITHOUT
|
|
12
|
+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
13
|
+
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
14
|
+
* details.
|
|
15
|
+
*
|
|
16
|
+
* You should have received a copy of the GNU General Public License along with
|
|
17
|
+
* Geomerative. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
*/
|
|
19
|
+
package geomerative;
|
|
3
20
|
|
|
4
|
-
|
|
21
|
+
public class RRectangle {
|
|
5
22
|
|
|
6
|
-
Geomerative is free software: you can redistribute it and/or modify
|
|
7
|
-
it under the terms of the GNU General Public License as published by
|
|
8
|
-
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
-
(at your option) any later version.
|
|
10
|
-
|
|
11
|
-
Geomerative is distributed in the hope that it will be useful,
|
|
12
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
GNU General Public License for more details.
|
|
15
|
-
|
|
16
|
-
You should have received a copy of the GNU General Public License
|
|
17
|
-
along with Geomerative. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
package geomerative ;
|
|
21
|
-
|
|
22
|
-
public class RRectangle
|
|
23
|
-
{
|
|
24
23
|
RPoint topLeft;
|
|
25
24
|
RPoint bottomRight;
|
|
26
|
-
|
|
27
|
-
public RRectangle()
|
|
28
|
-
{
|
|
25
|
+
|
|
26
|
+
public RRectangle() {
|
|
29
27
|
topLeft = new RPoint();
|
|
30
28
|
bottomRight = new RPoint();
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
public RRectangle(float x,float y,float w,float h)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
|
|
31
|
+
public RRectangle(float x, float y, float w, float h) {
|
|
32
|
+
topLeft = new RPoint(x, y);
|
|
33
|
+
bottomRight = new RPoint(x + w, y + h);
|
|
34
|
+
|
|
38
35
|
}
|
|
39
|
-
|
|
40
|
-
public RRectangle(RPoint _topLeft,RPoint _bottomRight)
|
|
41
|
-
{
|
|
36
|
+
|
|
37
|
+
public RRectangle(RPoint _topLeft, RPoint _bottomRight) {
|
|
42
38
|
this.topLeft = _topLeft;
|
|
43
39
|
this.bottomRight = _bottomRight;
|
|
44
|
-
}
|
|
40
|
+
}
|
|
45
41
|
|
|
46
42
|
RPoint[] getPoints() {
|
|
47
43
|
RPoint[] ps = new RPoint[4];
|
|
48
44
|
|
|
49
45
|
ps[0] = new RPoint(topLeft);
|
|
50
|
-
|
|
46
|
+
|
|
51
47
|
ps[1] = new RPoint(topLeft);
|
|
52
48
|
ps[1].x = bottomRight.x;
|
|
53
|
-
|
|
49
|
+
|
|
54
50
|
ps[2] = new RPoint(bottomRight);
|
|
55
|
-
|
|
51
|
+
|
|
56
52
|
ps[3] = new RPoint(bottomRight);
|
|
57
53
|
ps[3].x = topLeft.x;
|
|
58
|
-
|
|
54
|
+
|
|
59
55
|
return ps;
|
|
60
56
|
}
|
|
61
|
-
|
|
62
|
-
float getMaxX()
|
|
63
|
-
{
|
|
57
|
+
|
|
58
|
+
float getMaxX() {
|
|
64
59
|
//return (topLeft.x > bottomRight.x) ? topLeft.x : bottomRight.x;
|
|
65
60
|
return bottomRight.x;
|
|
66
61
|
}
|
|
67
|
-
|
|
68
|
-
float getMaxY()
|
|
69
|
-
{
|
|
62
|
+
|
|
63
|
+
float getMaxY() {
|
|
70
64
|
//return (topLeft.y > bottomRight.y) ? topLeft.y : bottomRight.y;
|
|
71
65
|
return bottomRight.y;
|
|
72
66
|
}
|
|
73
|
-
|
|
74
|
-
float getMinX()
|
|
75
|
-
{
|
|
67
|
+
|
|
68
|
+
float getMinX() {
|
|
76
69
|
//return (topLeft.x < bottomRight.x) ? topLeft.x : bottomRight.x;
|
|
77
70
|
return topLeft.x;
|
|
78
71
|
}
|
|
79
|
-
|
|
80
|
-
float getMinY()
|
|
81
|
-
{
|
|
72
|
+
|
|
73
|
+
float getMinY() {
|
|
82
74
|
//return (topLeft.y < bottomRight.y) ? topLeft.y : bottomRight.y;
|
|
83
75
|
return topLeft.y;
|
|
84
76
|
}
|
|
85
|
-
|
|
77
|
+
|
|
86
78
|
@Override
|
|
87
|
-
public String toString()
|
|
88
|
-
{
|
|
79
|
+
public String toString() {
|
|
89
80
|
return "";
|
|
90
81
|
}
|
|
91
82
|
}
|
data/src/geomerative/RSVG.java
CHANGED
|
@@ -1,47 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
|
|
2
|
+
* Copyright 2004-2008 Ricard Marxer <email@ricardmarxer.com>
|
|
3
|
+
*
|
|
4
|
+
* This file is part of Geomerative.
|
|
5
|
+
*
|
|
6
|
+
* Geomerative is free software: you can redistribute it and/or modify it under
|
|
7
|
+
* the terms of the GNU General Public License as published by the Free Software
|
|
8
|
+
* Foundation, either version 3 of the License, or (at your option) any later
|
|
9
|
+
* version.
|
|
10
|
+
*
|
|
11
|
+
* Geomerative is distributed in the hope that it will be useful, but WITHOUT
|
|
12
|
+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
13
|
+
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
14
|
+
* details.
|
|
15
|
+
*
|
|
16
|
+
* You should have received a copy of the GNU General Public License along with
|
|
17
|
+
* Geomerative. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
+
*/
|
|
20
19
|
package geomerative;
|
|
21
20
|
|
|
22
|
-
|
|
23
21
|
import processing.core.PApplet;
|
|
24
22
|
import processing.core.PConstants;
|
|
25
23
|
import processing.core.PGraphics;
|
|
26
24
|
import processing.data.XML;
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
|
-
|
|
27
|
+
|
|
30
28
|
*/
|
|
31
|
-
public class RSVG
|
|
32
|
-
|
|
33
|
-
public void draw(String filename, PGraphics g)
|
|
34
|
-
{
|
|
29
|
+
public class RSVG {
|
|
30
|
+
|
|
31
|
+
public void draw(String filename, PGraphics g) {
|
|
35
32
|
this.toGroup(filename).draw(g);
|
|
36
33
|
}
|
|
37
34
|
|
|
38
|
-
public void draw(String filename, PApplet p)
|
|
39
|
-
{
|
|
35
|
+
public void draw(String filename, PApplet p) {
|
|
40
36
|
this.toGroup(filename).draw(p);
|
|
41
37
|
}
|
|
42
38
|
|
|
43
|
-
public void draw(String filename)
|
|
44
|
-
{
|
|
39
|
+
public void draw(String filename) {
|
|
45
40
|
this.toGroup(filename).draw();
|
|
46
41
|
}
|
|
47
42
|
|
|
@@ -69,24 +64,22 @@ public class RSVG
|
|
|
69
64
|
return header + groupToString(group) + "</svg>";
|
|
70
65
|
}
|
|
71
66
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
public RGroup toGroup(String filename)
|
|
75
|
-
{
|
|
67
|
+
public RGroup toGroup(String filename) {
|
|
76
68
|
XML svg;
|
|
77
69
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
70
|
+
svg = RG.parent().loadXML(filename);
|
|
71
|
+
|
|
72
|
+
if (svg == null) {
|
|
73
|
+
return new RGroup();
|
|
74
|
+
}
|
|
75
|
+
|
|
83
76
|
if (!svg.getName().equals("svg")) {
|
|
84
77
|
throw new RuntimeException("root is not <svg>, it's <" + svg.getName() + ">");
|
|
85
78
|
}
|
|
86
79
|
|
|
87
80
|
return elemToGroup(svg);
|
|
88
81
|
}
|
|
89
|
-
|
|
82
|
+
|
|
90
83
|
public float unitsToPixels(String units, float originalPxSize) {
|
|
91
84
|
// TODO: check if it is possible to know the dpi of a given PGraphics or device
|
|
92
85
|
return unitsToPixels(units, originalPxSize, 72.0f/*Toolkit.getDefaultToolkit().getScreenResolution()*/);
|
|
@@ -128,20 +121,19 @@ public class RSVG
|
|
|
128
121
|
multiplier = 1.0f;
|
|
129
122
|
}
|
|
130
123
|
|
|
131
|
-
return Float.parseFloat(units.substring(0, units.length()-chars)) * multiplier;
|
|
124
|
+
return Float.parseFloat(units.substring(0, units.length() - chars)) * multiplier;
|
|
132
125
|
}
|
|
133
126
|
|
|
134
|
-
public RShape toShape(String filename)
|
|
135
|
-
|
|
136
|
-
XML svg;
|
|
127
|
+
public RShape toShape(String filename) {
|
|
128
|
+
XML svg;
|
|
137
129
|
|
|
138
|
-
|
|
130
|
+
svg = RG.parent().loadXML(filename);
|
|
139
131
|
|
|
140
|
-
|
|
141
|
-
|
|
132
|
+
if (svg == null) {
|
|
133
|
+
return new RShape();
|
|
134
|
+
}
|
|
142
135
|
|
|
143
|
-
if (
|
|
144
|
-
{
|
|
136
|
+
if (!svg.getName().equals("svg")) {
|
|
145
137
|
throw new RuntimeException("root is not <svg>, it's <" + svg.getName() + ">");
|
|
146
138
|
}
|
|
147
139
|
|
|
@@ -153,24 +145,22 @@ public class RSVG
|
|
|
153
145
|
if (svg.hasAttribute("width") && svg.hasAttribute("height")) {
|
|
154
146
|
String widthStr = svg.getString("width").trim();
|
|
155
147
|
String heightStr = svg.getString("height").trim();
|
|
156
|
-
|
|
148
|
+
|
|
157
149
|
result.width = unitsToPixels(widthStr, result.origWidth);
|
|
158
150
|
result.height = unitsToPixels(heightStr, result.origHeight);
|
|
159
151
|
} else {
|
|
160
152
|
result.width = result.origWidth;
|
|
161
153
|
result.height = result.origHeight;
|
|
162
154
|
}
|
|
163
|
-
|
|
155
|
+
|
|
164
156
|
return result;
|
|
165
157
|
}
|
|
166
158
|
|
|
167
|
-
public RPolygon toPolygon(String filename)
|
|
168
|
-
{
|
|
159
|
+
public RPolygon toPolygon(String filename) {
|
|
169
160
|
return toGroup(filename).toPolygon();
|
|
170
161
|
}
|
|
171
162
|
|
|
172
|
-
public RMesh toMesh(String filename)
|
|
173
|
-
{
|
|
163
|
+
public RMesh toMesh(String filename) {
|
|
174
164
|
return toGroup(filename).toMesh();
|
|
175
165
|
}
|
|
176
166
|
|
|
@@ -180,19 +170,19 @@ public class RSVG
|
|
|
180
170
|
result += styleToString(grp.getStyle());
|
|
181
171
|
result += ">\n";
|
|
182
172
|
|
|
183
|
-
for(int i=0;i<grp.countElements();i++) {
|
|
184
|
-
switch(grp.elements[i].getType()){
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
173
|
+
for (int i = 0; i < grp.countElements(); i++) {
|
|
174
|
+
switch (grp.elements[i].getType()) {
|
|
175
|
+
case RGeomElem.GROUP:
|
|
176
|
+
result += groupToString((RGroup) grp.elements[i]);
|
|
177
|
+
break;
|
|
188
178
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
179
|
+
case RGeomElem.POLYGON:
|
|
180
|
+
result += polygonToString((RPolygon) grp.elements[i]);
|
|
181
|
+
break;
|
|
192
182
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
183
|
+
case RGeomElem.SHAPE:
|
|
184
|
+
result += shapeToString((RShape) grp.elements[i]);
|
|
185
|
+
break;
|
|
196
186
|
|
|
197
187
|
}
|
|
198
188
|
}
|
|
@@ -219,10 +209,10 @@ public class RSVG
|
|
|
219
209
|
result += "<path ";
|
|
220
210
|
result += "d=\"";
|
|
221
211
|
|
|
222
|
-
for(int i=0; i<shp.countPaths(); i++) {
|
|
212
|
+
for (int i = 0; i < shp.countPaths(); i++) {
|
|
223
213
|
RPath sushp = shp.paths[i];
|
|
224
214
|
boolean init = true;
|
|
225
|
-
for (
|
|
215
|
+
for (int j = 0; j < sushp.countCommands(); j++) {
|
|
226
216
|
RCommand cmd = sushp.commands[j];
|
|
227
217
|
|
|
228
218
|
if (init) {
|
|
@@ -230,8 +220,7 @@ public class RSVG
|
|
|
230
220
|
init = false;
|
|
231
221
|
}
|
|
232
222
|
|
|
233
|
-
switch(
|
|
234
|
-
{
|
|
223
|
+
switch (cmd.getCommandType()) {
|
|
235
224
|
case RCommand.LINETO:
|
|
236
225
|
result += "L" + cmd.endPoint.x + " " + cmd.endPoint.y + " ";
|
|
237
226
|
break;
|
|
@@ -243,7 +232,7 @@ public class RSVG
|
|
|
243
232
|
case RCommand.CUBICBEZIERTO:
|
|
244
233
|
result += "C" + cmd.controlPoints[0].x + " " + cmd.controlPoints[0].y + " " + cmd.controlPoints[1].x + " " + cmd.controlPoints[1].y + " " + cmd.endPoint.x + " " + cmd.endPoint.y + " ";
|
|
245
234
|
break;
|
|
246
|
-
|
|
235
|
+
}
|
|
247
236
|
}
|
|
248
237
|
|
|
249
238
|
if (sushp.closed) {
|
|
@@ -254,8 +243,8 @@ public class RSVG
|
|
|
254
243
|
result += "\"/>\n";
|
|
255
244
|
}
|
|
256
245
|
|
|
257
|
-
for (int i=0; i<shp.countChildren(); i++) {
|
|
258
|
-
result+=shapeToString(shp.children[i]);
|
|
246
|
+
for (int i = 0; i < shp.countChildren(); i++) {
|
|
247
|
+
result += shapeToString(shp.children[i]);
|
|
259
248
|
}
|
|
260
249
|
|
|
261
250
|
result += "</g>\n";
|
|
@@ -274,7 +263,7 @@ public class RSVG
|
|
|
274
263
|
}
|
|
275
264
|
|
|
276
265
|
if (style.fillAlphaDef) {
|
|
277
|
-
result += "fill-opacity:" + style.fillAlpha/255.0f + ";";
|
|
266
|
+
result += "fill-opacity:" + style.fillAlpha / 255.0f + ";";
|
|
278
267
|
}
|
|
279
268
|
|
|
280
269
|
if (style.strokeDef) {
|
|
@@ -286,51 +275,50 @@ public class RSVG
|
|
|
286
275
|
}
|
|
287
276
|
|
|
288
277
|
if (style.strokeAlphaDef) {
|
|
289
|
-
result += "stroke-opacity:" + style.strokeAlpha/255.0f + ";";
|
|
278
|
+
result += "stroke-opacity:" + style.strokeAlpha / 255.0f + ";";
|
|
290
279
|
}
|
|
291
280
|
|
|
292
281
|
if (style.strokeWeightDef) {
|
|
293
282
|
result += "stroke-width:" + style.strokeWeight + ";";
|
|
294
283
|
}
|
|
295
284
|
|
|
296
|
-
|
|
297
|
-
if(style.strokeCapDef) {
|
|
285
|
+
if (style.strokeCapDef) {
|
|
298
286
|
result += "stroke-linecap:";
|
|
299
287
|
|
|
300
288
|
switch (style.strokeCap) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
289
|
+
case PConstants.PROJECT:
|
|
290
|
+
result += "butt";
|
|
291
|
+
break;
|
|
292
|
+
case PConstants.ROUND:
|
|
293
|
+
result += "round";
|
|
294
|
+
break;
|
|
295
|
+
case PConstants.SQUARE:
|
|
296
|
+
result += "square";
|
|
297
|
+
break;
|
|
298
|
+
|
|
299
|
+
default:
|
|
300
|
+
break;
|
|
313
301
|
}
|
|
314
302
|
|
|
315
303
|
result += ";";
|
|
316
304
|
}
|
|
317
305
|
|
|
318
|
-
if(style.strokeJoinDef) {
|
|
306
|
+
if (style.strokeJoinDef) {
|
|
319
307
|
result += "stroke-linejoin:";
|
|
320
308
|
|
|
321
309
|
switch (style.strokeJoin) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
310
|
+
case PConstants.MITER:
|
|
311
|
+
result += "miter";
|
|
312
|
+
break;
|
|
313
|
+
case PConstants.ROUND:
|
|
314
|
+
result += "round";
|
|
315
|
+
break;
|
|
316
|
+
case PConstants.BEVEL:
|
|
317
|
+
result += "bevel";
|
|
318
|
+
break;
|
|
319
|
+
|
|
320
|
+
default:
|
|
321
|
+
break;
|
|
334
322
|
}
|
|
335
323
|
|
|
336
324
|
result += ";";
|
|
@@ -341,16 +329,15 @@ public class RSVG
|
|
|
341
329
|
}
|
|
342
330
|
|
|
343
331
|
/**
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
*
|
|
332
|
+
* @param elem
|
|
333
|
+
* @return
|
|
334
|
+
*
|
|
347
335
|
*/
|
|
348
|
-
public RGroup elemToGroup(XML elem)
|
|
349
|
-
{
|
|
336
|
+
public RGroup elemToGroup(XML elem) {
|
|
350
337
|
RGroup grp = new RGroup();
|
|
351
338
|
|
|
352
339
|
// Set the defaults SVG styles for the root
|
|
353
|
-
if(elem.getName().toLowerCase().equals("svg")){
|
|
340
|
+
if (elem.getName().toLowerCase().equals("svg")) {
|
|
354
341
|
grp.setFill(0); // By default in SVG it's black
|
|
355
342
|
grp.setFillAlpha(255); // By default in SVG it's 1
|
|
356
343
|
grp.setStroke(false); // By default in SVG it's none
|
|
@@ -362,106 +349,106 @@ public class RSVG
|
|
|
362
349
|
}
|
|
363
350
|
|
|
364
351
|
XML elems[] = elem.getChildren();
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
352
|
+
for (XML elem1 : elems) {
|
|
353
|
+
String name = elem1.getName().toLowerCase();
|
|
354
|
+
XML element = elem1;
|
|
355
|
+
// Parse and create the geometrical element
|
|
356
|
+
RGeomElem geomElem = null;
|
|
357
|
+
switch (name) {
|
|
358
|
+
case "g":
|
|
359
|
+
geomElem = elemToGroup(element);
|
|
360
|
+
break;
|
|
361
|
+
case "path":
|
|
362
|
+
geomElem = elemToShape(element);
|
|
363
|
+
break;
|
|
364
|
+
case "polygon":
|
|
365
|
+
geomElem = elemToPolygon(element);
|
|
366
|
+
break;
|
|
367
|
+
case "polyline":
|
|
368
|
+
geomElem = elemToPolyline(element);
|
|
369
|
+
break;
|
|
370
|
+
case "circle":
|
|
371
|
+
geomElem = elemToCircle(element);
|
|
372
|
+
break;
|
|
373
|
+
case "ellipse":
|
|
374
|
+
geomElem = elemToEllipse(element);
|
|
375
|
+
break;
|
|
376
|
+
case "rect":
|
|
377
|
+
geomElem = elemToRect(element);
|
|
378
|
+
break;
|
|
379
|
+
case "line":
|
|
380
|
+
geomElem = elemToLine(element);
|
|
381
|
+
break;
|
|
382
|
+
case "defs":
|
|
383
|
+
break;
|
|
384
|
+
case "#text":
|
|
385
|
+
break;
|
|
386
|
+
default:
|
|
387
|
+
PApplet.println("Element '" + name + "' not know. Ignoring it.");
|
|
388
|
+
break; // If the geometrical element has been correctly created
|
|
402
389
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
if(element.hasAttribute("opacity")){
|
|
390
|
+
if ((geomElem != null)) {
|
|
391
|
+
// Transform geometrical element
|
|
392
|
+
if (element.hasAttribute("transform")) {
|
|
393
|
+
String transformString = element.getString("transform");
|
|
394
|
+
RMatrix transf = new RMatrix(transformString);
|
|
395
|
+
geomElem.transform(transf);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// Get the id for the geometrical element
|
|
399
|
+
if (element.hasAttribute("id")) {
|
|
400
|
+
geomElem.name = element.getString("id");
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Get the style for the geometrical element
|
|
404
|
+
if (element.hasAttribute("style")) {
|
|
405
|
+
geomElem.setStyle(element.getString("style"));
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Get the fill for the geometrical element
|
|
409
|
+
if (element.hasAttribute("fill")) {
|
|
410
|
+
geomElem.setFill(element.getString("fill"));
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Get the fill-linejoin for the geometrical element
|
|
414
|
+
if (element.hasAttribute("fill-opacity")) {
|
|
415
|
+
geomElem.setFillAlpha(element.getString("fill-opacity"));
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// Get the stroke for the geometrical element
|
|
419
|
+
if (element.hasAttribute("stroke")) {
|
|
420
|
+
geomElem.setStroke(element.getString("stroke"));
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// Get the stroke-width for the geometrical element
|
|
424
|
+
if (element.hasAttribute("stroke-width")) {
|
|
425
|
+
geomElem.setStrokeWeight(element.getString("stroke-width"));
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// Get the stroke-linecap for the geometrical element
|
|
429
|
+
if (element.hasAttribute("stroke-linecap")) {
|
|
430
|
+
geomElem.setStrokeCap(element.getString("stroke-linecap"));
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// Get the stroke-linejoin for the geometrical element
|
|
434
|
+
if (element.hasAttribute("stroke-linejoin")) {
|
|
435
|
+
geomElem.setStrokeJoin(element.getString("stroke-linejoin"));
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Get the stroke-linejoin for the geometrical element
|
|
439
|
+
if (element.hasAttribute("stroke-opacity")) {
|
|
440
|
+
geomElem.setStrokeAlpha(element.getString("stroke-opacity"));
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// Get the opacity for the geometrical element
|
|
444
|
+
if (element.hasAttribute("opacity")) {
|
|
458
445
|
geomElem.setAlpha(element.getString("opacity"));
|
|
459
446
|
}
|
|
460
447
|
|
|
461
448
|
// Get the style for the geometrical element
|
|
462
449
|
grp.addElement(geomElem);
|
|
463
450
|
}
|
|
464
|
-
|
|
451
|
+
}
|
|
465
452
|
|
|
466
453
|
// Set the original width and height
|
|
467
454
|
grp.updateOrigParams();
|
|
@@ -470,17 +457,15 @@ public class RSVG
|
|
|
470
457
|
}
|
|
471
458
|
|
|
472
459
|
/**
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
*
|
|
460
|
+
* @param elem
|
|
461
|
+
* @return
|
|
462
|
+
*
|
|
476
463
|
*/
|
|
477
|
-
public RShape elemToCompositeShape(
|
|
478
|
-
{
|
|
464
|
+
public RShape elemToCompositeShape(XML elem) {
|
|
479
465
|
RShape shp = new RShape();
|
|
480
466
|
|
|
481
467
|
// Set the defaults SVG styles for the root
|
|
482
|
-
if (elem.getName().toLowerCase().equals("svg"))
|
|
483
|
-
{
|
|
468
|
+
if (elem.getName().toLowerCase().equals("svg")) {
|
|
484
469
|
shp.setFill(0); // By default in SVG it's black
|
|
485
470
|
shp.setFillAlpha(255); // By default in SVG it's 1
|
|
486
471
|
shp.setStroke(false); // By default in SVG it's none
|
|
@@ -493,108 +478,110 @@ public class RSVG
|
|
|
493
478
|
|
|
494
479
|
XML elems[] = elem.getChildren();
|
|
495
480
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
481
|
+
for (XML elem1 : elems) {
|
|
482
|
+
String name = elem1.getName();
|
|
483
|
+
if (name == null) {
|
|
484
|
+
continue;
|
|
485
|
+
}
|
|
486
|
+
name = name.toLowerCase();
|
|
487
|
+
XML element = elem1;
|
|
488
|
+
// Parse and create the geometrical element
|
|
489
|
+
RShape geomElem = null;
|
|
490
|
+
switch (name) {
|
|
491
|
+
case "g":
|
|
492
|
+
geomElem = elemToCompositeShape(element);
|
|
493
|
+
break;
|
|
494
|
+
case "path":
|
|
495
|
+
geomElem = elemToShape(element);
|
|
496
|
+
break;
|
|
497
|
+
case "polygon":
|
|
498
|
+
geomElem = elemToPolygon(element);
|
|
499
|
+
break;
|
|
500
|
+
case "polyline":
|
|
501
|
+
geomElem = elemToPolyline(element);
|
|
502
|
+
break;
|
|
503
|
+
case "circle":
|
|
504
|
+
geomElem = elemToCircle(element);
|
|
505
|
+
break;
|
|
506
|
+
case "ellipse":
|
|
507
|
+
geomElem = elemToEllipse(element);
|
|
508
|
+
break;
|
|
509
|
+
case "rect":
|
|
510
|
+
geomElem = elemToRect(element);
|
|
511
|
+
break;
|
|
512
|
+
case "line":
|
|
513
|
+
geomElem = elemToLine(element);
|
|
514
|
+
break;
|
|
515
|
+
case "#text":
|
|
516
|
+
break;
|
|
517
|
+
case "defs":
|
|
518
|
+
break;
|
|
519
|
+
default:
|
|
520
|
+
PApplet.println("Element '" + name + "' not know. Ignoring it.");
|
|
521
|
+
break; // If the geometrical element has been correctly created
|
|
522
|
+
}
|
|
523
|
+
if ((geomElem != null)) {
|
|
524
|
+
// Transform geometrical element
|
|
525
|
+
if (element.hasAttribute("transform")) {
|
|
526
|
+
String transformString = element.getString("transform");
|
|
527
|
+
RMatrix transf = new RMatrix(transformString);
|
|
528
|
+
geomElem.transform(transf);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// Get the id for the geometrical element
|
|
532
|
+
if (element.hasAttribute("id")) {
|
|
533
|
+
geomElem.name = element.getString("id");
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Get the style for the geometrical element
|
|
537
|
+
if (element.hasAttribute("style")) {
|
|
538
|
+
geomElem.setStyle(element.getString("style"));
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// Get the fill for the geometrical element
|
|
542
|
+
if (element.hasAttribute("fill")) {
|
|
543
|
+
geomElem.setFill(element.getString("fill"));
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// Get the fill-linejoin for the geometrical element
|
|
547
|
+
if (element.hasAttribute("fill-opacity")) {
|
|
548
|
+
geomElem.setFillAlpha(element.getString("fill-opacity"));
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// Get the stroke for the geometrical element
|
|
552
|
+
if (element.hasAttribute("stroke")) {
|
|
553
|
+
geomElem.setStroke(element.getString("stroke"));
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// Get the stroke-width for the geometrical element
|
|
557
|
+
if (element.hasAttribute("stroke-width")) {
|
|
558
|
+
geomElem.setStrokeWeight(element.getString("stroke-width"));
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
// Get the stroke-linecap for the geometrical element
|
|
562
|
+
if (element.hasAttribute("stroke-linecap")) {
|
|
563
|
+
geomElem.setStrokeCap(element.getString("stroke-linecap"));
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
// Get the stroke-linejoin for the geometrical element
|
|
567
|
+
if (element.hasAttribute("stroke-linejoin")) {
|
|
568
|
+
geomElem.setStrokeJoin(element.getString("stroke-linejoin"));
|
|
535
569
|
}
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
// Get the id for the geometrical element
|
|
545
|
-
if(element.hasAttribute("id")){
|
|
546
|
-
geomElem.name = element.getString("id");
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
// Get the style for the geometrical element
|
|
550
|
-
if(element.hasAttribute("style")){
|
|
551
|
-
geomElem.setStyle(element.getString("style"));
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
// Get the fill for the geometrical element
|
|
555
|
-
if(element.hasAttribute("fill")){
|
|
556
|
-
geomElem.setFill(element.getString("fill"));
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
// Get the fill-linejoin for the geometrical element
|
|
560
|
-
if(element.hasAttribute("fill-opacity")){
|
|
561
|
-
geomElem.setFillAlpha(element.getString("fill-opacity"));
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
// Get the stroke for the geometrical element
|
|
565
|
-
if(element.hasAttribute("stroke")){
|
|
566
|
-
geomElem.setStroke(element.getString("stroke"));
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// Get the stroke-width for the geometrical element
|
|
570
|
-
if(element.hasAttribute("stroke-width")){
|
|
571
|
-
geomElem.setStrokeWeight(element.getString("stroke-width"));
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
// Get the stroke-linecap for the geometrical element
|
|
575
|
-
if(element.hasAttribute("stroke-linecap")){
|
|
576
|
-
geomElem.setStrokeCap(element.getString("stroke-linecap"));
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
// Get the stroke-linejoin for the geometrical element
|
|
580
|
-
if(element.hasAttribute("stroke-linejoin")){
|
|
581
|
-
geomElem.setStrokeJoin(element.getString("stroke-linejoin"));
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
// Get the stroke-linejoin for the geometrical element
|
|
585
|
-
if(element.hasAttribute("stroke-opacity")){
|
|
586
|
-
geomElem.setStrokeAlpha(element.getString("stroke-opacity"));
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
// Get the opacity for the geometrical element
|
|
590
|
-
if(element.hasAttribute("opacity")){
|
|
570
|
+
|
|
571
|
+
// Get the stroke-linejoin for the geometrical element
|
|
572
|
+
if (element.hasAttribute("stroke-opacity")) {
|
|
573
|
+
geomElem.setStrokeAlpha(element.getString("stroke-opacity"));
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// Get the opacity for the geometrical element
|
|
577
|
+
if (element.hasAttribute("opacity")) {
|
|
591
578
|
geomElem.setAlpha(element.getString("opacity"));
|
|
592
579
|
}
|
|
593
580
|
|
|
594
581
|
// Get the style for the geometrical element
|
|
595
582
|
shp.addChild(geomElem);
|
|
596
583
|
}
|
|
597
|
-
|
|
584
|
+
}
|
|
598
585
|
|
|
599
586
|
shp.updateOrigParams();
|
|
600
587
|
|
|
@@ -602,12 +589,11 @@ public class RSVG
|
|
|
602
589
|
}
|
|
603
590
|
|
|
604
591
|
/**
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
*
|
|
592
|
+
* @param elem
|
|
593
|
+
* @return
|
|
594
|
+
*
|
|
608
595
|
*/
|
|
609
|
-
public RShape elemToPolyline(XML elem)
|
|
610
|
-
{
|
|
596
|
+
public RShape elemToPolyline(XML elem) {
|
|
611
597
|
RShape shp = getPolyline(elem.getString("points").trim());
|
|
612
598
|
|
|
613
599
|
shp.updateOrigParams();
|
|
@@ -616,12 +602,11 @@ public class RSVG
|
|
|
616
602
|
}
|
|
617
603
|
|
|
618
604
|
/**
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
*
|
|
605
|
+
* @param elem
|
|
606
|
+
* @return
|
|
607
|
+
*
|
|
622
608
|
*/
|
|
623
|
-
public RShape elemToPolygon(XML elem)
|
|
624
|
-
{
|
|
609
|
+
public RShape elemToPolygon(XML elem) {
|
|
625
610
|
RShape poly = elemToPolyline(elem);
|
|
626
611
|
|
|
627
612
|
poly.addClose();
|
|
@@ -632,12 +617,11 @@ public class RSVG
|
|
|
632
617
|
}
|
|
633
618
|
|
|
634
619
|
/**
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
*
|
|
620
|
+
* @param elem
|
|
621
|
+
* @return
|
|
622
|
+
*
|
|
638
623
|
*/
|
|
639
|
-
public RShape elemToRect(XML elem)
|
|
640
|
-
{
|
|
624
|
+
public RShape elemToRect(XML elem) {
|
|
641
625
|
|
|
642
626
|
RShape shp = getRect(elem.getFloat("x"), elem.getFloat("y"), elem.getFloat("width"), elem.getFloat("height"));
|
|
643
627
|
|
|
@@ -647,12 +631,11 @@ public class RSVG
|
|
|
647
631
|
}
|
|
648
632
|
|
|
649
633
|
/**
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
*
|
|
634
|
+
* @param elem
|
|
635
|
+
* @return
|
|
636
|
+
*
|
|
653
637
|
*/
|
|
654
|
-
public RShape elemToLine(XML elem)
|
|
655
|
-
{
|
|
638
|
+
public RShape elemToLine(XML elem) {
|
|
656
639
|
RShape shp = getLine(elem.getFloat("x1"), elem.getFloat("y1"), elem.getFloat("x2"), elem.getFloat("y2"));
|
|
657
640
|
|
|
658
641
|
shp.updateOrigParams();
|
|
@@ -660,14 +643,12 @@ public class RSVG
|
|
|
660
643
|
return shp;
|
|
661
644
|
}
|
|
662
645
|
|
|
663
|
-
|
|
664
646
|
/**
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
*
|
|
647
|
+
* @param elem
|
|
648
|
+
* @return
|
|
649
|
+
*
|
|
668
650
|
*/
|
|
669
|
-
public RShape elemToEllipse(XML elem)
|
|
670
|
-
{
|
|
651
|
+
public RShape elemToEllipse(XML elem) {
|
|
671
652
|
RShape shp = getEllipse(elem.getFloat("cx"), elem.getFloat("cy"), elem.getFloat("rx"), elem.getFloat("ry"));
|
|
672
653
|
|
|
673
654
|
shp.updateOrigParams();
|
|
@@ -675,14 +656,12 @@ public class RSVG
|
|
|
675
656
|
return shp;
|
|
676
657
|
}
|
|
677
658
|
|
|
678
|
-
|
|
679
659
|
/**
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
*
|
|
660
|
+
* @param elem
|
|
661
|
+
* @return
|
|
662
|
+
*
|
|
683
663
|
*/
|
|
684
|
-
public RShape elemToCircle(XML elem)
|
|
685
|
-
{
|
|
664
|
+
public RShape elemToCircle(XML elem) {
|
|
686
665
|
float r = elem.getFloat("r");
|
|
687
666
|
RShape shp = getEllipse(elem.getFloat("cx"), elem.getFloat("cy"), r, r);
|
|
688
667
|
|
|
@@ -692,12 +671,11 @@ public class RSVG
|
|
|
692
671
|
}
|
|
693
672
|
|
|
694
673
|
/**
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
*
|
|
674
|
+
* @param elem
|
|
675
|
+
* @return
|
|
676
|
+
*
|
|
698
677
|
*/
|
|
699
|
-
public RShape elemToShape(XML elem)
|
|
700
|
-
{
|
|
678
|
+
public RShape elemToShape(XML elem) {
|
|
701
679
|
RShape shp = getShape(elem.getString("d"));
|
|
702
680
|
|
|
703
681
|
shp.updateOrigParams();
|
|
@@ -706,10 +684,9 @@ public class RSVG
|
|
|
706
684
|
}
|
|
707
685
|
|
|
708
686
|
/**
|
|
709
|
-
*
|
|
687
|
+
*
|
|
710
688
|
*/
|
|
711
|
-
private RShape getRect(float x, float y, float w, float h)
|
|
712
|
-
{
|
|
689
|
+
private RShape getRect(float x, float y, float w, float h) {
|
|
713
690
|
RShape shp = RShape.createRectangle(x, y, w, h);
|
|
714
691
|
|
|
715
692
|
shp.updateOrigParams();
|
|
@@ -718,10 +695,9 @@ public class RSVG
|
|
|
718
695
|
}
|
|
719
696
|
|
|
720
697
|
/**
|
|
721
|
-
*
|
|
698
|
+
*
|
|
722
699
|
*/
|
|
723
|
-
private RShape getLine(float x1, float y1, float x2, float y2)
|
|
724
|
-
{
|
|
700
|
+
private RShape getLine(float x1, float y1, float x2, float y2) {
|
|
725
701
|
RShape shp = new RShape();
|
|
726
702
|
|
|
727
703
|
shp.addMoveTo(x1, y1);
|
|
@@ -730,119 +706,110 @@ public class RSVG
|
|
|
730
706
|
return shp;
|
|
731
707
|
}
|
|
732
708
|
|
|
733
|
-
|
|
734
709
|
/**
|
|
735
|
-
*
|
|
710
|
+
*
|
|
736
711
|
*/
|
|
737
|
-
private RShape getEllipse(float cx, float cy, float rx, float ry)
|
|
738
|
-
{
|
|
712
|
+
private RShape getEllipse(float cx, float cy, float rx, float ry) {
|
|
739
713
|
// RShape createEllipse takes as input the width and height of the ellipses
|
|
740
|
-
return RShape.createEllipse(cx, cy, rx*2F, ry*2F);
|
|
714
|
+
return RShape.createEllipse(cx, cy, rx * 2F, ry * 2F);
|
|
741
715
|
}
|
|
742
716
|
|
|
743
717
|
/**
|
|
744
|
-
*
|
|
718
|
+
*
|
|
745
719
|
*/
|
|
746
|
-
private RShape getPolyline(String s)
|
|
747
|
-
{
|
|
720
|
+
private RShape getPolyline(String s) {
|
|
748
721
|
RShape poly = new RShape();
|
|
749
722
|
boolean first = true;
|
|
750
723
|
|
|
751
724
|
//format string to usable format
|
|
752
|
-
char charline[]=s.toCharArray();
|
|
753
|
-
for(int i=0;i<charline.length;i++)
|
|
754
|
-
{
|
|
755
|
-
|
|
756
|
-
{
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
charline=PApplet.splice(charline,' ',i);
|
|
760
|
-
i++;
|
|
761
|
-
}
|
|
762
|
-
break;
|
|
763
|
-
case ',':
|
|
764
|
-
case '\n':
|
|
765
|
-
case '\r':
|
|
766
|
-
case '\t':
|
|
767
|
-
charline[i]=' ';
|
|
768
|
-
break;
|
|
725
|
+
char charline[] = s.toCharArray();
|
|
726
|
+
for (int i = 0; i < charline.length; i++) {
|
|
727
|
+
switch (charline[i]) {
|
|
728
|
+
case '-':
|
|
729
|
+
if (charline[i - 1] != 'e' && charline[i - 1] != 'E') {
|
|
730
|
+
charline = PApplet.splice(charline, ' ', i);
|
|
731
|
+
i++;
|
|
769
732
|
}
|
|
733
|
+
break;
|
|
734
|
+
case ',':
|
|
735
|
+
case '\n':
|
|
736
|
+
case '\r':
|
|
737
|
+
case '\t':
|
|
738
|
+
charline[i] = ' ';
|
|
739
|
+
break;
|
|
770
740
|
}
|
|
771
|
-
|
|
772
|
-
String
|
|
773
|
-
|
|
741
|
+
}
|
|
742
|
+
String formatted = new String(charline);
|
|
743
|
+
String tags[] = PApplet.splitTokens(formatted, ", ");
|
|
744
|
+
for (int i = 0; i < tags.length; i++) {
|
|
774
745
|
float x = PApplet.parseFloat(tags[i]);
|
|
775
|
-
float y = PApplet.parseFloat(tags[i+1]);
|
|
746
|
+
float y = PApplet.parseFloat(tags[i + 1]);
|
|
776
747
|
i++;
|
|
777
|
-
if(first){
|
|
778
|
-
poly.addMoveTo(x,y);
|
|
748
|
+
if (first) {
|
|
749
|
+
poly.addMoveTo(x, y);
|
|
779
750
|
first = false;
|
|
780
|
-
}else{
|
|
781
|
-
poly.addLineTo(x,y);
|
|
751
|
+
} else {
|
|
752
|
+
poly.addLineTo(x, y);
|
|
782
753
|
}
|
|
783
754
|
}
|
|
784
755
|
return poly;
|
|
785
756
|
}
|
|
786
757
|
|
|
787
758
|
/**
|
|
788
|
-
*
|
|
759
|
+
*
|
|
789
760
|
*/
|
|
790
|
-
private RShape getShape(String s)
|
|
791
|
-
{
|
|
761
|
+
private RShape getShape(String s) {
|
|
792
762
|
RShape shp = new RShape();
|
|
793
763
|
|
|
794
|
-
if(s == null){
|
|
764
|
+
if (s == null) {
|
|
795
765
|
return shp;
|
|
796
766
|
}
|
|
797
767
|
|
|
798
768
|
//format string to usable format
|
|
799
769
|
char charline[] = s.toCharArray();
|
|
800
|
-
for(
|
|
801
|
-
{
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
charline=PApplet.splice(charline,' ',i);
|
|
827
|
-
i++;
|
|
828
|
-
}
|
|
829
|
-
break;
|
|
830
|
-
case ',':
|
|
831
|
-
case '\n':
|
|
832
|
-
case '\r':
|
|
833
|
-
case '\t':
|
|
834
|
-
charline[i] = ' ';
|
|
835
|
-
break;
|
|
836
|
-
|
|
770
|
+
for (int i = 0; i < charline.length; i++) {
|
|
771
|
+
switch (charline[i]) {
|
|
772
|
+
case 'M':
|
|
773
|
+
case 'm':
|
|
774
|
+
case 'Z':
|
|
775
|
+
case 'z':
|
|
776
|
+
case 'C':
|
|
777
|
+
case 'c':
|
|
778
|
+
case 'S':
|
|
779
|
+
case 's':
|
|
780
|
+
case 'L':
|
|
781
|
+
case 'l':
|
|
782
|
+
case 'H':
|
|
783
|
+
case 'h':
|
|
784
|
+
case 'V':
|
|
785
|
+
case 'v':
|
|
786
|
+
charline = PApplet.splice(charline, ' ', i);
|
|
787
|
+
i++;
|
|
788
|
+
charline = PApplet.splice(charline, ' ', i + 1);
|
|
789
|
+
i++;
|
|
790
|
+
break;
|
|
791
|
+
|
|
792
|
+
case '-':
|
|
793
|
+
if (i > 0 && charline[i - 1] != 'e' && charline[i - 1] != 'E') {
|
|
794
|
+
charline = PApplet.splice(charline, ' ', i);
|
|
795
|
+
i++;
|
|
837
796
|
}
|
|
797
|
+
break;
|
|
798
|
+
case ',':
|
|
799
|
+
case '\n':
|
|
800
|
+
case '\r':
|
|
801
|
+
case '\t':
|
|
802
|
+
charline[i] = ' ';
|
|
803
|
+
break;
|
|
804
|
+
|
|
838
805
|
}
|
|
806
|
+
}
|
|
839
807
|
String formatted = new String(charline);
|
|
840
808
|
String[] tags = PApplet.splitTokens(formatted);
|
|
841
809
|
|
|
842
810
|
//PApplet.println("formatted: " + formatted);
|
|
843
811
|
//PApplet.println("tags: ");
|
|
844
812
|
//PApplet.println(tags);
|
|
845
|
-
|
|
846
813
|
//build points
|
|
847
814
|
RPoint curp = new RPoint();
|
|
848
815
|
RPoint relp = new RPoint();
|
|
@@ -851,132 +818,129 @@ public class RSVG
|
|
|
851
818
|
|
|
852
819
|
char command = 'a';
|
|
853
820
|
|
|
854
|
-
for (int i=0;i<tags.length;i++)
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
} else if (command == 'M') {
|
|
880
|
-
command = 'L';
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
|
|
884
|
-
relp.setLocation(0F, 0F);
|
|
885
|
-
|
|
886
|
-
switch(command)
|
|
887
|
-
{
|
|
888
|
-
case 'm':
|
|
889
|
-
relp.setLocation(curp.x, curp.y);
|
|
890
|
-
case 'M':
|
|
891
|
-
i = move(shp, curp, relp, refp, strp, tags, i);
|
|
892
|
-
break;
|
|
893
|
-
|
|
894
|
-
case 'z':
|
|
895
|
-
relp.setLocation(curp.x, curp.y);
|
|
896
|
-
case 'Z':
|
|
897
|
-
shp.addClose();
|
|
898
|
-
break;
|
|
899
|
-
|
|
900
|
-
case 'c':
|
|
901
|
-
relp.setLocation(curp.x, curp.y);
|
|
902
|
-
case 'C':
|
|
903
|
-
i = curve(shp, curp, relp, refp, strp, tags, i);
|
|
904
|
-
break;
|
|
905
|
-
|
|
906
|
-
case 's':
|
|
907
|
-
relp.setLocation(curp.x, curp.y);
|
|
908
|
-
case 'S':
|
|
909
|
-
i = smooth(shp, curp, relp, refp, strp, tags, i);
|
|
910
|
-
break;
|
|
911
|
-
|
|
912
|
-
case 'l':
|
|
913
|
-
relp.setLocation(curp.x, curp.y);
|
|
914
|
-
case 'L':
|
|
915
|
-
i = line(shp, curp, relp, refp, strp, tags, i);
|
|
916
|
-
break;
|
|
917
|
-
|
|
918
|
-
case 'h':
|
|
919
|
-
relp.setLocation(curp.x, curp.y);
|
|
920
|
-
case 'H':
|
|
921
|
-
i = horizontal(shp, curp, relp, refp, strp, tags, i);
|
|
922
|
-
break;
|
|
923
|
-
|
|
924
|
-
case 'v':
|
|
925
|
-
relp.setLocation(curp.x, curp.y);
|
|
926
|
-
case 'V':
|
|
927
|
-
i = vertical(shp, curp, relp, refp, strp, tags, i);
|
|
928
|
-
break;
|
|
821
|
+
for (int i = 0; i < tags.length; i++) {
|
|
822
|
+
char nextChar = tags[i].charAt(0);
|
|
823
|
+
switch (nextChar) {
|
|
824
|
+
case 'm':
|
|
825
|
+
case 'M':
|
|
826
|
+
case 'c':
|
|
827
|
+
case 'C':
|
|
828
|
+
case 's':
|
|
829
|
+
case 'S':
|
|
830
|
+
case 'l':
|
|
831
|
+
case 'L':
|
|
832
|
+
case 'h':
|
|
833
|
+
case 'H':
|
|
834
|
+
case 'v':
|
|
835
|
+
case 'V':
|
|
836
|
+
i += 1;
|
|
837
|
+
case 'z':
|
|
838
|
+
case 'Z':
|
|
839
|
+
command = nextChar;
|
|
840
|
+
break;
|
|
841
|
+
default:
|
|
842
|
+
if (command == 'm') {
|
|
843
|
+
command = 'l';
|
|
844
|
+
} else if (command == 'M') {
|
|
845
|
+
command = 'L';
|
|
929
846
|
}
|
|
930
847
|
}
|
|
848
|
+
|
|
849
|
+
relp.setLocation(0F, 0F);
|
|
850
|
+
|
|
851
|
+
switch (command) {
|
|
852
|
+
case 'm':
|
|
853
|
+
relp.setLocation(curp.x, curp.y);
|
|
854
|
+
case 'M':
|
|
855
|
+
i = move(shp, curp, relp, refp, strp, tags, i);
|
|
856
|
+
break;
|
|
857
|
+
|
|
858
|
+
case 'z':
|
|
859
|
+
relp.setLocation(curp.x, curp.y);
|
|
860
|
+
case 'Z':
|
|
861
|
+
shp.addClose();
|
|
862
|
+
break;
|
|
863
|
+
|
|
864
|
+
case 'c':
|
|
865
|
+
relp.setLocation(curp.x, curp.y);
|
|
866
|
+
case 'C':
|
|
867
|
+
i = curve(shp, curp, relp, refp, strp, tags, i);
|
|
868
|
+
break;
|
|
869
|
+
|
|
870
|
+
case 's':
|
|
871
|
+
relp.setLocation(curp.x, curp.y);
|
|
872
|
+
case 'S':
|
|
873
|
+
i = smooth(shp, curp, relp, refp, strp, tags, i);
|
|
874
|
+
break;
|
|
875
|
+
|
|
876
|
+
case 'l':
|
|
877
|
+
relp.setLocation(curp.x, curp.y);
|
|
878
|
+
case 'L':
|
|
879
|
+
i = line(shp, curp, relp, refp, strp, tags, i);
|
|
880
|
+
break;
|
|
881
|
+
|
|
882
|
+
case 'h':
|
|
883
|
+
relp.setLocation(curp.x, curp.y);
|
|
884
|
+
case 'H':
|
|
885
|
+
i = horizontal(shp, curp, relp, refp, strp, tags, i);
|
|
886
|
+
break;
|
|
887
|
+
|
|
888
|
+
case 'v':
|
|
889
|
+
relp.setLocation(curp.x, curp.y);
|
|
890
|
+
case 'V':
|
|
891
|
+
i = vertical(shp, curp, relp, refp, strp, tags, i);
|
|
892
|
+
break;
|
|
893
|
+
}
|
|
894
|
+
}
|
|
931
895
|
return shp;
|
|
932
896
|
}
|
|
933
897
|
|
|
934
|
-
private int move(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i){
|
|
935
|
-
shp.addMoveTo(PApplet.parseFloat(tags[i])+relp.x, PApplet.parseFloat(tags[i+1])+relp.y);
|
|
898
|
+
private int move(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i) {
|
|
899
|
+
shp.addMoveTo(PApplet.parseFloat(tags[i]) + relp.x, PApplet.parseFloat(tags[i + 1]) + relp.y);
|
|
936
900
|
|
|
937
|
-
curp.setLocation(PApplet.parseFloat(tags[i])+relp.x, PApplet.parseFloat(tags[i+1])+relp.y);
|
|
938
|
-
refp.setLocation(curp.x,curp.y);
|
|
939
|
-
strp.setLocation(curp.x,curp.y);
|
|
901
|
+
curp.setLocation(PApplet.parseFloat(tags[i]) + relp.x, PApplet.parseFloat(tags[i + 1]) + relp.y);
|
|
902
|
+
refp.setLocation(curp.x, curp.y);
|
|
903
|
+
strp.setLocation(curp.x, curp.y);
|
|
940
904
|
//relp.setLocation(0F, 0F);
|
|
941
905
|
return i + 1;
|
|
942
906
|
}
|
|
943
907
|
|
|
944
|
-
private int curve(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i){
|
|
945
|
-
shp.addBezierTo(PApplet.parseFloat(tags[i])+relp.x, PApplet.parseFloat(tags[i+1])+relp.y, PApplet.parseFloat(tags[i+2])+relp.x, PApplet.parseFloat(tags[i+3])+relp.y, PApplet.parseFloat(tags[i+4])+relp.x, PApplet.parseFloat(tags[i+5])+relp.y);
|
|
908
|
+
private int curve(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i) {
|
|
909
|
+
shp.addBezierTo(PApplet.parseFloat(tags[i]) + relp.x, PApplet.parseFloat(tags[i + 1]) + relp.y, PApplet.parseFloat(tags[i + 2]) + relp.x, PApplet.parseFloat(tags[i + 3]) + relp.y, PApplet.parseFloat(tags[i + 4]) + relp.x, PApplet.parseFloat(tags[i + 5]) + relp.y);
|
|
946
910
|
|
|
947
|
-
curp.setLocation(PApplet.parseFloat(tags[i+4])+relp.x, PApplet.parseFloat(tags[i+5])+relp.y);
|
|
948
|
-
refp.setLocation(2.0f*curp.x-(PApplet.parseFloat(tags[i+2])+relp.x), 2.0f*curp.y-(PApplet.parseFloat(tags[i+3])+relp.y));
|
|
911
|
+
curp.setLocation(PApplet.parseFloat(tags[i + 4]) + relp.x, PApplet.parseFloat(tags[i + 5]) + relp.y);
|
|
912
|
+
refp.setLocation(2.0f * curp.x - (PApplet.parseFloat(tags[i + 2]) + relp.x), 2.0f * curp.y - (PApplet.parseFloat(tags[i + 3]) + relp.y));
|
|
949
913
|
return i + 5;
|
|
950
914
|
}
|
|
951
915
|
|
|
952
|
-
private int smooth(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i){
|
|
953
|
-
shp.addBezierTo(refp.x, refp.y, PApplet.parseFloat(tags[i])+relp.x, PApplet.parseFloat(tags[i+1])+relp.y, PApplet.parseFloat(tags[i+2])+relp.x, PApplet.parseFloat(tags[i+3])+relp.y);
|
|
916
|
+
private int smooth(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i) {
|
|
917
|
+
shp.addBezierTo(refp.x, refp.y, PApplet.parseFloat(tags[i]) + relp.x, PApplet.parseFloat(tags[i + 1]) + relp.y, PApplet.parseFloat(tags[i + 2]) + relp.x, PApplet.parseFloat(tags[i + 3]) + relp.y);
|
|
954
918
|
|
|
955
|
-
curp.setLocation(PApplet.parseFloat(tags[i+2])+relp.x, PApplet.parseFloat(tags[i+3])+relp.y);
|
|
956
|
-
refp.setLocation(2.0f*curp.x-(PApplet.parseFloat(tags[i])+relp.x), 2.0f*curp.y-(PApplet.parseFloat(tags[i+1])+relp.y));
|
|
919
|
+
curp.setLocation(PApplet.parseFloat(tags[i + 2]) + relp.x, PApplet.parseFloat(tags[i + 3]) + relp.y);
|
|
920
|
+
refp.setLocation(2.0f * curp.x - (PApplet.parseFloat(tags[i]) + relp.x), 2.0f * curp.y - (PApplet.parseFloat(tags[i + 1]) + relp.y));
|
|
957
921
|
return i + 3;
|
|
958
922
|
}
|
|
959
923
|
|
|
960
|
-
private int line(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i){
|
|
961
|
-
shp.addLineTo(PApplet.parseFloat(tags[i])+relp.x, PApplet.parseFloat(tags[i+1])+relp.y);
|
|
924
|
+
private int line(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i) {
|
|
925
|
+
shp.addLineTo(PApplet.parseFloat(tags[i]) + relp.x, PApplet.parseFloat(tags[i + 1]) + relp.y);
|
|
962
926
|
|
|
963
|
-
curp.setLocation(PApplet.parseFloat(tags[i])+relp.x, PApplet.parseFloat(tags[i+1])+relp.y);
|
|
927
|
+
curp.setLocation(PApplet.parseFloat(tags[i]) + relp.x, PApplet.parseFloat(tags[i + 1]) + relp.y);
|
|
964
928
|
refp.setLocation(curp.x, curp.y);
|
|
965
929
|
return i + 1;
|
|
966
930
|
}
|
|
967
931
|
|
|
968
|
-
private int horizontal(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i){
|
|
969
|
-
shp.addLineTo(PApplet.parseFloat(tags[i])+relp.x, curp.y);
|
|
932
|
+
private int horizontal(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i) {
|
|
933
|
+
shp.addLineTo(PApplet.parseFloat(tags[i]) + relp.x, curp.y);
|
|
970
934
|
|
|
971
|
-
curp.setLocation(PApplet.parseFloat(tags[i])+relp.x, curp.y);
|
|
935
|
+
curp.setLocation(PApplet.parseFloat(tags[i]) + relp.x, curp.y);
|
|
972
936
|
refp.setLocation(curp.x, curp.y);
|
|
973
937
|
return i;
|
|
974
938
|
}
|
|
975
939
|
|
|
976
|
-
private int vertical(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i){
|
|
977
|
-
shp.addLineTo(curp.x, PApplet.parseFloat(tags[i])+relp.y);
|
|
940
|
+
private int vertical(RShape shp, RPoint curp, RPoint relp, RPoint refp, RPoint strp, String[] tags, int i) {
|
|
941
|
+
shp.addLineTo(curp.x, PApplet.parseFloat(tags[i]) + relp.y);
|
|
978
942
|
|
|
979
|
-
curp.setLocation(curp.x, PApplet.parseFloat(tags[i])+relp.y);
|
|
943
|
+
curp.setLocation(curp.x, PApplet.parseFloat(tags[i]) + relp.y);
|
|
980
944
|
refp.setLocation(curp.x, curp.y);
|
|
981
945
|
return i;
|
|
982
946
|
}
|