Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_geometries / src / org / gvsig / fmap / geom / primitive / impl / Arc2D.java @ 38786

History | View | Annotate | Download (18.4 KB)

1
/*
2
 * Created on 09-feb-2005
3
 *
4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 *
6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
21
   USA.
22
 *
23
 * For more information, contact:
24
 *
25
 *  Generalitat Valenciana
26
 *   Conselleria d'Infraestructures i Transport
27
 *   Av. Blasco Ib??ez, 50
28
 *   46010 VALENCIA
29
 *   SPAIN
30
 *
31
 *      +34 963862235
32
 *   gvsig@gva.es
33
 *      www.gvsig.gva.es
34
 *
35
 *    or
36
 *
37
 *   IVER T.I. S.A
38
 *   Salamanca 50
39
 *   46005 Valencia
40
 *   Spain
41
 *
42
 *   +34 963163400
43
 *   dac@iver.es
44
 */
45
package org.gvsig.fmap.geom.primitive.impl;
46

    
47
import java.awt.geom.AffineTransform;
48
import java.awt.geom.Point2D;
49
import java.awt.geom.Rectangle2D;
50
import java.util.ArrayList;
51

    
52
import org.cresques.cts.IProjection;
53
import org.gvsig.fmap.geom.Geometry;
54
import org.gvsig.fmap.geom.GeometryLocator;
55
import org.gvsig.fmap.geom.GeometryManager;
56
import org.gvsig.fmap.geom.handler.AbstractHandler;
57
import org.gvsig.fmap.geom.handler.CenterHandler;
58
import org.gvsig.fmap.geom.handler.FinalHandler;
59
import org.gvsig.fmap.geom.handler.Handler;
60
import org.gvsig.fmap.geom.primitive.Arc;
61
import org.gvsig.fmap.geom.primitive.FShape;
62
import org.gvsig.fmap.geom.primitive.GeneralPathX;
63
import org.gvsig.fmap.geom.primitive.Point;
64
import org.gvsig.fmap.geom.type.GeometryType;
65
import org.gvsig.fmap.geom.util.UtilFunctions;
66

    
67

    
68

    
69
/**
70
 * DOCUMENT ME!
71
 *
72
 * @author Vicente Caballero Navarro
73
 */
74
public class Arc2D extends Curve2D implements Arc {
75
        private static final long serialVersionUID = 6416027005106924030L;
76

    
77
        private Point2D init;
78
        
79
        /**
80
         * This is the middle point (belongs to the arc), not the center
81
         * of the circle/ellipse
82
         */
83
        private Point2D middle;
84
        private Point2D end;
85
        
86
        private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
87
                
88
        /**
89
         * The constructor with the GeometryType like and argument 
90
         * is used by the {@link GeometryType}{@link #create()}
91
         * to create the geometry
92
         * @param type
93
         * The geometry type
94
         */
95
        public Arc2D(GeometryType geometryType) {
96
                super(geometryType);                
97
        }
98
        
99
        /**
100
         * Constructor used in the {@link Geometry#cloneGeometry()} method
101
         * @param id
102
         * @param projection
103
         * @param gpx
104
         * @param i
105
         * @param c
106
         * @param e
107
         */
108
        protected Arc2D(GeometryType geometryType, String id, IProjection projection, GeneralPathX gpx, Point2D i,Point2D c, Point2D e) {
109
                super(geometryType, id, projection, gpx);
110
                init=i;
111
                middle=c;
112
                end=e;
113
        }        
114
        
115
        /* (non-Javadoc)
116
         * @see com.iver.cit.gvsig.fmap.core.FShape#cloneFShape()
117
         */
118
        public FShape cloneFShape() {
119
                Arc2D arc = new Arc2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone(),init,middle,end);
120
                return arc;
121
        }
122
        
123
        /*
124
         * (non-Javadoc)
125
         * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
126
         */
