Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.geometry / org.gvsig.fmap.geometry.impl / src / main / java / org / gvsig / fmap / geom / primitive / impl / Arc2D.java @ 40559

History | View | Annotate | Download (18.6 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program 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 this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.fmap.geom.primitive.impl;
25

    
26
import java.awt.geom.AffineTransform;
27
import java.awt.geom.Point2D;
28
import java.awt.geom.Rectangle2D;
29
import java.util.ArrayList;
30

    
31
import org.cresques.cts.IProjection;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

    
35
import org.gvsig.fmap.geom.Geometry;
36
import org.gvsig.fmap.geom.GeometryLocator;
37
import org.gvsig.fmap.geom.GeometryManager;
38
import org.gvsig.fmap.geom.handler.AbstractHandler;
39
import org.gvsig.fmap.geom.handler.CenterHandler;
40
import org.gvsig.fmap.geom.handler.FinalHandler;
41
import org.gvsig.fmap.geom.handler.Handler;
42
import org.gvsig.fmap.geom.primitive.Arc;
43
import org.gvsig.fmap.geom.primitive.FShape;
44
import org.gvsig.fmap.geom.primitive.GeneralPathX;
45
import org.gvsig.fmap.geom.primitive.Point;
46
import org.gvsig.fmap.geom.type.GeometryType;
47
import org.gvsig.fmap.geom.util.UtilFunctions;
48

    
49

    
50

    
51
/**
52
 * DOCUMENT ME!
53
 *
54
 * @author Vicente Caballero Navarro
55
 */
56
public class Arc2D extends Curve2D implements Arc {
57
        private static final long serialVersionUID = 6416027005106924030L;
58
        
59
        private static final Logger logger = LoggerFactory.getLogger(Arc2D.class);
60

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

    
134
        }
135
        
136
        /*
137
         * (non-Javadoc)
138
         * @see org.gvsig.fmap.geom.primitive.impl.Curve2D#getShapeType()
139
         */
140
        public int getShapeType() {
141
                return TYPES.ARC;
142
        }
143
        
144
        /*
145
         * (non-Javadoc)
146
         * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
147
         */
148
        public Handler[] getStretchingHandlers() {
149
                ArrayList handlers = new ArrayList();
150

    
151
                handlers.add(new InitHandler(0, init.getX(), init.getY()));
152
                //handlers.add(new CenterHandler(1, center.getX(), center.getY()));
153
                handlers.add(new EndHandler(1, end.getX(), end.getY()));
154

    
155
                return (Handler[]) handlers.toArray(new Handler[0]);
156
        }
157

    
158
        /*
159
         * (non-Javadoc)
160
         * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
161
         */        
162
        public Handler[] getSelectHandlers() {
163
                ArrayList handlers = new ArrayList();
164

    
165
                handlers.add(new InitSelHandler(0, init.getX(), init.getY()));
166
                handlers.add(new CenterSelHandler(1, middle.getX(), middle.getY()));
167
                handlers.add(new EndSelHandler(2, end.getX(), end.getY()));
168

    
169
                return (Handler[]) handlers.toArray(new Handler[0]);
170
        }
171
        /**
172
         * DOCUMENT ME!
173
         *
174
         * @author Vicente Caballero Navarro
175
         */        
176
        class CenterSelHandler extends AbstractHandler implements CenterHandler{
177
                /**
178
                 * Crea un nuevo PointHandler.
179
                 *
180
                 * @param i DOCUMENT ME!
181
                 * @param x DOCUMENT ME!
182
                 * @param y DOCUMENT ME!
183
                 */
184
                public CenterSelHandler(int i, double x, double y) {
185
                    middle = new Point2D.Double(x, y);
186
                        index = i;
187
                }
188

    
189
                /**
190
                 * DOCUMENT ME!
191
                 *
192
                 * @param x DOCUMENT ME!
193
                 * @param y DOCUMENT ME!
194
                 *
195
                 * @return DOCUMENT ME!
196
                 */
197
                public void move(double x, double y) {
198
                }
199
                public void setPoint(Point2D p){
200
                    middle=p;
201
                }
202
                public Point2D getPoint(){
203
                        return middle;
204
                }
205

    
206
                /**
207
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
208
                 */
209
                public void set(double x, double y) {
210
                    middle=new Point2D.Double(x,y);
211
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init, middle, end);
212
                        gp = new GeneralPathX(arco.getPathIterator(null));
213
                }
214
        }
