1 Clazz.declarePackage ("java.awt.geom");
2 Clazz.load (["java.awt.Shape"], "java.awt.geom.QuadCurve2D", ["java.lang.InternalError", "java.awt.geom.FlatteningPathIterator", "$.Line2D", "$.Point2D", "$.QuadIterator", "$.Rectangle2D"], function () {
3 c$ = Clazz.declareType (java.awt.geom, "QuadCurve2D", null, [java.awt.Shape, Cloneable]);
4 Clazz.makeConstructor (c$,
7 Clazz.defineMethod (c$, "setCurve",
8 function (coords, offset) {
9 this.setCurve (coords[offset + 0], coords[offset + 1], coords[offset + 2], coords[offset + 3], coords[offset + 4], coords[offset + 5]);
11 Clazz.defineMethod (c$, "setCurve",
12 function (p1, cp, p2) {
13 this.setCurve (p1.getX (), p1.getY (), cp.getX (), cp.getY (), p2.getX (), p2.getY ());
14 }, "java.awt.geom.Point2D,java.awt.geom.Point2D,java.awt.geom.Point2D");
15 Clazz.defineMethod (c$, "setCurve",
16 function (pts, offset) {
17 this.setCurve (pts[offset + 0].getX (), pts[offset + 0].getY (), pts[offset + 1].getX (), pts[offset + 1].getY (), pts[offset + 2].getX (), pts[offset + 2].getY ());
19 Clazz.defineMethod (c$, "setCurve",
21 this.setCurve (c.getX1 (), c.getY1 (), c.getCtrlX (), c.getCtrlY (), c.getX2 (), c.getY2 ());
22 }, "java.awt.geom.QuadCurve2D");
23 c$.getFlatnessSq = Clazz.defineMethod (c$, "getFlatnessSq",
24 function (x1, y1, ctrlx, ctrly, x2, y2) {
25 return java.awt.geom.Line2D.ptSegDistSq (x1, y1, x2, y2, ctrlx, ctrly);
26 }, "~N,~N,~N,~N,~N,~N");
27 c$.getFlatness = Clazz.defineMethod (c$, "getFlatness",
28 function (x1, y1, ctrlx, ctrly, x2, y2) {
29 return java.awt.geom.Line2D.ptSegDist (x1, y1, x2, y2, ctrlx, ctrly);
30 }, "~N,~N,~N,~N,~N,~N");
31 c$.getFlatnessSq = Clazz.defineMethod (c$, "getFlatnessSq",
32 function (coords, offset) {
33 return java.awt.geom.Line2D.ptSegDistSq (coords[offset + 0], coords[offset + 1], coords[offset + 4], coords[offset + 5], coords[offset + 2], coords[offset + 3]);
35 c$.getFlatness = Clazz.defineMethod (c$, "getFlatness",
36 function (coords, offset) {
37 return java.awt.geom.Line2D.ptSegDist (coords[offset + 0], coords[offset + 1], coords[offset + 4], coords[offset + 5], coords[offset + 2], coords[offset + 3]);
39 Clazz.defineMethod (c$, "getFlatnessSq",
41 return java.awt.geom.Line2D.ptSegDistSq (this.getX1 (), this.getY1 (), this.getX2 (), this.getY2 (), this.getCtrlX (), this.getCtrlY ());
43 Clazz.defineMethod (c$, "getFlatness",
45 return java.awt.geom.Line2D.ptSegDist (this.getX1 (), this.getY1 (), this.getX2 (), this.getY2 (), this.getCtrlX (), this.getCtrlY ());
47 Clazz.defineMethod (c$, "subdivide",
48 function (left, right) {
49 java.awt.geom.QuadCurve2D.subdivide (this, left, right);
50 }, "java.awt.geom.QuadCurve2D,java.awt.geom.QuadCurve2D");
51 c$.subdivide = Clazz.defineMethod (c$, "subdivide",
52 function (src, left, right) {
53 var x1 = src.getX1 ();
54 var y1 = src.getY1 ();
55 var ctrlx = src.getCtrlX ();
56 var ctrly = src.getCtrlY ();
57 var x2 = src.getX2 ();
58 var y2 = src.getY2 ();
59 var ctrlx1 = (x1 + ctrlx) / 2.0;
60 var ctrly1 = (y1 + ctrly) / 2.0;
61 var ctrlx2 = (x2 + ctrlx) / 2.0;
62 var ctrly2 = (y2 + ctrly) / 2.0;
63 ctrlx = (ctrlx1 + ctrlx2) / 2.0;
64 ctrly = (ctrly1 + ctrly2) / 2.0;
66 left.setCurve (x1, y1, ctrlx1, ctrly1, ctrlx, ctrly);
68 right.setCurve (ctrlx, ctrly, ctrlx2, ctrly2, x2, y2);
69 }}, "java.awt.geom.QuadCurve2D,java.awt.geom.QuadCurve2D,java.awt.geom.QuadCurve2D");
70 c$.subdivide = Clazz.defineMethod (c$, "subdivide",
71 function (src, srcoff, left, leftoff, right, rightoff) {
72 var x1 = src[srcoff + 0];
73 var y1 = src[srcoff + 1];
74 var ctrlx = src[srcoff + 2];
75 var ctrly = src[srcoff + 3];
76 var x2 = src[srcoff + 4];
77 var y2 = src[srcoff + 5];
79 left[leftoff + 0] = x1;
80 left[leftoff + 1] = y1;
82 right[rightoff + 4] = x2;
83 right[rightoff + 5] = y2;
84 }x1 = (x1 + ctrlx) / 2.0;
85 y1 = (y1 + ctrly) / 2.0;
86 x2 = (x2 + ctrlx) / 2.0;
87 y2 = (y2 + ctrly) / 2.0;
88 ctrlx = (x1 + x2) / 2.0;
89 ctrly = (y1 + y2) / 2.0;
91 left[leftoff + 2] = x1;
92 left[leftoff + 3] = y1;
93 left[leftoff + 4] = ctrlx;
94 left[leftoff + 5] = ctrly;
96 right[rightoff + 0] = ctrlx;
97 right[rightoff + 1] = ctrly;
98 right[rightoff + 2] = x2;
99 right[rightoff + 3] = y2;
100 }}, "~A,~N,~A,~N,~A,~N");
101 c$.solveQuadratic = Clazz.defineMethod (c$, "solveQuadratic",
103 return java.awt.geom.QuadCurve2D.solveQuadratic (eqn, eqn);
105 c$.solveQuadratic = Clazz.defineMethod (c$, "solveQuadratic",
106 function (eqn, res) {
114 }res[roots++] = -c / b;
116 var d = b * b - 4.0 * a * c;
122 }var q = (b + d) / -2.0;
123 res[roots++] = q / a;
125 res[roots++] = c / q;
128 Clazz.defineMethod (c$, "contains",
130 var x1 = this.getX1 ();
131 var y1 = this.getY1 ();
132 var xc = this.getCtrlX ();
133 var yc = this.getCtrlY ();
134 var x2 = this.getX2 ();
135 var y2 = this.getY2 ();
136 var kx = x1 - 2 * xc + x2;
137 var ky = y1 - 2 * yc + y2;
142 var t0 = (dx * ky - dy * kx) / (dxl * ky - dyl * kx);
143 if (t0 < 0 || t0 > 1 || t0 != t0) {
145 }var xb = kx * t0 * t0 + 2 * (xc - x1) * t0 + x1;
146 var yb = ky * t0 * t0 + 2 * (yc - y1) * t0 + y1;
147 var xl = dxl * t0 + x1;
148 var yl = dyl * t0 + y1;
149 return (x >= xb && x < xl) || (x >= xl && x < xb) || (y >= yb && y < yl) || (y >= yl && y < yb);
151 Clazz.defineMethod (c$, "contains",
153 return this.contains (p.getX (), p.getY ());
154 }, "java.awt.geom.Point2D");
155 c$.fillEqn = Clazz.defineMethod (c$, "fillEqn",
156 function (eqn, val, c1, cp, c2) {
158 eqn[1] = cp + cp - c1 - c1;
159 eqn[2] = c1 - cp - cp + c2;
161 }, "~A,~N,~N,~N,~N");
162 c$.evalQuadratic = Clazz.defineMethod (c$, "evalQuadratic",
163 function (vals, num, include0, include1, inflect, c1, ctrl, c2) {
165 for (var i = 0; i < num; i++) {
167 if ((include0 ? t >= 0 : t > 0) && (include1 ? t <= 1 : t < 1) && (inflect == null || inflect[1] + 2 * inflect[2] * t != 0)) {
169 vals[j++] = c1 * u * u + 2 * ctrl * t * u + c2 * t * t;
172 }, "~A,~N,~B,~B,~A,~N,~N,~N");
173 c$.getTag = Clazz.defineMethod (c$, "getTag",
174 function (coord, low, high) {
176 return (coord < low ? -2 : -1);
177 }if (coord >= high) {
178 return (coord > high ? 2 : 1);
181 c$.inwards = Clazz.defineMethod (c$, "inwards",
182 function (pttag, opt1tag, opt2tag) {
189 return (opt1tag >= 0 || opt2tag >= 0);
193 return (opt1tag <= 0 || opt2tag <= 0);
196 Clazz.defineMethod (c$, "intersects",
197 function (x, y, w, h) {
198 if (w <= 0 || h <= 0) {
200 }var x1 = this.getX1 ();
201 var y1 = this.getY1 ();
202 var x1tag = java.awt.geom.QuadCurve2D.getTag (x1, x, x + w);
203 var y1tag = java.awt.geom.QuadCurve2D.getTag (y1, y, y + h);
204 if (x1tag == 0 && y1tag == 0) {
206 }var x2 = this.getX2 ();
207 var y2 = this.getY2 ();
208 var x2tag = java.awt.geom.QuadCurve2D.getTag (x2, x, x + w);
209 var y2tag = java.awt.geom.QuadCurve2D.getTag (y2, y, y + h);
210 if (x2tag == 0 && y2tag == 0) {
212 }var ctrlx = this.getCtrlX ();
213 var ctrly = this.getCtrlY ();
214 var ctrlxtag = java.awt.geom.QuadCurve2D.getTag (ctrlx, x, x + w);
215 var ctrlytag = java.awt.geom.QuadCurve2D.getTag (ctrly, y, y + h);
216 if (x1tag < 0 && x2tag < 0 && ctrlxtag < 0) {
218 }if (y1tag < 0 && y2tag < 0 && ctrlytag < 0) {
220 }if (x1tag > 0 && x2tag > 0 && ctrlxtag > 0) {
222 }if (y1tag > 0 && y2tag > 0 && ctrlytag > 0) {
224 }if (java.awt.geom.QuadCurve2D.inwards (x1tag, x2tag, ctrlxtag) && java.awt.geom.QuadCurve2D.inwards (y1tag, y2tag, ctrlytag)) {
226 }if (java.awt.geom.QuadCurve2D.inwards (x2tag, x1tag, ctrlxtag) && java.awt.geom.QuadCurve2D.inwards (y2tag, y1tag, ctrlytag)) {
228 }var xoverlap = (x1tag * x2tag <= 0);
229 var yoverlap = (y1tag * y2tag <= 0);
230 if (x1tag == 0 && x2tag == 0 && yoverlap) {
232 }if (y1tag == 0 && y2tag == 0 && xoverlap) {
234 }var eqn = Clazz.newDoubleArray (3, 0);
235 var res = Clazz.newDoubleArray (3, 0);
237 java.awt.geom.QuadCurve2D.fillEqn (eqn, (y1tag < 0 ? y : y + h), y1, ctrly, y2);
238 return (java.awt.geom.QuadCurve2D.solveQuadratic (eqn, res) == 2 && java.awt.geom.QuadCurve2D.evalQuadratic (res, 2, true, true, null, x1, ctrlx, x2) == 2 && java.awt.geom.QuadCurve2D.getTag (res[0], x, x + w) * java.awt.geom.QuadCurve2D.getTag (res[1], x, x + w) <= 0);
240 java.awt.geom.QuadCurve2D.fillEqn (eqn, (x1tag < 0 ? x : x + w), x1, ctrlx, x2);
241 return (java.awt.geom.QuadCurve2D.solveQuadratic (eqn, res) == 2 && java.awt.geom.QuadCurve2D.evalQuadratic (res, 2, true, true, null, y1, ctrly, y2) == 2 && java.awt.geom.QuadCurve2D.getTag (res[0], y, y + h) * java.awt.geom.QuadCurve2D.getTag (res[1], y, y + h) <= 0);
244 var k = y2 * x1 - x2 * y1;
250 c1tag = java.awt.geom.QuadCurve2D.getTag ((k + dx * (y1tag < 0 ? y : y + h)) / dy, x, x + w);
254 c2tag = java.awt.geom.QuadCurve2D.getTag ((k + dx * (y2tag < 0 ? y : y + h)) / dy, x, x + w);
255 }if (c1tag * c2tag <= 0) {
257 }c1tag = ((c1tag * x1tag <= 0) ? y1tag : y2tag);
258 java.awt.geom.QuadCurve2D.fillEqn (eqn, (c2tag < 0 ? x : x + w), x1, ctrlx, x2);
259 var num = java.awt.geom.QuadCurve2D.solveQuadratic (eqn, res);
260 java.awt.geom.QuadCurve2D.evalQuadratic (res, num, true, true, null, y1, ctrly, y2);
261 c2tag = java.awt.geom.QuadCurve2D.getTag (res[0], y, y + h);
262 return (c1tag * c2tag <= 0);
264 Clazz.defineMethod (c$, "intersects",
266 return this.intersects (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
267 }, "java.awt.geom.Rectangle2D");
268 Clazz.defineMethod (c$, "contains",
269 function (x, y, w, h) {
270 if (w <= 0 || h <= 0) {
272 }return (this.contains (x, y) && this.contains (x + w, y) && this.contains (x + w, y + h) && this.contains (x, y + h));
274 Clazz.defineMethod (c$, "contains",
276 return this.contains (r.getX (), r.getY (), r.getWidth (), r.getHeight ());
277 }, "java.awt.geom.Rectangle2D");
278 Clazz.overrideMethod (c$, "getBounds",
280 return this.getBounds2D ().getBounds ();
282 Clazz.defineMethod (c$, "getPathIterator",
284 return new java.awt.geom.QuadIterator (this, at);
285 }, "java.awt.geom.AffineTransform");
286 Clazz.defineMethod (c$, "getPathIterator",
287 function (at, flatness) {
288 return new java.awt.geom.FlatteningPathIterator (this.getPathIterator (at), flatness);
289 }, "java.awt.geom.AffineTransform,~N");
290 Clazz.defineMethod (c$, "clone",
293 return Clazz.superCall (this, java.awt.geom.QuadCurve2D, "clone", []);
295 if (Clazz.exceptionOf (e, CloneNotSupportedException)) {
296 throw new InternalError ();
303 c$ = Clazz.decorateAsClass (function () {
310 Clazz.instantialize (this, arguments);
311 }, java.awt.geom.QuadCurve2D, "Float", java.awt.geom.QuadCurve2D);
312 Clazz.makeConstructor (c$,
314 Clazz.superConstructor (this, java.awt.geom.QuadCurve2D.Float, []);
316 Clazz.makeConstructor (c$,
317 function (a, b, c, d, e, f) {
318 Clazz.superConstructor (this, java.awt.geom.QuadCurve2D.Float, []);
319 this.setCurve (a, b, c, d, e, f);
320 }, "~N,~N,~N,~N,~N,~N");
321 Clazz.overrideMethod (c$, "getX1",
325 Clazz.overrideMethod (c$, "getY1",
329 Clazz.overrideMethod (c$, "getP1",
331 return new java.awt.geom.Point2D.Float (this.x1, this.y1);
333 Clazz.overrideMethod (c$, "getCtrlX",
337 Clazz.overrideMethod (c$, "getCtrlY",
341 Clazz.overrideMethod (c$, "getCtrlPt",
343 return new java.awt.geom.Point2D.Float (this.ctrlx, this.ctrly);
345 Clazz.overrideMethod (c$, "getX2",
349 Clazz.overrideMethod (c$, "getY2",
353 Clazz.overrideMethod (c$, "getP2",
355 return new java.awt.geom.Point2D.Float (this.x2, this.y2);
357 Clazz.defineMethod (c$, "setCurve",
358 function (a, b, c, d, e, f) {
365 }, "~N,~N,~N,~N,~N,~N");
366 Clazz.defineMethod (c$, "setCurve",
367 function (a, b, c, d, e, f) {
374 }, "~N,~N,~N,~N,~N,~N");
375 Clazz.overrideMethod (c$, "getBounds2D",
377 var a = Math.min (Math.min (this.x1, this.x2), this.ctrlx);
378 var b = Math.min (Math.min (this.y1, this.y2), this.ctrly);
379 var c = Math.max (Math.max (this.x1, this.x2), this.ctrlx);
380 var d = Math.max (Math.max (this.y1, this.y2), this.ctrly);
381 return new java.awt.geom.Rectangle2D.Float (a, b, c - a, d - b);
385 c$ = Clazz.decorateAsClass (function () {
392 Clazz.instantialize (this, arguments);
393 }, java.awt.geom.QuadCurve2D, "Double", java.awt.geom.QuadCurve2D);
394 Clazz.makeConstructor (c$,
396 Clazz.superConstructor (this, java.awt.geom.QuadCurve2D.Double, []);
398 Clazz.makeConstructor (c$,
399 function (a, b, c, d, e, f) {
400 Clazz.superConstructor (this, java.awt.geom.QuadCurve2D.Double, []);
401 this.setCurve (a, b, c, d, e, f);
402 }, "~N,~N,~N,~N,~N,~N");
403 Clazz.overrideMethod (c$, "getX1",
407 Clazz.overrideMethod (c$, "getY1",
411 Clazz.overrideMethod (c$, "getP1",
413 return new java.awt.geom.Point2D.Double (this.x1, this.y1);
415 Clazz.overrideMethod (c$, "getCtrlX",
419 Clazz.overrideMethod (c$, "getCtrlY",
423 Clazz.overrideMethod (c$, "getCtrlPt",
425 return new java.awt.geom.Point2D.Double (this.ctrlx, this.ctrly);
427 Clazz.overrideMethod (c$, "getX2",
431 Clazz.overrideMethod (c$, "getY2",
435 Clazz.overrideMethod (c$, "getP2",
437 return new java.awt.geom.Point2D.Double (this.x2, this.y2);
439 Clazz.defineMethod (c$, "setCurve",
440 function (a, b, c, d, e, f) {
447 }, "~N,~N,~N,~N,~N,~N");
448 Clazz.overrideMethod (c$, "getBounds2D",
450 var a = Math.min (Math.min (this.x1, this.x2), this.ctrlx);
451 var b = Math.min (Math.min (this.y1, this.y2), this.ctrly);
452 var c = Math.max (Math.max (this.x1, this.x2), this.ctrlx);
453 var d = Math.max (Math.max (this.y1, this.y2), this.ctrly);
454 return new java.awt.geom.Rectangle2D.Double (a, b, c - a, d - b);
457 Clazz.defineStatics (c$,