Revision 35475 branches/v2_0_0_prep/libraries/libFMap_geometries/src/org/gvsig/fmap/geom/primitive/impl/Ellipse2D.java

View differences:

Ellipse2D.java
64 64
 * @author Vicente Caballero Navarro
65 65
 */
66 66
public class Ellipse2D extends Surface2D implements Ellipse {
67
	private static final long serialVersionUID = 7624230115118134004L;
67
    private static final long serialVersionUID = 7624230115118134004L;
68 68

  
69
	private Point2D init;
70
	private Point2D end;
71
	private double ydist;
69
    private Point2D init;
70
    private Point2D end;
71
    private double ydist;
72 72

  
73
	/**
74
	 * The constructor with the GeometryType like and argument 
75
	 * is used by the {@link GeometryType}{@link #create()}
76
	 * to create the geometry
77
	 * @param type
78
	 * The geometry type
79
	 */
80
	public Ellipse2D(GeometryType geometryType) {
81
		super(geometryType);		
82
	}
83
	
84
	/**
85
	 * Constructor used in the {@link Geometry#cloneGeometry()} method
86
	 * @param id
87
	 * @param projection
88
	 * @param gpx
89
	 * @param i
90
	 * @param e
91
	 * @param d
92
	 */
93
	Ellipse2D(GeometryType geometryType,String id, IProjection projection, GeneralPathX gpx,
94
			Point2D i, Point2D e, double d) {
95
		super(geometryType, id, projection, gpx);
96
		init = i;
97
		end = e;
98
		ydist = d;
99
	}
73
    /**
74
     * The constructor with the GeometryType like and argument 
75
     * is used by the {@link GeometryType}{@link #create()}
76
     * to create the geometry
77
     * @param type
78
     * The geometry type
79
     */
80
    public Ellipse2D(GeometryType geometryType) {
81
        super(geometryType);		
82
    }
100 83

  
101
	/*
102
	 * (non-Javadoc)
103
	 * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#cloneFShape()
104
	 */
105
	public FShape cloneFShape() {
106
		return new Ellipse2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone(), init,
107
				end, ydist);
108
	}
84
    /**
85
     * Constructor used in the {@link Geometry#cloneGeometry()} method
86
     * @param id
87
     * @param projection
88
     * @param gpx
89
     * @param i
90
     * @param e
91
     * @param d
92
     */
93
    Ellipse2D(GeometryType geometryType,String id, IProjection projection, GeneralPathX gpx,
94
        Point2D i, Point2D e, double d) {
95
        super(geometryType, id, projection, gpx);
96
        init = i;
97
        end = e;
98
        ydist = d;
99
    }
109 100

  
110 101
    /*
111 102
     * (non-Javadoc)
103
     * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#cloneFShape()
104
     */
105
    public FShape cloneFShape() {
106
        return new Ellipse2D(getGeometryType(), id, projection, (GeneralPathX) gp.clone(), init,
107
            end, ydist);
108
    }
109

  
110
    /*
111
     * (non-Javadoc)
112 112
     * @see org.gvsig.fmap.geom.primitive.impl.Surface2D#getShapeType()
113 113
     */     
114
	public int getShapeType() {
115
		return TYPES.ELLIPSE;
116
	}
114
    public int getShapeType() {
115
        return TYPES.ELLIPSE;
116
    }
117 117

  
118
	/*
119
	 * (non-Javadoc)
120
	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
121
	 */
122
	public void transform(AffineTransform at) {
123
		Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
124
				(init.getY() + end.getY()) / 2);
125
		Point2D pdist = UtilFunctions.getPerpendicularPoint(init, end, center,
126
				ydist);
127
		Point2D aux1 = new Point2D.Double();
128
		at.transform(init, aux1);
129
		init = aux1;
130
		Point2D aux2 = new Point2D.Double();
131
		at.transform(end, aux2);
132
		end = aux2;
118
    /*
119
     * (non-Javadoc)
120
     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#transform(java.awt.geom.AffineTransform)
121
     */
122
    public void transform(AffineTransform at) {
123
        Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
124
            (init.getY() + end.getY()) / 2);
125
        Point2D pdist = UtilFunctions.getPerpendicularPoint(init, end, center,
126
            ydist);