215

    
216
        /**
217
         * DOCUMENT ME!
218
         *
219
         * @author Vicente Caballero Navarro
220
         */
221
        class InitHandler extends AbstractHandler implements FinalHandler{
222
                /**
223
                 * Crea un nuevo PointHandler.
224
                 *
225
                 * @param i DOCUMENT ME!
226
                 * @param x DOCUMENT ME!
227
                 * @param y DOCUMENT ME!
228
                 */
229
                public InitHandler(int i, double x, double y) {
230
                        init = new Point2D.Double(x, y);
231
                        index = i;
232
                }
233

    
234
                /**
235
                 * DOCUMENT ME!
236
                 *
237
                 * @param x DOCUMENT ME!
238
                 * @param y DOCUMENT ME!
239
                 *
240
                 * @return DOCUMENT ME!
241
                 */
242
                public void move(double x, double y) {
243
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
244
                        double dist=mediop.distance(middle);
245
                        init=new Point2D.Double(init.getX()+x,init.getY()+y);
246

    
247
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
248
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
249
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
250
                                dist=-dist;
251
                        }
252
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
253

    
254
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
255
                        gp=new GeneralPathX(arco.getPathIterator(null));
256
                }
257
                public void setPoint(Point2D p){
258
                        init=p;
259
                }
260
                public Point2D getPoint(){
261
                        return init;
262
                }
263

    
264
                /**
265
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
266
                 */
267
                public void set(double x, double y) {
268
                        }
269
        }
270

    
271
        /**
272
         * DOCUMENT ME!
273
         *
274
         * @author Vicente Caballero Navarro
275
         */
276
        class EndHandler extends AbstractHandler implements FinalHandler{
277
                /**
278
                 * Crea un nuevo PointHandler.
279
                 *
280
                 * @param i DOCUMENT ME!
281
                 * @param x DOCUMENT ME!
282
                 * @param y DOCUMENT ME!
283
                 */
284
                public EndHandler(int i, double x, double y) {
285
                        end = new Point2D.Double(x, y);
286
                        index = i;
287
                }
288

    
289
                /**
290
                 * DOCUMENT ME!
291
                 *
292
                 * @param x DOCUMENT ME!
293
                 * @param y DOCUMENT ME!
294
                 *
295
                 * @return DOCUMENT ME!
296
                 */
297
                public void move(double x, double y) {
298
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
299
                        double dist=mediop.distance(middle);
300
                        end=new Point2D.Double(end.getX()+x,end.getY()+y);
301

    
302
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
303
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
304
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
305
                                dist=-dist;
306
                        }
307
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
308

    
309
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
310
                        gp=new GeneralPathX(arco.getPathIterator(null));
311
                }
312
                public void setPoint(Point2D p){
313
                        end=p;
314
                }
315
                public Point2D getPoint(){
316
                        return end;
317
                }
318

    
319
                /**
320
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
321
                 */
322
                public void set(double x, double y) {
323

    
324
                }
325
        }
326

    
327
        /**
328
         * DOCUMENT ME!
329
         *
330
         * @author Vicente Caballero Navarro
331
         */
332
        class InitSelHandler extends AbstractHandler implements FinalHandler{
333
                /**
334
                 * Crea un nuevo PointHandler.
335
                 *
336
                 * @param i DOCUMENT ME!
337
                 * @param x DOCUMENT ME!
338
                 * @param y DOCUMENT ME!
339
                 */
340
                public InitSelHandler(int i, double x, double y) {
341
                        init = new Point2D.Double(x, y);
342
                        index = i;
343
                }
344

    
345
                /**
346
                 * DOCUMENT ME!
347
                 *
348
                 * @param x DOCUMENT ME!
349
                 * @param y DOCUMENT ME!
350
                 *
351
                 * @return DOCUMENT ME!
352
                 */
353
                public void move(double x, double y) {
354
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
355
                        double dist=mediop.distance(middle);
356
                        init=new Point2D.Double(init.getX()+x,init.getY()+y);
357

    
358
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
359
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
360
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
361
                                dist=-dist;
362
                        }
363
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
364

    
365
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
366
                        gp=new GeneralPathX(arco.getPathIterator(null));
367
                }