127
        public void transform(AffineTransform at) {
128
                gp.transform(at);
129
                InitHandler inithandler=(InitHandler)getStretchingHandlers()[0];
130
                //CenterHandler centerhandler=(CenterHandler)getHandlers()[1];
131
                EndHandler endhandler=(EndHandler)getStretchingHandlers()[1];
132
                Point2D aux1=new Point2D.Double();
133
                Point2D aux2=new Point2D.Double();
134
                Point2D aux3=new Point2D.Double();
135
                at.transform(inithandler.getPoint(),aux1);
136
                inithandler.setPoint(aux1);
137
                //at.transform(centerhandler.getPoint(),aux2);
138
                //centerhandler.setPoint(aux2);
139
                at.transform(endhandler.getPoint(),aux3);
140
                endhandler.setPoint(aux3);
141
                CenterSelHandler centerhandler=(CenterSelHandler)getSelectHandlers()[1];
142
                at.transform(centerhandler.getPoint(),aux2);
143
                centerhandler.setPoint(aux2);
144

    
145
        }
146
        
147
        /*
148
         * (non-Javadoc)
149
         * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#getShapeType()
150
         */
151
        public int getShapeType() {
152
                return TYPES.ARC;
153
        }
154
        
155
        /*
156
         * (non-Javadoc)
157
         * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
158
         */
159
        public Handler[] getStretchingHandlers() {
160
                ArrayList handlers = new ArrayList();
161

    
162
                handlers.add(new InitHandler(0, init.getX(), init.getY()));
163
                //handlers.add(new CenterHandler(1, center.getX(), center.getY()));
164
                handlers.add(new EndHandler(1, end.getX(), end.getY()));
165

    
166
                return (Handler[]) handlers.toArray(new Handler[0]);
167
        }
168

    
169
        /*
170
         * (non-Javadoc)
171
         * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
172
         */        
173
        public Handler[] getSelectHandlers() {
174
                ArrayList handlers = new ArrayList();
175

    
176
                handlers.add(new InitSelHandler(0, init.getX(), init.getY()));
177
                handlers.add(new CenterSelHandler(1, middle.getX(), middle.getY()));
178
                handlers.add(new EndSelHandler(2, end.getX(), end.getY()));
179

    
180
                return (Handler[]) handlers.toArray(new Handler[0]);
181
        }
182
        /**
183
         * DOCUMENT ME!
184
         *
185
         * @author Vicente Caballero Navarro
186
         */        
187
        class CenterSelHandler extends AbstractHandler implements CenterHandler{
188
                /**
189
                 * Crea un nuevo PointHandler.
190
                 *
191
                 * @param i DOCUMENT ME!
192
                 * @param x DOCUMENT ME!
193
                 * @param y DOCUMENT ME!
194
                 */
195
                public CenterSelHandler(int i, double x, double y) {
196
                    middle = new Point2D.Double(x, y);
197
                        index = i;
198
                }
199

    
200
                /**
201
                 * DOCUMENT ME!
202
                 *
203
                 * @param x DOCUMENT ME!
204
                 * @param y DOCUMENT ME!
205
                 *
206
                 * @return DOCUMENT ME!
207
                 */
208
                public void move(double x, double y) {
209
                }
210
                public void setPoint(Point2D p){
211
                    middle=p;
212
                }
213
                public Point2D getPoint(){
214
                        return middle;
215
                }
216

    
217
                /**
218
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
219
                 */
220
                public void set(double x, double y) {
221
                    middle=new Point2D.Double(x,y);
222
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init, middle, end);
223
                        gp = new GeneralPathX(arco.getPathIterator(null));
224
                }
225
        }
226

    
227
        /**
228
         * DOCUMENT ME!
229
         *
230
         * @author Vicente Caballero Navarro
231
         */
232
        class InitHandler extends AbstractHandler implements FinalHandler{
233
                /**
234
                 * Crea un nuevo PointHandler.
235
                 *
236
                 * @param i DOCUMENT ME!
237
                 * @param x DOCUMENT ME!
238
                 * @param y DOCUMENT ME!
239
                 */
240
                public InitHandler(int i, double x, double y) {
241
                        init = new Point2D.Double(x, y);
242
                        index = i;
243
                }
244

    
245
                /**
246
                 * DOCUMENT ME!
247
                 *
248
                 * @param x DOCUMENT ME!
249
                 * @param y DOCUMENT ME!
250
                 *
251
                 * @return DOCUMENT ME!
252
                 */
253
                public void move(double x, double y) {
254
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
255
                        double dist=mediop.distance(middle);
256
                        init=new Point2D.Double(init.getX()+x,init.getY()+y);
257

    
258
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
259
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
260
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
261
                                dist=-dist;
262
                        }
263
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
264

    
265
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
266
                        gp=new GeneralPathX(arco.getPathIterator(null));
267
                }