127
        Point2D aux1 = new Point2D.Double();
128
        at.transform(init, aux1);
129
        init = aux1;
130
        Point2D aux2 = new Point2D.Double();
131
        at.transform(end, aux2);
132
        end = aux2;
133 133

  
134
		center = new Point2D.Double((init.getX() + end.getX()) / 2, (init
135
				.getY() + end.getY()) / 2);
134
        center = new Point2D.Double((init.getX() + end.getX()) / 2, (init
135
            .getY() + end.getY()) / 2);
136 136

  
137
		Point2D aux3 = new Point2D.Double();
138
		at.transform(pdist, aux3);
139
		ydist = center.distance(aux3);
140
		gp.transform(at);
141
	}
137
        Point2D aux3 = new Point2D.Double();
138
        at.transform(pdist, aux3);
139
        ydist = center.distance(aux3);
140
        gp.transform(at);
141
    }
142 142

  
143
	/*
144
	 * (non-Javadoc)
145
	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
146
	 */
147
	public Handler[] getStretchingHandlers() {
148
		ArrayList handlers = new ArrayList();
149
		Rectangle2D rect = this.getBounds2D();
150
		handlers
151
				.add(new CenterHandler(0, rect.getCenterX(), rect.getCenterY()));
152
		return (Handler[]) handlers.toArray(new Handler[0]);
153
	}
143
    /*
144
     * (non-Javadoc)
145
     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getStretchingHandlers()
146
     */
147
    public Handler[] getStretchingHandlers() {
148
        ArrayList handlers = new ArrayList();
149
        Rectangle2D rect = this.getBounds2D();
150
        handlers
151
        .add(new CenterHandler(0, rect.getCenterX(), rect.getCenterY()));
152
        return (Handler[]) handlers.toArray(new Handler[0]);
153
    }
154 154

  
155
	/*
156
	 * (non-Javadoc)
157
	 * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
158
	 */
159
	public Handler[] getSelectHandlers() {
160
		ArrayList handlers = new ArrayList();
161
		Rectangle2D rect = this.getBounds2D();
162
		handlers.add(new CenterSelHandler(0, rect.getCenterX(), rect
163
				.getCenterY()));
164
		handlers.add(new InitSelHandler(1, init.getX(), init.getY()));
165
		handlers.add(new EndSelHandler(2, end.getX(), end.getY()));
166
		Point2D mediop = new Point2D.Double((end.getX() + init.getX()) / 2,
167
				(end.getY() + init.getY()) / 2);
168
		Point2D[] p = UtilFunctions.getPerpendicular(init, end, mediop);
169
		Point2D u = UtilFunctions.getPoint(mediop, p[1], ydist);
170
		Point2D d = UtilFunctions.getPoint(mediop, p[1], -ydist);
155
    /*
156
     * (non-Javadoc)
157
     * @see org.gvsig.fmap.geom.primitive.impl.OrientablePrimitive2D#getSelectHandlers()
158
     */
159
    public Handler[] getSelectHandlers() {
160
        ArrayList handlers = new ArrayList();
161
        Rectangle2D rect = this.getBounds2D();
162
        handlers.add(new CenterSelHandler(0, rect.getCenterX(), rect
163
            .getCenterY()));
164
        handlers.add(new InitSelHandler(1, init.getX(), init.getY()));
165
        handlers.add(new EndSelHandler(2, end.getX(), end.getY()));
166
        Point2D mediop = new Point2D.Double((end.getX() + init.getX()) / 2,
167
            (end.getY() + init.getY()) / 2);
168
        Point2D[] p = UtilFunctions.getPerpendicular(init, end, mediop);
169
        Point2D u = UtilFunctions.getPoint(mediop, p[1], ydist);
170
        Point2D d = UtilFunctions.getPoint(mediop, p[1], -ydist);
171 171

  
172
		handlers.add(new RadioSelYHandler(3, u.getX(), u.getY()));
173
		handlers.add(new RadioSelYHandler(4, d.getX(), d.getY()));
172
        handlers.add(new RadioSelYHandler(3, u.getX(), u.getY()));
173
        handlers.add(new RadioSelYHandler(4, d.getX(), d.getY()));
174 174

  
175
		return (Handler[]) handlers.toArray(new Handler[0]);
176
	}
175
        return (Handler[]) handlers.toArray(new Handler[0]);
176
    }
