87722d26e09c0658e03e386fdb330e6ba022705c
[jalviewjs.git] / site / j2s / java / awt / geom / Arc2D.js
1 Clazz.declarePackage ("java.awt.geom");\r
2 Clazz.load (["java.awt.geom.RectangularShape"], "java.awt.geom.Arc2D", ["java.lang.Double", "$.IllegalArgumentException", "java.awt.geom.ArcIterator", "$.Line2D", "$.Point2D", "$.Rectangle2D"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.type = 0;\r
5 Clazz.instantialize (this, arguments);\r
6 }, java.awt.geom, "Arc2D", java.awt.geom.RectangularShape);\r
7 Clazz.makeConstructor (c$, \r
8 function () {\r
9 this.construct (0);\r
10 });\r
11 Clazz.makeConstructor (c$, \r
12 function (type) {\r
13 Clazz.superConstructor (this, java.awt.geom.Arc2D, []);\r
14 this.setArcType (type);\r
15 }, "~N");\r
16 Clazz.defineMethod (c$, "getArcType", \r
17 function () {\r
18 return this.type;\r
19 });\r
20 Clazz.defineMethod (c$, "getStartPoint", \r
21 function () {\r
22 var angle = Math.toRadians (-this.getAngleStart ());\r
23 var x = this.getX () + (Math.cos (angle) * 0.5 + 0.5) * this.getWidth ();\r
24 var y = this.getY () + (Math.sin (angle) * 0.5 + 0.5) * this.getHeight ();\r
25 return  new java.awt.geom.Point2D.Double (x, y);\r
26 });\r
27 Clazz.defineMethod (c$, "getEndPoint", \r
28 function () {\r
29 var angle = Math.toRadians (-this.getAngleStart () - this.getAngleExtent ());\r
30 var x = this.getX () + (Math.cos (angle) * 0.5 + 0.5) * this.getWidth ();\r
31 var y = this.getY () + (Math.sin (angle) * 0.5 + 0.5) * this.getHeight ();\r
32 return  new java.awt.geom.Point2D.Double (x, y);\r
33 });\r
34 Clazz.defineMethod (c$, "setArc", \r
35 function (loc, size, angSt, angExt, closure) {\r
36 this.setArc (loc.getX (), loc.getY (), size.getWidth (), size.getHeight (), angSt, angExt, closure);\r
37 }, "java.awt.geom.Point2D,java.awt.geom.Dimension2D,~N,~N,~N");\r
38 Clazz.defineMethod (c$, "setArc", \r
39 function (rect, angSt, angExt, closure) {\r
40 this.setArc (rect.getX (), rect.getY (), rect.getWidth (), rect.getHeight (), angSt, angExt, closure);\r
41 }, "java.awt.geom.Rectangle2D,~N,~N,~N");\r
42 Clazz.defineMethod (c$, "setArc", \r
43 function (a) {\r
44 this.setArc (a.getX (), a.getY (), a.getWidth (), a.getHeight (), a.getAngleStart (), a.getAngleExtent (), a.type);\r
45 }, "java.awt.geom.Arc2D");\r
46 Clazz.defineMethod (c$, "setArcByCenter", \r
47 function (x, y, radius, angSt, angExt, closure) {\r
48 this.setArc (x - radius, y - radius, radius * 2.0, radius * 2.0, angSt, angExt, closure);\r
49 }, "~N,~N,~N,~N,~N,~N");\r
50 Clazz.defineMethod (c$, "setArcByTangent", \r
51 function (p1, p2, p3, radius) {\r
52 var ang1 = Math.atan2 (p1.getY () - p2.getY (), p1.getX () - p2.getX ());\r
53 var ang2 = Math.atan2 (p3.getY () - p2.getY (), p3.getX () - p2.getX ());\r
54 var diff = ang2 - ang1;\r
55 if (diff > 3.141592653589793) {\r
56 ang2 -= 6.283185307179586;\r
57 } else if (diff < -3.141592653589793) {\r
58 ang2 += 6.283185307179586;\r
59 }var bisect = (ang1 + ang2) / 2.0;\r
60 var theta = Math.abs (ang2 - bisect);\r
61 var dist = radius / Math.sin (theta);\r
62 var x = p2.getX () + dist * Math.cos (bisect);\r
63 var y = p2.getY () + dist * Math.sin (bisect);\r
64 if (ang1 < ang2) {\r
65 ang1 -= 1.5707963267948966;\r
66 ang2 += 1.5707963267948966;\r
67 } else {\r
68 ang1 += 1.5707963267948966;\r
69 ang2 -= 1.5707963267948966;\r
70 }ang1 = Math.toDegrees (-ang1);\r
71 ang2 = Math.toDegrees (-ang2);\r
72 diff = ang2 - ang1;\r
73 if (diff < 0) {\r
74 diff += 360;\r
75 } else {\r
76 diff -= 360;\r
77 }this.setArcByCenter (x, y, radius, ang1, diff, this.type);\r
78 }, "java.awt.geom.Point2D,java.awt.geom.Point2D,java.awt.geom.Point2D,~N");\r
79 Clazz.defineMethod (c$, "setAngleStart", \r
80 function (p) {\r
81 var dx = this.getHeight () * (p.getX () - this.getCenterX ());\r
82 var dy = this.getWidth () * (p.getY () - this.getCenterY ());\r
83 this.setAngleStart (-Math.toDegrees (Math.atan2 (dy, dx)));\r
84 }, "java.awt.geom.Point2D");\r
85 Clazz.defineMethod (c$, "setAngles", \r
86 function (x1, y1, x2, y2) {\r
87 var x = this.getCenterX ();\r
88 var y = this.getCenterY ();\r
89 var w = this.getWidth ();\r
90 var h = this.getHeight ();\r
91 var ang1 = Math.atan2 (w * (y - y1), h * (x1 - x));\r
92 var ang2 = Math.atan2 (w * (y - y2), h * (x2 - x));\r
93 ang2 -= ang1;\r
94 if (ang2 <= 0.0) {\r
95 ang2 += 6.283185307179586;\r
96 }this.setAngleStart (Math.toDegrees (ang1));\r
97 this.setAngleExtent (Math.toDegrees (ang2));\r
98 }, "~N,~N,~N,~N");\r
99 Clazz.defineMethod (c$, "setAngles", \r
100 function (p1, p2) {\r
101 this.setAngles (p1.getX (), p1.getY (), p2.getX (), p2.getY ());\r
102 }, "java.awt.geom.Point2D,java.awt.geom.Point2D");\r
103 Clazz.defineMethod (c$, "setArcType", \r
104 function (type) {\r
105 if (type < 0 || type > 2) {\r
106 throw  new IllegalArgumentException ("invalid type for Arc: " + type);\r
107 }this.type = type;\r
108 }, "~N");\r
109 Clazz.defineMethod (c$, "setFrame", \r
110 function (x, y, w, h) {\r
111 this.setArc (x, y, w, h, this.getAngleStart (), this.getAngleExtent (), this.type);\r
112 }, "~N,~N,~N,~N");\r
113 Clazz.overrideMethod (c$, "getBounds2D", \r
114 function () {\r
115 if (this.isEmpty ()) {\r
116 return this.makeBounds (this.getX (), this.getY (), this.getWidth (), this.getHeight ());\r
117 }var x1;\r
118 var y1;\r
119 var x2;\r
120 var y2;\r
121 if (this.getArcType () == 2) {\r
122 x1 = y1 = x2 = y2 = 0.0;\r
123 } else {\r
124 x1 = y1 = 1.0;\r
125 x2 = y2 = -1.0;\r
126 }var angle = 0.0;\r
127 for (var i = 0; i < 6; i++) {\r
128 if (i < 4) {\r
129 angle += 90.0;\r
130 if (!this.containsAngle (angle)) {\r
131 continue;\r
132 }} else if (i == 4) {\r
133 angle = this.getAngleStart ();\r
134 } else {\r
135 angle += this.getAngleExtent ();\r
136 }var rads = Math.toRadians (-angle);\r
137 var xe = Math.cos (rads);\r
138 var ye = Math.sin (rads);\r
139 x1 = Math.min (x1, xe);\r
140 y1 = Math.min (y1, ye);\r
141 x2 = Math.max (x2, xe);\r
142 y2 = Math.max (y2, ye);\r
143 }\r
144 var w = this.getWidth ();\r
145 var h = this.getHeight ();\r
146 x2 = (x2 - x1) * 0.5 * w;\r
147 y2 = (y2 - y1) * 0.5 * h;\r
148 x1 = this.getX () + (x1 * 0.5 + 0.5) * w;\r
149 y1 = this.getY () + (y1 * 0.5 + 0.5) * h;\r
150 return this.makeBounds (x1, y1, x2, y2);\r
151 });\r
152 c$.normalizeDegrees = Clazz.defineMethod (c$, "normalizeDegrees", \r
153 function (angle) {\r
154 if (angle > 180.0) {\r
155 if (angle <= (540.0)) {\r
156 angle = angle - 360.0;\r
157 } else {\r
158 angle = Math.IEEEremainder (angle, 360.0);\r
159 if (angle == -180.0) {\r
160 angle = 180.0;\r
161 }}} else if (angle <= -180.0) {\r
162 if (angle > (-540.0)) {\r
163 angle = angle + 360.0;\r
164 } else {\r
165 angle = Math.IEEEremainder (angle, 360.0);\r
166 if (angle == -180.0) {\r
167 angle = 180.0;\r
168 }}}return angle;\r
169 }, "~N");\r
170 Clazz.defineMethod (c$, "containsAngle", \r
171 function (angle) {\r
172 var angExt = this.getAngleExtent ();\r
173 var backwards = (angExt < 0.0);\r
174 if (backwards) {\r
175 angExt = -angExt;\r
176 }if (angExt >= 360.0) {\r
177 return true;\r
178 }angle = java.awt.geom.Arc2D.normalizeDegrees (angle) - java.awt.geom.Arc2D.normalizeDegrees (this.getAngleStart ());\r
179 if (backwards) {\r
180 angle = -angle;\r
181 }if (angle < 0.0) {\r
182 angle += 360.0;\r
183 }return (angle >= 0.0) && (angle < angExt);\r
184 }, "~N");\r
185 Clazz.defineMethod (c$, "contains", \r
186 function (x, y) {\r
187 var ellw = this.getWidth ();\r
188 if (ellw <= 0.0) {\r
189 return false;\r
190 }var normx = (x - this.getX ()) / ellw - 0.5;\r
191 var ellh = this.getHeight ();\r
192 if (ellh <= 0.0) {\r
193 return false;\r
194 }var normy = (y - this.getY ()) / ellh - 0.5;\r
195 var distSq = (normx * normx + normy * normy);\r
196 if (distSq >= 0.25) {\r
197 return false;\r
198 }var angExt = Math.abs (this.getAngleExtent ());\r
199 if (angExt >= 360.0) {\r
200 return true;\r
201 }var inarc = this.containsAngle (-Math.toDegrees (Math.atan2 (normy, normx)));\r
202 if (this.type == 2) {\r
203 return inarc;\r
204 }if (inarc) {\r
205 if (angExt >= 180.0) {\r
206 return true;\r
207 }} else {\r
208 if (angExt <= 180.0) {\r
209 return false;\r
210 }}var angle = Math.toRadians (-this.getAngleStart ());\r
211 var x1 = Math.cos (angle);\r
212 var y1 = Math.sin (angle);\r
213 angle += Math.toRadians (-this.getAngleExtent ());\r
214 var x2 = Math.cos (angle);\r
215 var y2 = Math.sin (angle);\r
216 var inside = (java.awt.geom.Line2D.relativeCCW (x1, y1, x2, y2, 2 * normx, 2 * normy) * java.awt.geom.Line2D.relativeCCW (x1, y1, x2, y2, 0, 0) >= 0);\r
217 return inarc ? !inside : inside;\r
218 }, "~N,~N");\r
219 Clazz.defineMethod (c$, "intersects", \r
220 function (x, y, w, h) {\r
221 var aw = this.getWidth ();\r
222 var ah = this.getHeight ();\r
223 if (w <= 0 || h <= 0 || aw <= 0 || ah <= 0) {\r
224 return false;\r
225 }var ext = this.getAngleExtent ();\r
226 if (ext == 0) {\r
227 return false;\r
228 }var ax = this.getX ();\r
229 var ay = this.getY ();\r
230 var axw = ax + aw;\r
231 var ayh = ay + ah;\r
232 var xw = x + w;\r
233 var yh = y + h;\r
234 if (x >= axw || y >= ayh || xw <= ax || yh <= ay) {\r
235 return false;\r
236 }var axc = this.getCenterX ();\r
237 var ayc = this.getCenterY ();\r
238 var sp = this.getStartPoint ();\r
239 var ep = this.getEndPoint ();\r
240 var sx = sp.getX ();\r
241 var sy = sp.getY ();\r
242 var ex = ep.getX ();\r
243 var ey = ep.getY ();\r
244 if (ayc >= y && ayc <= yh) {\r
245 if ((sx < xw && ex < xw && axc < xw && axw > x && this.containsAngle (0)) || (sx > x && ex > x && axc > x && ax < xw && this.containsAngle (180))) {\r
246 return true;\r
247 }}if (axc >= x && axc <= xw) {\r
248 if ((sy > y && ey > y && ayc > y && ay < yh && this.containsAngle (90)) || (sy < yh && ey < yh && ayc < yh && ayh > y && this.containsAngle (270))) {\r
249 return true;\r
250 }}var rect =  new java.awt.geom.Rectangle2D.Double (x, y, w, h);\r
251 if (this.type == 2 || Math.abs (ext) > 180) {\r
252 if (rect.intersectsLine (axc, ayc, sx, sy) || rect.intersectsLine (axc, ayc, ex, ey)) {\r
253 return true;\r
254 }} else {\r
255 if (rect.intersectsLine (sx, sy, ex, ey)) {\r
256 return true;\r
257 }}if (this.contains (x, y) || this.contains (x + w, y) || this.contains (x, y + h) || this.contains (x + w, y + h)) {\r
258 return true;\r
259 }return false;\r
260 }, "~N,~N,~N,~N");\r
261 Clazz.defineMethod (c$, "contains", \r
262 function (x, y, w, h) {\r
263 return this.contains (x, y, w, h, null);\r
264 }, "~N,~N,~N,~N");\r
265 Clazz.defineMethod (c$, "contains", \r
266 function (r) {\r
267 return this.contains (r.getX (), r.getY (), r.getWidth (), r.getHeight (), r);\r
268 }, "java.awt.geom.Rectangle2D");\r
269 Clazz.defineMethod (c$, "contains", \r
270  function (x, y, w, h, origrect) {\r
271 if (!(this.contains (x, y) && this.contains (x + w, y) && this.contains (x, y + h) && this.contains (x + w, y + h))) {\r
272 return false;\r
273 }if (this.type != 2 || Math.abs (this.getAngleExtent ()) <= 180.0) {\r
274 return true;\r
275 }if (origrect == null) {\r
276 origrect =  new java.awt.geom.Rectangle2D.Double (x, y, w, h);\r
277 }var halfW = this.getWidth () / 2.0;\r
278 var halfH = this.getHeight () / 2.0;\r
279 var xc = this.getX () + halfW;\r
280 var yc = this.getY () + halfH;\r
281 var angle = Math.toRadians (-this.getAngleStart ());\r
282 var xe = xc + halfW * Math.cos (angle);\r
283 var ye = yc + halfH * Math.sin (angle);\r
284 if (origrect.intersectsLine (xc, yc, xe, ye)) {\r
285 return false;\r
286 }angle += Math.toRadians (-this.getAngleExtent ());\r
287 xe = xc + halfW * Math.cos (angle);\r
288 ye = yc + halfH * Math.sin (angle);\r
289 return !origrect.intersectsLine (xc, yc, xe, ye);\r
290 }, "~N,~N,~N,~N,java.awt.geom.Rectangle2D");\r
291 Clazz.defineMethod (c$, "getPathIterator", \r
292 function (at) {\r
293 return  new java.awt.geom.ArcIterator (this, at);\r
294 }, "java.awt.geom.AffineTransform");\r
295 Clazz.overrideMethod (c$, "hashCode", \r
296 function () {\r
297 var bits = java.lang.Double.doubleToLongBits (this.getX ());\r
298 bits += java.lang.Double.doubleToLongBits (this.getY ()) * 37;\r
299 bits += java.lang.Double.doubleToLongBits (this.getWidth ()) * 43;\r
300 bits += java.lang.Double.doubleToLongBits (this.getHeight ()) * 47;\r
301 bits += java.lang.Double.doubleToLongBits (this.getAngleStart ()) * 53;\r
302 bits += java.lang.Double.doubleToLongBits (this.getAngleExtent ()) * 59;\r
303 bits += this.getArcType () * 61;\r
304 return ((bits) ^ ((bits >> 32)));\r
305 });\r
306 Clazz.overrideMethod (c$, "equals", \r
307 function (obj) {\r
308 if (obj === this) {\r
309 return true;\r
310 }if (Clazz.instanceOf (obj, java.awt.geom.Arc2D)) {\r
311 var a2d = obj;\r
312 return ((this.getX () == a2d.getX ()) && (this.getY () == a2d.getY ()) && (this.getWidth () == a2d.getWidth ()) && (this.getHeight () == a2d.getHeight ()) && (this.getAngleStart () == a2d.getAngleStart ()) && (this.getAngleExtent () == a2d.getAngleExtent ()) && (this.getArcType () == a2d.getArcType ()));\r
313 }return false;\r
314 }, "~O");\r
315 Clazz.pu$h(self.c$);\r
316 c$ = Clazz.decorateAsClass (function () {\r
317 this.x = 0;\r
318 this.y = 0;\r
319 this.width = 0;\r
320 this.height = 0;\r
321 this.start = 0;\r
322 this.extent = 0;\r
323 Clazz.instantialize (this, arguments);\r
324 }, java.awt.geom.Arc2D, "Float", java.awt.geom.Arc2D);\r
325 Clazz.makeConstructor (c$, \r
326 function () {\r
327 Clazz.superConstructor (this, java.awt.geom.Arc2D.Float, [0]);\r
328 });\r
329 Clazz.makeConstructor (c$, \r
330 function (a, b, c, d, e, f, g) {\r
331 Clazz.superConstructor (this, java.awt.geom.Arc2D.Float, [g]);\r
332 this.x = a;\r
333 this.y = b;\r
334 this.width = c;\r
335 this.height = d;\r
336 this.start = e;\r
337 this.extent = f;\r
338 }, "~N,~N,~N,~N,~N,~N,~N");\r
339 Clazz.makeConstructor (c$, \r
340 function (a, b, c, d) {\r
341 Clazz.superConstructor (this, java.awt.geom.Arc2D.Float, [d]);\r
342 this.x = a.getX ();\r
343 this.y = a.getY ();\r
344 this.width = a.getWidth ();\r
345 this.height = a.getHeight ();\r
346 this.start = b;\r
347 this.extent = c;\r
348 }, "java.awt.geom.Rectangle2D,~N,~N,~N");\r
349 Clazz.defineMethod (c$, "getX", \r
350 function () {\r
351 return this.x;\r
352 });\r
353 Clazz.defineMethod (c$, "getY", \r
354 function () {\r
355 return this.y;\r
356 });\r
357 Clazz.defineMethod (c$, "getWidth", \r
358 function () {\r
359 return this.width;\r
360 });\r
361 Clazz.defineMethod (c$, "getHeight", \r
362 function () {\r
363 return this.height;\r
364 });\r
365 Clazz.overrideMethod (c$, "getAngleStart", \r
366 function () {\r
367 return this.start;\r
368 });\r
369 Clazz.overrideMethod (c$, "getAngleExtent", \r
370 function () {\r
371 return this.extent;\r
372 });\r
373 Clazz.overrideMethod (c$, "isEmpty", \r
374 function () {\r
375 return (this.width <= 0.0 || this.height <= 0.0);\r
376 });\r
377 Clazz.defineMethod (c$, "setArc", \r
378 function (a, b, c, d, e, f, g) {\r
379 this.setArcType (g);\r
380 this.x = a;\r
381 this.y = b;\r
382 this.width = c;\r
383 this.height = d;\r
384 this.start = e;\r
385 this.extent = f;\r
386 }, "~N,~N,~N,~N,~N,~N,~N");\r
387 Clazz.defineMethod (c$, "setAngleStart", \r
388 function (a) {\r
389 this.start = a;\r
390 }, "~N");\r
391 Clazz.overrideMethod (c$, "setAngleExtent", \r
392 function (a) {\r
393 this.extent = a;\r
394 }, "~N");\r
395 Clazz.overrideMethod (c$, "makeBounds", \r
396 function (a, b, c, d) {\r
397 return  new java.awt.geom.Rectangle2D.Float (a, b, c, d);\r
398 }, "~N,~N,~N,~N");\r
399 c$ = Clazz.p0p ();\r
400 Clazz.pu$h(self.c$);\r
401 c$ = Clazz.decorateAsClass (function () {\r
402 this.x = 0;\r
403 this.y = 0;\r
404 this.width = 0;\r
405 this.height = 0;\r
406 this.start = 0;\r
407 this.extent = 0;\r
408 Clazz.instantialize (this, arguments);\r
409 }, java.awt.geom.Arc2D, "Double", java.awt.geom.Arc2D);\r
410 Clazz.makeConstructor (c$, \r
411 function () {\r
412 Clazz.superConstructor (this, java.awt.geom.Arc2D.Double, [0]);\r
413 });\r
414 Clazz.makeConstructor (c$, \r
415 function (a, b, c, d, e, f, g) {\r
416 Clazz.superConstructor (this, java.awt.geom.Arc2D.Double, [g]);\r
417 this.x = a;\r
418 this.y = b;\r
419 this.width = c;\r
420 this.height = d;\r
421 this.start = e;\r
422 this.extent = f;\r
423 }, "~N,~N,~N,~N,~N,~N,~N");\r
424 Clazz.makeConstructor (c$, \r
425 function (a, b, c, d) {\r
426 Clazz.superConstructor (this, java.awt.geom.Arc2D.Double, [d]);\r
427 this.x = a.getX ();\r
428 this.y = a.getY ();\r
429 this.width = a.getWidth ();\r
430 this.height = a.getHeight ();\r
431 this.start = b;\r
432 this.extent = c;\r
433 }, "java.awt.geom.Rectangle2D,~N,~N,~N");\r
434 Clazz.defineMethod (c$, "getX", \r
435 function () {\r
436 return this.x;\r
437 });\r
438 Clazz.defineMethod (c$, "getY", \r
439 function () {\r
440 return this.y;\r
441 });\r
442 Clazz.defineMethod (c$, "getWidth", \r
443 function () {\r
444 return this.width;\r
445 });\r
446 Clazz.defineMethod (c$, "getHeight", \r
447 function () {\r
448 return this.height;\r
449 });\r
450 Clazz.overrideMethod (c$, "getAngleStart", \r
451 function () {\r
452 return this.start;\r
453 });\r
454 Clazz.overrideMethod (c$, "getAngleExtent", \r
455 function () {\r
456 return this.extent;\r
457 });\r
458 Clazz.overrideMethod (c$, "isEmpty", \r
459 function () {\r
460 return (this.width <= 0.0 || this.height <= 0.0);\r
461 });\r
462 Clazz.defineMethod (c$, "setArc", \r
463 function (a, b, c, d, e, f, g) {\r
464 this.setArcType (g);\r
465 this.x = a;\r
466 this.y = b;\r
467 this.width = c;\r
468 this.height = d;\r
469 this.start = e;\r
470 this.extent = f;\r
471 }, "~N,~N,~N,~N,~N,~N,~N");\r
472 Clazz.defineMethod (c$, "setAngleStart", \r
473 function (a) {\r
474 this.start = a;\r
475 }, "~N");\r
476 Clazz.overrideMethod (c$, "setAngleExtent", \r
477 function (a) {\r
478 this.extent = a;\r
479 }, "~N");\r
480 Clazz.overrideMethod (c$, "makeBounds", \r
481 function (a, b, c, d) {\r
482 return  new java.awt.geom.Rectangle2D.Double (a, b, c, d);\r
483 }, "~N,~N,~N,~N");\r
484 c$ = Clazz.p0p ();\r
485 Clazz.defineStatics (c$,\r
486 "OPEN", 0,\r
487 "CHORD", 1,\r
488 "PIE", 2);\r
489 });\r