268
                public void setPoint(Point2D p){
269
                        init=p;
270
                }
271
                public Point2D getPoint(){
272
                        return init;
273
                }
274

    
275
                /**
276
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
277
                 */
278
                public void set(double x, double y) {
279
                        }
280
        }
281

    
282
        /**
283
         * DOCUMENT ME!
284
         *
285
         * @author Vicente Caballero Navarro
286
         */
287
        class EndHandler extends AbstractHandler implements FinalHandler{
288
                /**
289
                 * Crea un nuevo PointHandler.
290
                 *
291
                 * @param i DOCUMENT ME!
292
                 * @param x DOCUMENT ME!
293
                 * @param y DOCUMENT ME!
294
                 */
295
                public EndHandler(int i, double x, double y) {
296
                        end = new Point2D.Double(x, y);
297
                        index = i;
298
                }
299

    
300
                /**
301
                 * DOCUMENT ME!
302
                 *
303
                 * @param x DOCUMENT ME!
304
                 * @param y DOCUMENT ME!
305
                 *
306
                 * @return DOCUMENT ME!
307
                 */
308
                public void move(double x, double y) {
309
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
310
                        double dist=mediop.distance(middle);
311
                        end=new Point2D.Double(end.getX()+x,end.getY()+y);
312

    
313
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
314
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
315
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
316
                                dist=-dist;
317
                        }
318
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
319

    
320
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
321
                        gp=new GeneralPathX(arco.getPathIterator(null));
322
                }
323
                public void setPoint(Point2D p){
324
                        end=p;
325
                }
326
                public Point2D getPoint(){
327
                        return end;
328
                }
329

    
330
                /**
331
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
332
                 */
333
                public void set(double x, double y) {
334

    
335
                }
336
        }
337

    
338
        /**
339
         * DOCUMENT ME!
340
         *
341
         * @author Vicente Caballero Navarro
342
         */
343
        class InitSelHandler extends AbstractHandler implements FinalHandler{
344
                /**
345
                 * Crea un nuevo PointHandler.
346
                 *
347
                 * @param i DOCUMENT ME!
348
                 * @param x DOCUMENT ME!
349
                 * @param y DOCUMENT ME!
350
                 */
351
                public InitSelHandler(int i, double x, double y) {
352
                        init = new Point2D.Double(x, y);
353
                        index = i;
354
                }
355

    
356
                /**
357
                 * DOCUMENT ME!
358
                 *
359
                 * @param x DOCUMENT ME!
360
                 * @param y DOCUMENT ME!
361
                 *
362
                 * @return DOCUMENT ME!
363
                 */
364
                public void move(double x, double y) {
365
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
366
                        double dist=mediop.distance(middle);
367
                        init=new Point2D.Double(init.getX()+x,init.getY()+y);
368

    
369
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
370
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
371
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
372
                                dist=-dist;
373
                        }
374
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
375

    
376
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
377
                        gp=new GeneralPathX(arco.getPathIterator(null));
378
                }
379
                public void setPoint(Point2D p){
380
                        init=p;
381
                }
382
                public Point2D getPoint(){
383
                        return init;
384
                }
385

    
386
                /**
387
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
388
                 */
389
                public void set(double x, double y) {
390
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
391
                        double dist=mediop.distance(middle);
392
                        init=new Point2D.Double(x,y);
393

    
394
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
395
                        // TODO comentado para quitar warning: Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
396
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
397
                                dist=-dist;
398
                        }
399
                        ///center=TrigonometricalFunctions.getPoint(mediop,perp[1],dist);
400
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
401
                        gp=new GeneralPathX(arco.getPathIterator(null));
402
                }
403
        }
404

    
405
        /**
406
         * DOCUMENT ME!
407
         *
408
         * @author Vicente Caballero Navarro
409
         */