177 177

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

  
199
		/**
200
		 * DOCUMENT ME!
201
		 *
202
		 * @param x
203
		 *            DOCUMENT ME!
204
		 * @param y
205
		 *            DOCUMENT ME!
206
		 *
207
		 * @return DOCUMENT ME!
208
		 */
209
		public void move(double x, double y) {
210
			for (int i = 0; i < gp.getNumCoords() / 2; i++) {
211
				gp.getPointCoords()[i * 2] += x;
212
				gp.getPointCoords()[i * 2 + 1] += y;
213
			}
214
			init = new Point2D.Double(init.getX() + x, init.getY() + y);
215
			end = new Point2D.Double(end.getX() + x, end.getY() + y);
216
		}
199
        /**
200
         * DOCUMENT ME!
201
         *
202
         * @param x
203
         *            DOCUMENT ME!
204
         * @param y
205
         *            DOCUMENT ME!
206
         *
207
         * @return DOCUMENT ME!
208
         */
209
        public void move(double x, double y) {
210
            Point point;
211
            for (int i = 0; i < gp.getNumCoords() ; i++) {
212
                point = gp.getPointAt(i);
213
                point.setX(point.getX() + x);
214
                point.setY(point.getY() + y);
215
            }
216
            init = new Point2D.Double(init.getX() + x, init.getY() + y);
217
            end = new Point2D.Double(end.getX() + x, end.getY() + y);
218
        }
217 219

  
218
		/**
219
		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
220
		 */
221
		public void set(double x, double y) {
222
		}
223
	}
220
        /**
221
         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
222
         */
223
        public void set(double x, double y) {
224
        }
225
    }
224 226

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

  
246
		/**
247
		 * DOCUMENT ME!
248
		 *
249
		 * @param x
250
		 *            DOCUMENT ME!
251
		 * @param y
252
		 *            DOCUMENT ME!
253
		 *
254
		 * @return DOCUMENT ME!
255
		 */
256
		public void move(double x, double y) {
257
			for (int i = 0; i < gp.getNumCoords() / 2; i++) {
258
				gp.getPointCoords()[i * 2] += x;
259
				gp.getPointCoords()[i * 2 + 1] += y;
260
			}
261
		}
248
        /**
249
         * DOCUMENT ME!
250
         *
251
         * @param x
252
         *            DOCUMENT ME!
253
         * @param y
254
         *            DOCUMENT ME!
255
         *
256
         * @return DOCUMENT ME!
257
         */
258
        public void move(double x, double y) {
259
            Point point;
260
            for (int i = 0; i < gp.getNumCoords() ; i++) {
261
                point = gp.getPointAt(i);
262
                point.setX(point.getX() + x);
263
                point.setY(point.getY() + y);
264
            }
265
        }
262 266

  
263
		/**
264
		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
265
		 */
266
		public void set(double x, double y) {
267
			Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
268
					(init.getY() + end.getY()) / 2);
269
			double dx = x - center.getX();
270
			double dy = y - center.getY();
271
			for (int i = 0; i < gp.getNumCoords() / 2; i++) {
272
				gp.getPointCoords()[i * 2] += dx;
273
				gp.getPointCoords()[i * 2 + 1] += dy;
274
			}
275
			init = new Point2D.Double(init.getX() + dx, init.getY() + dy);
276
			end = new Point2D.Double(end.getX() + dx, end.getY() + dy);
277
		}
278
	}
267
        /**
268
         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
269
         */
270
        public void set(double x, double y) {
271
            Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
272
                (init.getY() + end.getY()) / 2);
273
            double dx = x - center.getX();
274
            double dy = y - center.getY();
275
            Point point;
276
            for (int i = 0; i < gp.getNumCoords() ; i++) {
277
                point = gp.getPointAt(i);
278
                point.setX(point.getX() + dx);
279
                point.setY(point.getY() + dy);
280
            }
281
            init = new Point2D.Double(init.getX() + dx, init.getY() + dy);