368
                public void setPoint(Point2D p){
369
                        init=p;
370
                }
371
                public Point2D getPoint(){
372
                        return init;
373
                }
374

    
375
                /**
376
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
377
                 */
378
                public void set(double x, double y) {
379
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
380
                        double dist=mediop.distance(middle);
381
                        init=new Point2D.Double(x,y);
382

    
383
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
384
                        // TODO comentado para quitar warning: Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
385
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
386
                                dist=-dist;
387
                        }
388
                        ///center=TrigonometricalFunctions.getPoint(mediop,perp[1],dist);
389
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
390
                        gp=new GeneralPathX(arco.getPathIterator(null));
391
                }
392
        }
393

    
394
        /**
395
         * DOCUMENT ME!
396
         *
397
         * @author Vicente Caballero Navarro
398
         */
399
        class EndSelHandler extends AbstractHandler implements FinalHandler{
400
                /**
401
                 * Crea un nuevo PointHandler.
402
                 *
403
                 * @param i DOCUMENT ME!
404
                 * @param x DOCUMENT ME!
405
                 * @param y DOCUMENT ME!
406
                 */
407
                public EndSelHandler(int i, double x, double y) {
408
                        end = new Point2D.Double(x, y);
409
                        index = i;
410
                }
411

    
412
                /**
413
                 * DOCUMENT ME!
414
                 *
415
                 * @param x DOCUMENT ME!
416
                 * @param y DOCUMENT ME!
417
                 *
418
                 * @return DOCUMENT ME!
419
                 */
420
                public void move(double x, double y) {
421
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
422
                        double dist=mediop.distance(middle);
423
                        end=new Point2D.Double(end.getX()+x,end.getY()+y);
424

    
425
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
426
                        Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
427
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
428
                                dist=-dist;
429
                        }
430
                        middle=UtilFunctions.getPoint(mediop,perp[1],dist);
431

    
432
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
433
                        gp=new GeneralPathX(arco.getPathIterator(null));
434
                }
435
                public void setPoint(Point2D p){
436
                        end=p;
437
                }
438
                public Point2D getPoint(){
439
                        return end;
440
                }
441

    
442
                /**
443
                 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
444
                 */
445
                public void set(double x, double y) {
446
                        Point2D mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
447
                        double dist=mediop.distance(middle);
448
                        end=new Point2D.Double(x,y);
449

    
450
                        mediop=new Point2D.Double((init.getX()+end.getX())/2,(init.getY()+end.getY())/2);
451
                        // TODO comentado para quitar warning: Point2D[] perp=UtilFunctions.getPerpendicular(init,end,mediop);
452
                        if (UtilFunctions.getAngle(end,init)<=Math.PI){
453
                                dist=-dist;
454
                        }
455
                        ///center=TrigonometricalFunctions.getPoint(mediop,perp[1],dist);
456
                        java.awt.geom.Arc2D arco = UtilFunctions.createArc(init,middle, end);
457
                        gp=new GeneralPathX(arco.getPathIterator(null));
458
                }
459
        }
460

    
461
        /* (non-Javadoc)
462
         * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
463
         */
464
        public boolean intersects(Rectangle2D r) {
465
                return gp.intersects(r);
466
        }
467

    
468
        /* (non-Javadoc)
469
         * @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)
470
         */
471
        public void setPoints(Point p1, Point p2, Point p3) {
472
                Point2D _p1 = new java.awt.geom.Point2D.Double(p1.getCoordinateAt(0), p1.getCoordinateAt(1));
473
                Point2D _p2 = new java.awt.geom.Point2D.Double(p2.getCoordinateAt(0), p2.getCoordinateAt(1));
474
                Point2D _p3 = new java.awt.geom.Point2D.Double(p3.getCoordinateAt(0), p3.getCoordinateAt(1));
475
                setPoints(_p1, _p2, _p3);
476
        }
477

    
478
        /* (non-Javadoc)
479
         * @see org.gvsig.fmap.geom.primitive.Curve2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
480
         */
481
        public void setGeneralPath(GeneralPathX generalPathX) {
482
                throw new UnsupportedOperationException("Use setPoints(Point p1, Point p2, Point p3)");
483
        }
484

    
485
        /* (non-Javadoc)
486
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, java.awt.geom.Point2D)
487
         */