410
        class EndSelHandler extends AbstractHandler implements FinalHandler{
411
                /**
412
                 * Crea un nuevo PointHandler.
413
                 *
414
                 * @param i DOCUMENT ME!
415
                 * @param x DOCUMENT ME!
416
                 * @param y DOCUMENT ME!
417
                 */
418
                public EndSelHandler(int i, double x, double y) {
419
                        end = new Point2D.Double(x, y);
420
                        index = i;
421
                }
422

    
423
                /**
424
                 * DOCUMENT ME!
425
                 *
426
                 * @param x DOCUMENT ME!
427
                 * @param y DOCUMENT ME!
428
                 *
429
                 * @return DOCUMENT ME!
430
                 */
431
                public void move(double x, double y) {
432
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
433
                        double dist=mediop.distance(middle);
434
                        end=new Point2D.Double(end.getX()+x,end.getY()+y);
435

    
436
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
437
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
438
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
439
                                dist=-dist;
440
                        }
441
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
442

    
443
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
444
                        gp=new GeneralPathX(arco.getPathIterator(null));
445
                }
446
                public void setPoint(Point2D p){
447
                        end=p;
448
                }
449
                public Point2D getPoint(){
450
                        return end;
451
                }
452

    
453
                /**
454
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
455
                 */
456
                public void set(double x, double y) {
457
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
458
                        double dist=mediop.distance(middle);
459
                        end=new Point2D.Double(x,y);
460

    
461
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
462
                        // TODO comentado para quitar warning: Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
463
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
464
                                dist=-dist;
465
                        }
466
                        ///center=TrigonometricalFunctions.getPoint(mediop,perp[1],dist);
467
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
468
                        gp=new GeneralPathX(arco.getPathIterator(null));
469
                }
470
        }
471

    
472
        /* (non-Javadoc)
473
         * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
474
         */
475
        public boolean intersects(Rectangle2D r) {
476
                return gp.intersects(r);
477
        }
478

    
479
        /* (non-Javadoc)
480
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
481
         */
482
        public void setPoints(Point p1, Point p2, Point p3) {
483
                Point2D _p1 = new java.awt.geom.Point2D.Double(p1.getCoordinateAt(0), p1.getCoordinateAt(1));
484
                Point2D _p2 = new java.awt.geom.Point2D.Double(p2.getCoordinateAt(0), p2.getCoordinateAt(1));
485
                Point2D _p3 = new java.awt.geom.Point2D.Double(p3.getCoordinateAt(0), p3.getCoordinateAt(1));
486
                setPoints(_p1, _p2, _p3);
487
        }
488

    
489
        /* (non-Javadoc)
490
         * @see org.gvsig.fmap.geom.primitive.Curve2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
491
         */
492
        public void setGeneralPath(GeneralPathX generalPathX) {
493
                throw new UnsupportedOperationException("Use setPoints(Point p1, Point p2, Point p3)");
494
        }
495

    
496
        /* (non-Javadoc)
497
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, java.awt.geom.Point2D)
498
         */
499
        private void setPoints(Point2D p1, Point2D p2, Point2D p3) {
500
                java.awt.geom.Arc2D arco = UtilFunctions.createArc(p1, p2, p3);
501
                if (arco == null) {
502
                        throw new IllegalArgumentException();
503
                }
504
                this.gp = new GeneralPathX(arco.getPathIterator(null));
505
                this.init = p1;
506
        this.middle = p2;
507
                this.end = p3;
508
        }
509

    
510
        /* (non-Javadoc)
511
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, double, double, double)
512
         */
513
        public void setPoints(Point center, double radius, double initAngle,
514
                        double angleExt) {
515
                Point2D _center = new java.awt.geom.Point2D.Double(center.getCoordinateAt(0), center.getCoordinateAt(1));
516
                setPoints(_center, radius, initAngle, angleExt);
517
        }
518
        
519
    /* (non-Javadoc)
520
     * @see org.gvsig.fmap.geom.primitive.Arc#setPointsStartExt(org.gvsig.fmap.geom.primitive.Point, double, double, double)
521
     */
522
    public void setPointsStartExt(Point center, double radius,
523
        double startAngle, double angleExt) {
524
        
525
        setPoints(center, radius, startAngle, angleExt);
526
    }
527

    
528
    /* (non-Javadoc)
529
     * @see org.gvsig.fmap.geom.primitive.Arc#setPointsStartEnd(org.gvsig.fmap.geom.primitive.Point, double, double, double)
530
     */