282
            end = new Point2D.Double(end.getX() + dx, end.getY() + dy);
283
        }
284
    }
279 285

  
280
	/**
281
	 * DOCUMENT ME!
282
	 *
283
	 * @author Vicente Caballero Navarro
284
	 */
285
	class InitSelHandler extends AbstractHandler implements CuadrantHandler {
286
		/**
287
		 * Crea un nuevo PointHandler.
288
		 *
289
		 * @param i
290
		 *            DOCUMENT ME!
291
		 * @param x
292
		 *            DOCUMENT ME!
293
		 * @param y
294
		 *            DOCUMENT ME!
295
		 */
296
		public InitSelHandler(int i, double x, double y) {
297
			point = new Point2D.Double(x, y);
298
			index = i;
299
		}
286
    /**
287
     * DOCUMENT ME!
288
     *
289
     * @author Vicente Caballero Navarro
290
     */
291
    class InitSelHandler extends AbstractHandler implements CuadrantHandler {
292
        /**
293
         * Crea un nuevo PointHandler.
294
         *
295
         * @param i
296
         *            DOCUMENT ME!
297
         * @param x
298
         *            DOCUMENT ME!
299
         * @param y
300
         *            DOCUMENT ME!
301
         */
302
        public InitSelHandler(int i, double x, double y) {
303
            point = new Point2D.Double(x, y);
304
            index = i;
305
        }
300 306

  
301
		/**
302
		 * DOCUMENT ME!
303
		 *
304
		 * @param x
305
		 *            DOCUMENT ME!
306
		 * @param y
307
		 *            DOCUMENT ME!
308
		 *
309
		 * @return DOCUMENT ME!
310
		 */
311
		public void move(double x, double y) {
307
        /**
308
         * DOCUMENT ME!
309
         *
310
         * @param x
311
         *            DOCUMENT ME!
312
         * @param y
313
         *            DOCUMENT ME!
314
         *
315
         * @return DOCUMENT ME!
316
         */
317
        public void move(double x, double y) {
312 318

  
313
		}
319
        }
314 320

  
315
		/**
316
		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
317
		 */
318
		public void set(double x, double y) {
319
			// TODO comentado para quitar warning: double dx=x-init.getX();
320
			// TODO comentado para quitar warning: double dy=y-init.getY();
321
			Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
322
					(init.getY() + end.getY()) / 2);
323
			// Point2D[]
324
			// p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
325
			// Point2D[]
326
			// p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
327
			// Point2D.Double(x,y));
321
        /**
322
         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
323
         */
324
        public void set(double x, double y) {
325
            // TODO comentado para quitar warning: double dx=x-init.getX();
326
            // TODO comentado para quitar warning: double dy=y-init.getY();
327
            Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
328
                (init.getY() + end.getY()) / 2);
329
            // Point2D[]
330
            // p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
331
            // Point2D[]
332
            // p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
333
            // Point2D.Double(x,y));
328 334

  
329
			// Point2D
330
			// pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
331
			// double xdist=2*pl.distance(x,y);
332
			double xdist = 2 * center.distance(x, y);
333
			// init=new Point2D.Double(init.getX()+dx,init.getY()+dy);
334
			init = UtilFunctions.getPoint(center, init, center.distance(x, y));
335
			end = UtilFunctions.getPoint(init, center, xdist);
336
			Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
337
					- ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
338
			// TODO comentado para quitar warning: Point2D rotationPoint = new
339
			// Point2D.Double(init.getX() + xdist /2, init.getY());
335
            // Point2D
336
            // pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
337
            // double xdist=2*pl.distance(x,y);
338
            double xdist = 2 * center.distance(x, y);
339
            // init=new Point2D.Double(init.getX()+dx,init.getY()+dy);
340
            init = UtilFunctions.getPoint(center, init, center.distance(x, y));
341
            end = UtilFunctions.getPoint(init, center, xdist);
342
            Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
343
                - ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
344
            // TODO comentado para quitar warning: Point2D rotationPoint = new
345
            // Point2D.Double(init.getX() + xdist /2, init.getY());
340 346

  
341
			double angle = UtilFunctions.getAngle(init, end);
342
			AffineTransform mT = AffineTransform.getRotateInstance(angle, init
343
					.getX(), init.getY());
344
			gp = new GeneralPathX(arc.getPathIterator(null));
345
			gp.transform(mT);
347
            double angle = UtilFunctions.getAngle(init, end);
348
            AffineTransform mT = AffineTransform.getRotateInstance(angle, init
349
                .getX(), init.getY());
350
            gp = new GeneralPathX(arc.getPathIterator(null));
351
            gp.transform(mT);
346 352

  
347
		}
348
	}