488
        private void setPoints(Point2D p1, Point2D p2, Point2D p3) {
489
                java.awt.geom.Arc2D arco = UtilFunctions.createArc(p1, p2, p3);
490
                if (arco == null) {
491
            logger.info("Did not set arc points (probably aligned points): "
492
                + p1.getX() + " " + p1.getY() + " :: "
493
                + p2.getX() + " " + p2.getY() + " :: "
494
                + p3.getX() + " " + p3.getY());
495
                    throw new IllegalArgumentException("Did not set arc points (probably aligned points).");
496
                }
497
                this.gp = new GeneralPathX(arco.getPathIterator(null));
498
                this.init = p1;
499
        this.middle = p2;
500
                this.end = p3;
501
        }
502

    
503
        /* (non-Javadoc)
504
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(org.gvsig.fmap.geom.primitive.Point, double, double, double)
505
         */
506
        public void setPoints(Point center, double radius, double initAngle,
507
                        double angleExt) {
508
                Point2D _center = new java.awt.geom.Point2D.Double(center.getCoordinateAt(0), center.getCoordinateAt(1));
509
                setPoints(_center, radius, initAngle, angleExt);
510
        }
511
        
512
    /* (non-Javadoc)
513
     * @see org.gvsig.fmap.geom.primitive.Arc#setPointsStartExt(org.gvsig.fmap.geom.primitive.Point, double, double, double)
514
     */
515
    public void setPointsStartExt(Point center, double radius,
516
        double startAngle, double angleExt) {
517
        
518
        setPoints(center, radius, startAngle, angleExt);
519
    }
520

    
521
    /* (non-Javadoc)
522
     * @see org.gvsig.fmap.geom.primitive.Arc#setPointsStartEnd(org.gvsig.fmap.geom.primitive.Point, double, double, double)
523
     */
524
    public void setPointsStartEnd(Point center, double radius,
525
        double startAngle, double endAngle) {
526
        
527
        if (startAngle == endAngle) {
528
            setPointsStartExt(center, radius, startAngle, 0);
529
        } else {
530
            
531
            /*
532
             * Normalize then force clockwise:
533
             */
534
            double norm_start = normalizeAngle(startAngle);
535
            double norm_end = normalizeAngle(endAngle);
536
            double ang_ext = 0;
537

    
538
            // clockwise
539
            // ang_ext must be positive
540
            if (norm_start >= norm_end) {
541
                ang_ext = norm_start - norm_end;
542
            } else {
543
                ang_ext = 2 * Math.PI - (norm_end - norm_start);
544
            }
545

    
546
            // finally call other method with ang_ext
547
            setPointsStartExt(center, radius, startAngle, ang_ext);
548
        }
549
    }
550

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

    
589
    /* (non-Javadoc)
590
         * @see org.gvsig.fmap.geom.primitive.Arc#setPoints(java.awt.geom.Point2D, double, double, double)
591
         */
592
        private void setPoints(Point2D center, double radius, double initAngle,
593
                        double angleExt) {
594
                java.awt.geom.Arc2D arco = UtilFunctions.createArc(center, radius, initAngle, angleExt);
595

    
596
                java.awt.geom.Arc2D semiarco = UtilFunctions.createArc(center, radius, initAngle, angleExt/2);
597
                if (arco == null || semiarco == null) {
598
                    logger.info("Did not set arc points (probably aligned points)");
599
                        return;
600
                }
601

    
602
                Point2D p1 = arco.getStartPoint();
603
                Point2D p2 = semiarco.getEndPoint();
604
                Point2D p3 = arco.getEndPoint();
605

    
606
                setPoints(p1, p2, p3);                
607
        }
608
        
609

    
610

    
611
        /* (non-Javadoc)
612
         * @see org.gvsig.fmap.geom.primitive.Curve2D#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point)
613
         */
614
        public void setPoints(Point startPoint, Point endPoint) {
615
                throw new UnsupportedOperationException("Use setGeneralPathX");
616
        }
617

    
618
        /* (non-Javadoc)
619
         * @see org.gvsig.fmap.geom.primitive.Arc#getEndPoint()
620
         */
621
        public Point getEndPoint() {
622
                return new org.gvsig.fmap.geom.primitive.impl.Point2D(end.getX(), end.getY());
623
        }
624

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

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

    
644

    
645

    
646
                
647
}