531
    public void setPointsStartEnd(Point center, double radius,
532
        double startAngle, double endAngle) {
533
        
534
        if (startAngle == endAngle) {
535
            setPointsStartExt(center, radius, startAngle, 0);
536
        } else {
537
            
538
            /*
539
             * Normalize then force clockwise:
540
             */
541
            double norm_start = normalizeAngle(startAngle);
542
            double norm_end = normalizeAngle(endAngle);
543
            double ang_ext = 0;
544

    
545
            // clockwise
546
            // ang_ext must be positive
547
            if (norm_start >= norm_end) {
548
                ang_ext = norm_start - norm_end;
549
            } else {
550
                ang_ext = 2 * Math.PI - (norm_end - norm_start);
551
            }
552

    
553
            // finally call other method with ang_ext
554
            setPointsStartExt(center, radius, startAngle, ang_ext);
555
        }
556
    }
557

    
558
        /**
559
         * Leaves the angle between PI and -PI
560
     * @param angle (radians)
561
     * @return
562
     */
563
    private double normalizeAngle(double angle) {
564
        
565
        if (angle > -Math.PI && angle <= Math.PI) {
566
            return angle;
567
        }
568
        
569
        if (angle == Double.NEGATIVE_INFINITY
570
            || angle == Double.POSITIVE_INFINITY) {
571
            return 0;
572
        }
573
        
574
        double abs_ang = Math.abs(angle);
575
        double remove = Math.floor(abs_ang / (2 * Math.PI));
576
        remove = remove * 2 * Math.PI;
577
        double resp = 0;
578
        
579
        if (angle > 0) {
580
            resp = angle - remove;
581
            if (resp > Math.PI) {
582
                // final adjustment
583
                resp = resp - 2 * Math.PI;
584
            }
585
        } else {
586
            resp = angle + remove;
587
            if (resp <= -Math.PI) {
588
                // final adjustment
589
                resp = resp + 2 * Math.PI;
590
            }
591
        }
592
        
593
        return resp;
594
    }
595

    
596
    /* (non-Javadoc)
597
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, double, double, double)
598
         */
599
        private void setPoints(Point2D center, double radius, double initAngle,
600
                        double angleExt) {
601
                java.awt.geom.Arc2D arco = UtilFunctions.createArc(center, radius, initAngle, angleExt);
602

    
603
                java.awt.geom.Arc2D semiarco = UtilFunctions.createArc(center, radius, initAngle, angleExt/2);
604
                if (arco == null || semiarco == null) {
605
                        return;
606
                }
607

    
608
                Point2D p1 = arco.getStartPoint();
609
                Point2D p2 = semiarco.getEndPoint();
610
                Point2D p3 = arco.getEndPoint();
611

    
612
                setPoints(p1, p2, p3);                
613
        }
614
        
615

    
616

    
617
        /* (non-Javadoc)
618
         * @see org.gvsig.fmap.geom.primitive.Curve2D#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
619
         */
620
        public void setPoints(Point startPoint, Point endPoint) {
621
                throw new UnsupportedOperationException("Use setGeneralPathX");
622
        }
623

    
624
        /* (non-Javadoc)
625
         * @see org.gvsig.fmap.geom.primitive.Arc#getEndPoint()
626
         */
627
        public Point getEndPoint() {
628
                return new org.gvsig.fmap.geom.primitive.impl.Point2D(end.getX(), end.getY());
629
        }
630

    
631
        /* (non-Javadoc)
632
         * @see org.gvsig.fmap.geom.primitive.Arc#getInitPoint()
633
         */
634
        public Point getInitPoint() {
635
                return new org.gvsig.fmap.geom.primitive.impl.Point2D(init.getX(), init.getY());
636
        }
637

    
638
        /* (non-Javadoc)
639
         * @see org.gvsig.fmap.geom.primitive.Arc#getCenterPoint()
640
         */
641
        public Point getCenterPoint() {
642
                Point2D p = UtilFunctions.getCenter(init, middle,end);
643
                try {
644
                        return new org.gvsig.fmap.geom.primitive.impl.Point2D(p.getX(), p.getY());
645
                } catch (Exception e) {
646
                        return  null;
647
                }
648
        }
649

    
650

    
651

    
652
                
653
}