353
        }
354
    }
349 355

  
350
	/**
351
	 * DOCUMENT ME!
352
	 *
353
	 * @author Vicente Caballero Navarro
354
	 */
355
	class EndSelHandler extends AbstractHandler implements CuadrantHandler {
356
		/**
357
		 * Crea un nuevo PointHandler.
358
		 *
359
		 * @param i
360
		 *            DOCUMENT ME!
361
		 * @param x
362
		 *            DOCUMENT ME!
363
		 * @param y
364
		 *            DOCUMENT ME!
365
		 */
366
		public EndSelHandler(int i, double x, double y) {
367
			point = new Point2D.Double(x, y);
368
			index = i;
369
		}
356
    /**
357
     * DOCUMENT ME!
358
     *
359
     * @author Vicente Caballero Navarro
360
     */
361
    class EndSelHandler extends AbstractHandler implements CuadrantHandler {
362
        /**
363
         * Crea un nuevo PointHandler.
364
         *
365
         * @param i
366
         *            DOCUMENT ME!
367
         * @param x
368
         *            DOCUMENT ME!
369
         * @param y
370
         *            DOCUMENT ME!
371
         */
372
        public EndSelHandler(int i, double x, double y) {
373
            point = new Point2D.Double(x, y);
374
            index = i;
375
        }
370 376

  
371
		/**
372
		 * DOCUMENT ME!
373
		 *
374
		 * @param x
375
		 *            DOCUMENT ME!
376
		 * @param y
377
		 *            DOCUMENT ME!
378
		 *
379
		 * @return DOCUMENT ME!
380
		 */
381
		public void move(double x, double y) {
377
        /**
378
         * DOCUMENT ME!
379
         *
380
         * @param x
381
         *            DOCUMENT ME!
382
         * @param y
383
         *            DOCUMENT ME!
384
         *
385
         * @return DOCUMENT ME!
386
         */
387
        public void move(double x, double y) {
382 388

  
383
		}
389
        }
384 390

  
385
		/**
386
		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
387
		 */
388
		public void set(double x, double y) {
389
			// double dx=x-getPoint().getX();
390
			// double dy=y-getPoint().getY();
391
			Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
392
					(init.getY() + end.getY()) / 2);
393
			// Point2D[]
394
			// p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
395
			// Point2D[]
396
			// p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
397
			// Point2D.Double(x,y));
391
        /**
392
         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
393
         */
394
        public void set(double x, double y) {
395
            // double dx=x-getPoint().getX();
396
            // double dy=y-getPoint().getY();
397
            Point2D center = new Point2D.Double((init.getX() + end.getX()) / 2,
398
                (init.getY() + end.getY()) / 2);
399
            // Point2D[]
400
            // p1=TrigonometricalFunctions.getPerpendicular(init,end,center);
401
            // Point2D[]
402
            // p2=TrigonometricalFunctions.getPerpendicular(p1[0],p1[1],new
403
            // Point2D.Double(x,y));
398 404

  
399
			// Point2D
400
			// pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
401
			// double xdist=2*pl.distance(x,y);
402
			double xdist = 2 * center.distance(x, y);
403
			end = UtilFunctions.getPoint(center, end, center.distance(x, y));
404
			// end=new Point2D.Double(end.getX()+dx,end.getY()+dy);
405
			init = UtilFunctions.getPoint(end, center, xdist);
406
			Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
407
					- ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
408
			// Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
409
			// /2, init.getY());
405
            // Point2D
406
            // pl=TrigonometricalFunctions.getIntersection(p2[0],p2[1],p1[0],p1[1]);
407
            // double xdist=2*pl.distance(x,y);
408
            double xdist = 2 * center.distance(x, y);
409
            end = UtilFunctions.getPoint(center, end, center.distance(x, y));
410
            // end=new Point2D.Double(end.getX()+dx,end.getY()+dy);
411
            init = UtilFunctions.getPoint(end, center, xdist);
412
            Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
413
                - ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
414
            // Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
415
            // /2, init.getY());
410 416

  
411
			double angle = UtilFunctions.getAngle(init, end);
412
			AffineTransform mT = AffineTransform.getRotateInstance(angle, init
413
					.getX(), init.getY());
414
			gp = new GeneralPathX(arc.getPathIterator(null));
415
			gp.transform(mT);
417
            double angle = UtilFunctions.getAngle(init, end);
418
            AffineTransform mT = AffineTransform.getRotateInstance(angle, init
419
                .getX(), init.getY());
420
            gp = new GeneralPathX(arc.getPathIterator(null));
421
            gp.transform(mT);
416 422

  
417
		}
418
	}
423
        }
424
    }
419 425

  
420
	/**
421
	 * DOCUMENT ME!
422
	 *
423
	 * @author Vicente Caballero Navarro
424
	 */
425
	class RadioSelYHandler extends AbstractHandler implements CuadrantHandler {
426
		/**
427
		 * Crea un nuevo PointHandler.
428
		 *
429
		 * @param i
430
		 *            DOCUMENT ME!
431
		 * @param x
432
		 *            DOCUMENT ME!
433
		 * @param y
434
		 *            DOCUMENT ME!
435
		 */
436
		public RadioSelYHandler(int i, double x, double y) {
437
			point = new Point2D.Double(x, y);
438
			index = i;
439
		}
426
    /**
427
     * DOCUMENT ME!
428
     *
429
     * @author Vicente Caballero Navarro
430
     */
431
    class RadioSelYHandler extends AbstractHandler implements CuadrantHandler {
432
        /**
433
         * Crea un nuevo PointHandler.
434
         *
435
         * @param i
436
         *            DOCUMENT ME!
437
         * @param x
438
         *            DOCUMENT ME!
439
         * @param y
440
         *            DOCUMENT ME!
441
         */
442
        public RadioSelYHandler(int i, double x, double y) {
443
            point = new Point2D.Double(x, y);
444
            index = i;
445
        }
440 446

  
441
		/**
442
		 * DOCUMENT ME!
443
		 *
444
		 * @param x
445
		 *            DOCUMENT ME!
446
		 * @param y
447
		 *            DOCUMENT ME!
448
		 *
449
		 * @return DOCUMENT ME!
450
		 */
451
		public void move(double x, double y) {
447
        /**
448
         * DOCUMENT ME!
449
         *
450
         * @param x
451
         *            DOCUMENT ME!
452
         * @param y
453
         *            DOCUMENT ME!
454
         *
455
         * @return DOCUMENT ME!
456
         */
457
        public void move(double x, double y) {
452 458

  
453
		}
459
        }
454 460

  
455
		/**
456
		 * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
457
		 */
458
		public void set(double x, double y) {
459
			ydist = new Point2D.Double((init.getX() + end.getX()) / 2, (init
460
					.getY() + end.getY()) / 2).distance(x, y);
461
			// ydist=getSelectHandlers()[1].getPoint().distance(x,y);
462
			// Point2D center=new Point2D.Double((init.getX() + end.getX()) / 2,
463
			// (init.getY() + end.getY()) / 2);
464
			// Point2D[]
465
			// p=TrigonometricalFunctions.getPerpendicular(init,end,new
466
			// Point2D.Double(x,y));
467
			// Point2D
468
			// pl=TrigonometricalFunctions.getIntersection(p[0],p[1],init,end);
469
			// double xdist=2*pl.distance(x,y);
470
			double xdist = init.distance(end);
471
			Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
472
					- ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
473
			// Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
474
			// /2, init.getY());
461
        /**
462
         * @see org.gvsig.fmap.geom.handler.Handler#set(double, double)
463
         */
464
        public void set(double x, double y) {
465
            ydist = new Point2D.Double((init.getX() + end.getX()) / 2, (init
466
                .getY() + end.getY()) / 2).distance(x, y);
467
            // ydist=getSelectHandlers()[1].getPoint().distance(x,y);
468
            // Point2D center=new Point2D.Double((init.getX() + end.getX()) / 2,
469
            // (init.getY() + end.getY()) / 2);
470
            // Point2D[]
471
            // p=TrigonometricalFunctions.getPerpendicular(init,end,new
472
            // Point2D.Double(x,y));
473
            // Point2D
474
            // pl=TrigonometricalFunctions.getIntersection(p[0],p[1],init,end);
475
            // double xdist=2*pl.distance(x,y);
476
            double xdist = init.distance(end);
477
            Arc2D.Double arc = new Arc2D.Double(init.getX(), init.getY()
478
                - ydist, xdist, 2 * ydist, 0, 360, Arc2D.OPEN);
479
            // Point2D rotationPoint = new Point2D.Double(init.getX() + xdist
480
            // /2, init.getY());
475 481

  
476
			double angle = UtilFunctions.getAngle(init, end);
477
			AffineTransform mT = AffineTransform.getRotateInstance(angle, init
478
					.getX(), init.getY());
479
			gp = new GeneralPathX(arc.getPathIterator(null));
480
			gp.transform(mT);
481
		}
482
	}
482
            double angle = UtilFunctions.getAngle(init, end);
483
            AffineTransform mT = AffineTransform.getRotateInstance(angle, init
484
                .getX(), init.getY());
485
            gp = new GeneralPathX(arc.getPathIterator(null));
486
            gp.transform(mT);
487
        }
488
    }
483 489

  
484
	/*
485
	 * (non-Javadoc)
486
	 *
487
	 * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
488
	 */
489
	public boolean intersects(Rectangle2D r) {
490
		return gp.intersects(r);
491
	}
490
    /*
491
     * (non-Javadoc)
492
     *
493
     * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
494
     */
495
    public boolean intersects(Rectangle2D r) {
496
        return gp.intersects(r);
497
    }
492 498

  
493
	/* (non-Javadoc)
494
	 * @see org.gvsig.fmap.geom.primitive.Ellipse#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point, double)
495
	 */
496
	public void setPoints(Point axis1Start, Point axis1End, double axis2Length) {
497
		Point2D _axis1Start = new java.awt.geom.Point2D.Double(axis1Start.getCoordinateAt(0), axis1Start.getCoordinateAt(1));
498
		Point2D _axis1End = new java.awt.geom.Point2D.Double(axis1End.getCoordinateAt(0), axis1End.getCoordinateAt(1));
499
		setPoints(_axis1Start, _axis1End, axis2Length);		
500
	}
499
    /* (non-Javadoc)
500
     * @see org.gvsig.fmap.geom.primitive.Ellipse#setPoints(org.gvsig.fmap.geom.primitive.Point, org.gvsig.fmap.geom.primitive.Point, double)
501
     */
502
    public void setPoints(Point axis1Start, Point axis1End, double axis2Length) {
503
        Point2D _axis1Start = new java.awt.geom.Point2D.Double(axis1Start.getCoordinateAt(0), axis1Start.getCoordinateAt(1));
504
        Point2D _axis1End = new java.awt.geom.Point2D.Double(axis1End.getCoordinateAt(0), axis1End.getCoordinateAt(1));
505
        setPoints(_axis1Start, _axis1End, axis2Length);		
506
    }
501 507

  
502
	/* (non-Javadoc)
503
	 * @see org.gvsig.fmap.geom.primitive.Surface2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
504
	 */
505
	public void setGeneralPath(GeneralPathX generalPathX) {
506
		throw new UnsupportedOperationException("Use setPoints(Point axis1Start, Point axis1End, double axis2Length)");
507
	}
508
    /* (non-Javadoc)
509
     * @see org.gvsig.fmap.geom.primitive.Surface2D#setGeneralPath(org.gvsig.fmap.geom.primitive.GeneralPathX)
510
     */
511
    public void setGeneralPath(GeneralPathX generalPathX) {
512
        throw new UnsupportedOperationException("Use setPoints(Point axis1Start, Point axis1End, double axis2Length)");
513
    }
508 514

  
509
	/* (non-Javadoc)
510
	 * @see org.gvsig.fmap.geom.primitive.Ellipse#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, double)
511
	 */
512
	private void setPoints(Point2D axis1Start, Point2D axis1End,
513
			double axis2Length) {
514
		double xAxis = axis1Start.distance(axis1End);
515
		Arc2D.Double arc = new Arc2D.Double(axis1Start.getX(), axis1Start
516
				.getY()
517
				- axis2Length, xAxis, 2 * axis2Length, 0, 360, Arc2D.OPEN);
518
		// TODO L�nea comentada para quitar warning: Point2D rotationPoint = new
519
		// Point2D.Double(axis1Start.getX() + xAxis /2, axis1Start.getY());
520
		double angle = UtilFunctions.getAngle(axis1Start, axis1End);
521
		AffineTransform mT = AffineTransform.getRotateInstance(angle,
522
				axis1Start.getX(), axis1Start.getY());
523
		GeneralPathX gp = new GeneralPathX(arc.getPathIterator(null));
524
		gp.transform(mT);
525
		this.gp = new GeneralPathX(gp.getPathIterator(null));
526
		this.init = axis1Start;
527
		this.end = axis1End;
528
		this.ydist = axis2Length;		
529
	}
515
    /* (non-Javadoc)
516
     * @see org.gvsig.fmap.geom.primitive.Ellipse#setPoints(java.awt.geom.Point2D, java.awt.geom.Point2D, double)
517
     */
518
    private void setPoints(Point2D axis1Start, Point2D axis1End,
519
        double axis2Length) {
520
        double xAxis = axis1Start.distance(axis1End);
521
        Arc2D.Double arc = new Arc2D.Double(axis1Start.getX(), axis1Start
522
            .getY()
523
            - axis2Length, xAxis, 2 * axis2Length, 0, 360, Arc2D.OPEN);
524
        // TODO L�nea comentada para quitar warning: Point2D rotationPoint = new
525
        // Point2D.Double(axis1Start.getX() + xAxis /2, axis1Start.getY());
526
        double angle = UtilFunctions.getAngle(axis1Start, axis1End);
527
        AffineTransform mT = AffineTransform.getRotateInstance(angle,
528
            axis1Start.getX(), axis1Start.getY());
529
        GeneralPathX gp = new GeneralPathX(arc.getPathIterator(null));
530
        gp.transform(mT);
531
        this.gp = new GeneralPathX(gp.getPathIterator(null));
532
        this.init = axis1Start;
533
        this.end = axis1End;
534
        this.ydist = axis2Length;		
535
    }
530 536

  
531
	/* (non-Javadoc)
532
	 * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis1End()
533
	 */
534
	public Point getAxis1End() {
535
		try {
536
			return new org.gvsig.fmap.geom.primitive.impl.Point2D(end);
537
		} catch (Exception e){
538
			return null;
539
		}
540
	}
537
    /* (non-Javadoc)
538
     * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis1End()
539
     */
540
    public Point getAxis1End() {
541
        try {
542
            return new org.gvsig.fmap.geom.primitive.impl.Point2D(end);
543
        } catch (Exception e){
544
            return null;
545
        }
546
    }
541 547

  
542
	/* (non-Javadoc)
543
	 * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis1Start()
544
	 */
545
	public Point getAxis1Start() {
546
		try {
547
			return new org.gvsig.fmap.geom.primitive.impl.Point2D(init);
548
		} catch (Exception e){
549
			return null;
550
		}
551
	}
548
    /* (non-Javadoc)
549
     * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis1Start()
550
     */
551
    public Point getAxis1Start() {
552
        try {
553
            return new org.gvsig.fmap.geom.primitive.impl.Point2D(init);
554
        } catch (Exception e){
555
            return null;
556
        }
557
    }
552 558

  
553
	/* (non-Javadoc)
554
	 * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis2Dist()
555
	 */
556
	public double getAxis2Dist() {
557
		return ydist;
558
	}
559
    /* (non-Javadoc)
560
     * @see org.gvsig.fmap.geom.primitive.Ellipse#getAxis2Dist()
561
     */
562
    public double getAxis2Dist() {
563
        return ydist;
564
    }
559 565

  
560 566
}

Also available in: Unified diff