Revision 5878

View differences:

trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FGeometry.java
73 73
 * @author FJP
74 74
 */
75 75
public class FGeometry implements IGeometry3D {
76
	/**
77
	 *
78
	 */
79
	private static final long serialVersionUID = 5431865770186523337L;
80
	private FShape shp;
81
	private Rectangle2D bounds2D;
76
    /**
77
     *
78
     */
79
    private static final long serialVersionUID = 5431865770186523337L;
80
    private FShape shp;
81
    private Rectangle2D bounds2D;
82
    private int type=FShape.LINE;
82 83

  
83
	/**
84
	 * Crea un nuevo FGeometry.
85
	 *
86
	 * @param shp DOCUMENT ME!
87
	 */
88
	FGeometry(FShape shp) {
89
		this.shp = shp;
90
	}
84
    /**
85
     * Crea un nuevo FGeometry.
86
     *
87
     * @param shp DOCUMENT ME!
88
     */
89
    FGeometry(FShape shp) {
90
        this.shp = shp;
91
    }
91 92

  
92
	/* (non-Javadoc)
93
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#draw(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, org.geotools.renderer.style.Style2D)
94
	 */
95
	public void draw(Graphics2D g, ViewPort vp, FStyle2D symbol) {
96
		// OJO CON LA PRECISION. DEBERIAMOS USAR: ((GeneralPathX) shp.m_Polyline).transform(mT);
97
		// O HACER UNA FUNCION DE TRANSFORMACI?N QUE USE LOS DOUBLES DEL
98
		// SHAPE
99
		// Shape shpTrans = vp.getAffineTransform().createTransformedShape(shp);
100
		transform(vp.getAffineTransform());
93
    /* (non-Javadoc)
94
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#draw(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, org.geotools.renderer.style.Style2D)
95
     */
96
    public void draw(Graphics2D g, ViewPort vp, FStyle2D symbol) {
97
        // OJO CON LA PRECISION. DEBERIAMOS USAR: ((GeneralPathX) shp.m_Polyline).transform(mT);
98
        // O HACER UNA FUNCION DE TRANSFORMACI?N QUE USE LOS DOUBLES DEL
99
        // SHAPE
100
        // Shape shpTrans = vp.getAffineTransform().createTransformedShape(shp);
101
        transform(vp.getAffineTransform());
101 102

  
102
		switch (shp.getShapeType()) {
103
			case FShape.POINT:
104
				shpPainter.paint(g, shp, symbol.getPointStyle2D(), 0);
103
        switch (shp.getShapeType()) {
104
            case FShape.POINT:
105
                shpPainter.paint(g, shp, symbol.getPointStyle2D(), 0);
105 106

  
106
				break;
107
                break;
107 108

  
108
			case FShape.LINE:
109
				shpPainter.paint(g, shp, symbol.getLineStyle2D(), 0);
109
            case FShape.LINE:
110
                shpPainter.paint(g, shp, symbol.getLineStyle2D(), 0);
110 111

  
111
				break;
112
                break;
112 113

  
113
			case FShape.POLYGON:
114
				shpPainter.paint(g, shp, symbol.getPolygonStyle2D(), 0);
114
            case FShape.POLYGON:
115
                shpPainter.paint(g, shp, symbol.getPolygonStyle2D(), 0);
115 116

  
116
				break;
117
                break;
117 118

  
118
			case FShape.TEXT:
119
				shpPainter.paint(g, shp, symbol.getTextStyle2D(), 0);
120
		}
121
	}
119
            case FShape.TEXT:
120
                shpPainter.paint(g, shp, symbol.getTextStyle2D(), 0);
121
        }
122
    }
122 123

  
123
	/**
124
	 * Dibuja la geometria actual en el graphics que se le pasa como par?metro,
125
	 * aplicandole las caracter?sticas del s?mbolo.
126
	 *
127
	 * @param g Graphics2D.
128
	 * @param vp ViewPort.
129
	 * @param symbol S?mbolo.
130
	 */
131
	public void draw(Graphics2D g, ViewPort vp, FSymbol symbol) {
132
		// OJO CON LA PRECISION. DEBERIAMOS USAR: ((GeneralPathX) shp.m_Polyline).transform(mT);
133
		// O HACER UNA FUNCION DE TRANSFORMACI?N QUE USE LOS DOUBLES DEL
134
		// SHAPE
135
		// Shape shpTrans = vp.getAffineTransform().createTransformedShape(shp);
136
		transform(vp.getAffineTransform());
137
		FGraphicUtilities.DrawShape(g, vp.getAffineTransform(), shp, symbol);
138
	}
124
    /**
125
     * Dibuja la geometria actual en el graphics que se le pasa como par?metro,
126
     * aplicandole las caracter?sticas del s?mbolo.
127
     *
128
     * @param g Graphics2D.
129
     * @param vp ViewPort.
130
     * @param symbol S?mbolo.
131
     */
132
    public void draw(Graphics2D g, ViewPort vp, FSymbol symbol) {
133
        // OJO CON LA PRECISION. DEBERIAMOS USAR: ((GeneralPathX) shp.m_Polyline).transform(mT);
134
        // O HACER UNA FUNCION DE TRANSFORMACI?N QUE USE LOS DOUBLES DEL
135
        // SHAPE
136
        // Shape shpTrans = vp.getAffineTransform().createTransformedShape(shp);
137
        transform(vp.getAffineTransform());
138
        FGraphicUtilities.DrawShape(g, vp.getAffineTransform(), shp, symbol);
139
    }
139 140

  
140 141
    /* (non-Javadoc)
141 142
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#drawInts(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.cit.gvsig.fmap.core.v02.FSymbol)
......
145 146
        FGraphicUtilities.DrawShape(g, vp.getAffineTransform(), decimatedShape, symbol);
146 147
    }
147 148

  
148
	/**
149
	 * Aplica la transformaci?n a la geometr?a de la matriz de transformaci?n
150
	 * que se pasa como par?metro.
151
	 *
152
	 * @param at Matriz de transformaci?n.
153
	 */
154
	public void transform(AffineTransform at) {
155
		shp.transform(at);
156
	}
149
    /**
150
     * Aplica la transformaci?n a la geometr?a de la matriz de transformaci?n
151
     * que se pasa como par?metro.
152
     *
153
     * @param at Matriz de transformaci?n.
154
     */
155
    public void transform(AffineTransform at) {
156
        shp.transform(at);
157
    }
157 158

  
158
	/* (non-Javadoc)
159
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#intersects(java.awt.geom.Rectangle2D)
160
	 */
161
	public boolean intersects(Rectangle2D r) {
162
		return shp.intersects(r);
163
	}
159
    /* (non-Javadoc)
160
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#intersects(java.awt.geom.Rectangle2D)
161
     */
162
    public boolean intersects(Rectangle2D r) {
163
    	if (getGeometryType()==FShape.LINE && shp.getShapeType()==FShape.POLYGON) {
164
        	return shp.intersects(r) && !shp.contains(r);
165
        }
166
        return shp.intersects(r);
167
    }
164 168

  
165
	/* (non-Javadoc)
166
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getBounds2D()
167
	 */
168
	public Rectangle2D getBounds2D() {
169
		if (bounds2D == null)
170
		{
171
			bounds2D = shp.getBounds2D();
172
		}
173
		// return shp.getBounds2D();
174
		return bounds2D;
175
	}
176
	
177
	public Rectangle2D reCalculateBounds2D()
178
	{
179
		return shp.getBounds2D();
180
	}
169
    /* (non-Javadoc)
170
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getBounds2D()
171
     */
172
    public Rectangle2D getBounds2D() {
173
        if (bounds2D == null)
174
        {
175
            bounds2D = shp.getBounds2D();
176
        }
177
        // return shp.getBounds2D();
178
        return bounds2D;
179
    }
181 180

  
182
	/* (non-Javadoc)
183
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#toJTSGeometry()
184
	 */
185
	public Geometry toJTSGeometry() {
186
		return FConverter.java2d_to_jts(shp);
187
	}
181
    public Rectangle2D reCalculateBounds2D()
182
    {
183
        return shp.getBounds2D();
184
    }
188 185

  
189
	/* (non-Javadoc)
190
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#createLabels(int, boolean)
191
	 */
192
	public FLabel[] createLabels(int position, boolean duplicates) {
193
		FLabel[] aux = new FLabel[1];
194
		aux[0] = FLabel.createFLabel(shp);
186
    /* (non-Javadoc)
187
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#toJTSGeometry()
188
     */
189
    public Geometry toJTSGeometry() {
190
        return FConverter.java2d_to_jts(shp);
191
    }
195 192

  
196
		return aux;
197
	}
193
    /* (non-Javadoc)
194
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#createLabels(int, boolean)
195
     */
196
    public FLabel[] createLabels(int position, boolean duplicates) {
197
        FLabel[] aux = new FLabel[1];
198
        aux[0] = FLabel.createFLabel(shp);
198 199

  
199
	/**
200
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getGeometryType()
201
	 */
202
	public int getGeometryType() {
203
		return shp.getShapeType();
204
	}
200
        return aux;
201
    }
205 202

  
206
	/* (non-Javadoc)
207
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#cloneGeometry()
208
	 */
209
	public IGeometry cloneGeometry() {
210
		return new FGeometry(shp.cloneFShape());
211
	}
203
    /**
204
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getGeometryType()
205
     */
206
    public int getGeometryType() {
207
        return type;
208
    }
212 209

  
213
	/* (non-Javadoc)
214
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#reProject(org.cresques.cts.ICoordTrans)
215
	 */
216
	public void reProject(ICoordTrans ct) {
217
		shp.reProject(ct);
218
	}
210
    /* (non-Javadoc)
211
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#cloneGeometry()
212
     */
213
    public IGeometry cloneGeometry() {
214
        IGeometry geom=new FGeometry(shp.cloneFShape());
215
        geom.setGeometryType(type);
216
        return geom;
217
    }
219 218

  
220
	/**
221
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getPathIterator(AffineTransform)
222
	 */
223
	public PathIterator getPathIterator(AffineTransform at) {
224
		return (GeneralPathXIterator)shp.getPathIterator(null);
225
	}
219
    /* (non-Javadoc)
220
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#reProject(org.cresques.cts.ICoordTrans)
221
     */
222
    public void reProject(ICoordTrans ct) {
223
        shp.reProject(ct);
224
    }
226 225

  
226
    /**
227
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getPathIterator(AffineTransform)
228
     */
229
    public PathIterator getPathIterator(AffineTransform at) {
230
        return (GeneralPathXIterator)shp.getPathIterator(null);
231
    }
227 232

  
228
	
233

  
234

  
229 235
    /* (non-Javadoc)
230 236
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#fastIntersects(double, double, double, double)
231 237
     */
......
237 243
        return WKBEncoder.encodeGeometry(toJTSGeometry());
238 244
    }
239 245
    /**
240
	 * Devuelve un array con todos los valores de Z.
241
	 *
242
	 * @return Array de Zs.
243
	 */
244
	public double[] getZs() {
245
		return ((FShape3D) shp).getZs();
246
	}
247
	/**
248
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getHandlers()
249
	 */
250
	public Handler[] getHandlers(int type) {
251
		if (type==STRETCHINGHANDLER){
252
		return shp.getStretchingHandlers();
253
		}else if (type==SELECTHANDLER){
254
			return shp.getSelectHandlers();
255
		}
256
		return null;
257
	}
246
     * Devuelve un array con todos los valores de Z.
247
     *
248
     * @return Array de Zs.
249
     */
250
    public double[] getZs() {
251
        return ((FShape3D) shp).getZs();
252
    }
253
    /**
254
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getHandlers()
255
     */
256
    public Handler[] getHandlers(int type) {
257
        if (type==STRETCHINGHANDLER){
258
        return shp.getStretchingHandlers();
259
        }else if (type==SELECTHANDLER){
260
            return shp.getSelectHandlers();
261
        }
262
        return null;
263
    }
258 264

  
259
	/* (non-Javadoc)
260
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getGeneralPathXIterator(java.awt.geom.AffineTransform, double)
261
	 */
262
	public PathIterator getPathIterator(AffineTransform at, double flatness) {
263
		return shp.getPathIterator(at, flatness);
264
	}
265
    /* (non-Javadoc)
266
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#getGeneralPathXIterator(java.awt.geom.AffineTransform, double)
267
     */
268
    public PathIterator getPathIterator(AffineTransform at, double flatness) {
269
        return shp.getPathIterator(at, flatness);
270
    }
265 271

  
266
	public boolean contains(double x, double y) {
267
		return shp.contains(x,y);
268
	}
272
    public boolean contains(double x, double y) {
273
        return shp.contains(x,y);
274
    }
269 275

  
270
	public boolean contains(double x, double y, double w, double h) {
271
		return shp.contains(x,y,w,h);
272
	}
276
    public boolean contains(double x, double y, double w, double h) {
277
        return shp.contains(x,y,w,h);
278
    }
273 279

  
274
	public boolean intersects(double x, double y, double w, double h) {
275
		return shp.intersects(x,y,w,h);
276
	}
280
    public boolean intersects(double x, double y, double w, double h) {
281
    	if (getGeometryType()==FShape.LINE && shp.getShapeType()==FShape.POLYGON) {
282
        	return shp.intersects(x,y,w,h) && !shp.contains(x,y,w,h);
283
        }
284
        return shp.intersects(x,y,w,h);
285
    }
277 286

  
278
	public Rectangle getBounds() {
279
		return shp.getBounds();
280
	}
287
    public Rectangle getBounds() {
288
        return shp.getBounds();
289
    }
281 290

  
282
	public boolean contains(Point2D p) {
283
		return shp.contains(p);
284
	}
291
    public boolean contains(Point2D p) {
292
        return shp.contains(p);
293
    }
285 294

  
286
	public boolean contains(Rectangle2D r) {
287
		return shp.contains(r);
288
	}
295
    public boolean contains(Rectangle2D r) {
296
        return shp.contains(r);
297
    }
289 298

  
290
	public Shape getInternalShape() {
291
		return shp;
292
	}
299
    public Shape getInternalShape() {
300
        return shp;
301
    }
293 302

  
294
	/* public void move(double x, double y) {
295
		AffineTransform at = new AffineTransform();
296
		at.translate(x, y);
297
		transform(at);
298
	}
299
	public void rotate(double r, double x, double y) {
300
		AffineTransform at = new AffineTransform();
301
		at.rotate(r, x, y);
302
		transform(at);
303
	}
304
	public void scale(Point2D point,double x, double y) {
305
		AffineTransform at = new AffineTransform();
306
		at.setToTranslation(point.getX(),point.getY());
307
		at.scale(x,y);
308
		at.translate(-point.getX(),-point.getY());
309
		transform(at);
310
	} */
303
    public int getOriginalGeometryType() {
304
        return shp.getShapeType();
305
    }
306

  
307
    public void setGeometryType(int type) {
308
        this.type=type;
309

  
310
    }
311

  
312
    /* public void move(double x, double y) {
313
        AffineTransform at = new AffineTransform();
314
        at.translate(x, y);
315
        transform(at);
316
    }
317
    public void rotate(double r, double x, double y) {
318
        AffineTransform at = new AffineTransform();
319
        at.rotate(r, x, y);
320
        transform(at);
321
    }
322
    public void scale(Point2D point,double x, double y) {
323
        AffineTransform at = new AffineTransform();
324
        at.setToTranslation(point.getX(),point.getY());
325
        at.scale(x,y);
326
        at.translate(-point.getX(),-point.getY());
327
        transform(at);
328
    } */
311 329
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FShape.java
95 95
	 * @return Handlers
96 96
	 */
97 97
	public Handler[] getSelectHandlers();
98
	
98

  
99 99
	public void transform(AffineTransform at);
100 100
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/Gt2Geometry.java
71 71
     */
72 72
    public class Gt2Geometry implements IGeometry {
73 73
        /**
74
		 * 
74
		 *
75 75
		 */
76 76
		private static final long serialVersionUID = 1587400440363673610L;
77 77
		private FLiteShape shp;
78 78

  
79 79

  
80

  
81 80
        /**
82 81
         * Crea un nuevo FGeometry.
83 82
         *
......
265 264
			return shp;
266 265
		}
267 266

  
267
		public int getOriginalGeometryType() {
268
			return shp.getShapeType();
269
		}
270

  
271
		public void setGeometryType(int type) {
272

  
273
		}
274

  
268 275
}
269 276

  
270 277

  
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/Handler.java
74 74
	 * @return Punto.
75 75
	 */
76 76
	public Point2D getPoint();
77
	
77

  
78
	public boolean equalsPoint(Object obj);
78 79
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FMultiPoint2D.java
72 72
 */
73 73
public class FMultiPoint2D implements IGeometry {
74 74
	FPoint2D[] points = null;
75
	private int type=FShape.POINT;
75 76

  
76 77
	/**
77 78
	 * Crea un nuevo MultiPoint2D.
......
118 119
            theGeoms[i] = c;
119 120
        }
120 121
        MultiPoint geomCol = new GeometryFactory().createMultiPoint(theGeoms);
121
        
122
        
122

  
123

  
123 124
		return geomCol;
124 125
	}
125 126

  
......
164 165
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#getGeometryType()
165 166
	 */
166 167
	public int getGeometryType() {
167
		return FShape.MULTIPOINT;
168
		return type;
168 169
	}
169 170

  
170 171
	/* (non-Javadoc)
......
200 201
		{
201 202
			aux[i] = (FPoint2D) points[i].cloneFShape();
202 203
		}
203
		return new FMultiPoint2D(aux);
204
		IGeometry geom=new FMultiPoint2D(aux);
205
		//geom.setGeometryType(type);
206
		return geom;
204 207
	}
205 208

  
206 209
	/* (non-Javadoc)
......
372 375
	public Shape getInternalShape() {
373 376
		return this;
374 377
	}
378
	public int getOriginalGeometryType() {
379
		return FShape.MULTIPOINT;
380
	}
381
	public void setGeometryType(int type) {
382
		this.type=type;
383
	}
375 384
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/AbstractHandler.java
61 61
	public Point2D getPoint() {
62 62
		return point;
63 63
	}
64
	
64

  
65 65
	public void select(boolean b) {
66 66
	 select=b;
67 67
	}
68 68
	public boolean isSelected(){
69 69
		return select;
70 70
	}
71
	public boolean equalsPoint(Object obj) {
72
		Point2D p1=this.getPoint();
73
		Point2D p2=((Handler)obj).getPoint();
74
		if (p1.getX()==p2.getX() && p1.getY()==p2.getY()) {
75
			return true;
76
		}
77
		return false;
78
	}
71 79
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/IGeometry.java
136 136
	 * @return una de las constantes de FShape: POINT, LINE, POLIGON
137 137
	 */
138 138
	int getGeometryType();
139

  
140 139
	/**
140
	 * Obtiene el tipo de la geometr?a
141
	 *
142
	 * @return una de las constantes de FShape: POINT, LINE, POLIGON
143
	 */
144
	void setGeometryType(int type);
145
	/**
146
	 * Obtiene el tipo original de la geometr?a
147
	 *
148
	 * @return una de las constantes de FShape: POINT, LINE, POLIGON, CIRCLE, ARC, ELLIPSE...
149
	 */
150
	int getOriginalGeometryType();
151
	/**
141 152
	 * Clona la Geometr?a.
142 153
	 *
143 154
	 * @return Geometr?a clonada.
......
210 221
	public void transform(AffineTransform at);
211 222

  
212 223
	PathIterator getPathIterator(AffineTransform at, double flatness);
213
	
224

  
214 225
	/**
215 226
	 * Useful to have the real shape behind the scenes.
216 227
	 * May be uses to edit it knowing it it is a Circle, Ellipse, etc
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/gt2/FLiteShape.java
2 2
 * Created on 12-may-2005
3 3
 *
4 4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 * 
5
 *
6 6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 * 
7
 *
8 8
 * This program is free software; you can redistribute it and/or
9 9
 * modify it under the terms of the GNU General Public License
10 10
 * as published by the Free Software Foundation; either version 2
11 11
 * of the License, or (at your option) any later version.
12
 *  
12
 *
13 13
 * This program is distributed in the hope that it will be useful,
14 14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 16
 * GNU General Public License for more details.
17
 * 
17
 *
18 18
 * You should have received a copy of the GNU General Public License
19 19
 * along with this program; if not, write to the Free Software
20 20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21
 *  
21
 *
22 22
 * For more information, contact:
23 23
 *
24 24
 *  Generalitat Valenciana
......
30 30
 *      +34 963862235
31 31
 *   gvsig@gva.es
32 32
 *      www.gvsig.gva.es
33
 * 
33
 *
34 34
 *    or
35
 * 
35
 *
36 36
 *   IVER T.I. S.A
37 37
 *   Salamanca 50
38 38
 *   46005 Valencia
39 39
 *   Spain
40
 * 
40
 *
41 41
 *   +34 963163400
42 42
 *   dac@iver.es
43 43
 */
......
92 92
    private AffineTransform affineTransform = null;
93 93
    private boolean generalize = false;
94 94
    private double maxDistance = 1;
95
    
95

  
96 96
    // cached iterators
97 97
    private LineIterator lineIterator = new LineIterator();
98 98
    private GeomCollectionIterator collIterator = new GeomCollectionIterator();
......
100 100
    private float xScale;
101 101

  
102 102
    private float yScale;
103
    
103

  
104 104
    private GeometryFactory geomFac;
105 105

  
106 106
    private MathTransform mathTransform;
107 107

  
108 108
    private static final AffineTransform IDENTITY = new AffineTransform();
109
    
109

  
110 110
	class PointHandler extends AbstractHandler {
111 111
		/**
112 112
		 * Crea un nuevo PointHandler.
......
129 129
		 *
130 130
		 * @return DOCUMENT ME!
131 131
		 */
132
		public void move(double x, double y) {    			
132
		public void move(double x, double y) {
133 133
			c.x+=x;
134 134
			c.y+=y;
135 135
			geometry.geometryChanged();
......
144 144
			geometry.geometryChanged();
145 145
		}
146 146
	}
147
    
148 147

  
148

  
149 149
    /**
150 150
     * Creates a new LiteShape object.
151 151
     *
......
154 154
     * @param generalize - set to true if the geometry need to be generalized
155 155
     *        during rendering
156 156
     * @param maxDistance - distance used in the generalization process
157
     * @throws TransformException 
158
     * @throws FactoryException 
157
     * @throws TransformException
158
     * @throws FactoryException
159 159
     */
160 160
    public FLiteShape(Geometry geom, AffineTransform at, MathTransform mathTransform, boolean generalize,
161 161
        double maxDistance) throws TransformException, FactoryException {
......
171 171
     * @param generalize - set to true if the geometry need to be generalized
172 172
     *        during rendering
173 173
     * @param maxDistance - distance used in the generalization process
174
     * @throws TransformException 
175
     * @throws FactoryException 
174
     * @throws TransformException
175
     * @throws FactoryException
176 176
     */
177 177
    public FLiteShape(Geometry geom, AffineTransform at, MathTransform mathTransform, boolean generalize) throws TransformException, FactoryException {
178 178
        if( geom!=null)
......
200 200
     * @param generalize - set to true if the geometry need to be generalized
201 201
     *        during rendering
202 202
     * @param maxDistance - distance used in the generalization process
203
     * @throws TransformException 
203
     * @throws TransformException
204 204
     */
205 205
    public FLiteShape(Geometry geom, AffineTransform at, boolean generalize,
206 206
        double maxDistance){
207 207
        this(geom, at, generalize);
208 208
        this.maxDistance = maxDistance;
209 209
    }
210
    
210

  
211 211
    public FLiteShape(Geometry geom)
212 212
    {
213 213
        this(geom, null, false);
......
221 221
     * @param generalize - set to true if the geometry need to be generalized
222 222
     *        during rendering
223 223
     * @param maxDistance - distance used in the generalization process
224
     * @throws TransformException 
224
     * @throws TransformException
225 225
     */
226 226
    public FLiteShape(Geometry geom, AffineTransform at, boolean generalize){
227 227
        if( geom!=null)
......
245 245
                (affineTransform.getScaleY() * affineTransform.getScaleY())
246 246
                + (affineTransform.getShearY() * affineTransform.getShearY()));
247 247
    }
248
    
248

  
249 249
    private void transformGeometry(Geometry geometry) throws TransformException, FactoryException {
250
        
250

  
251 251
        if( mathTransform==null || mathTransform.isIdentity() ){
252 252
            if( !affineTransform.isIdentity() ){
253 253
                MathTransformFactory factory=FactoryFinder.getMathTransformFactory(null);
......
259 259
            factory.createConcatenatedTransform(mathTransform, factory.createAffineTransform(new GeneralMatrix(affineTransform)));
260 260
            affineTransform=IDENTITY;
261 261
        }
262
        
262

  
263 263
        if( mathTransform==null || mathTransform.isIdentity() )
264 264
            return;
265
        
266
        
265

  
266

  
267 267
        CoordinateSequenceTransformer transformer=new InPlaceCoordinateSequenceTransformer();
268 268
        if (geometry instanceof GeometryCollection) {
269 269
            GeometryCollection collection=(GeometryCollection)geometry;
......
272 272
            }
273 273
        }else if (geometry instanceof Point) {
274 274
            transformer.transform(((Point)geometry).getCoordinateSequence(), mathTransform);
275
        }else if (geometry instanceof Polygon) {     
275
        }else if (geometry instanceof Polygon) {
276 276
            Polygon polygon=(Polygon) geometry;
277 277
            transformGeometry(polygon.getExteriorRing());
278 278
            for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
......
280 280
            }
281 281
        } else if (geometry instanceof LineString) {
282 282
            transformer.transform(((LineString)geometry).getCoordinateSequence(), mathTransform);
283
        } 
283
        }
284 284
    }
285 285

  
286 286
    private GeometryFactory getGeometryFactory() {
......
296 296
     * object instead of creating it again and again during rendering
297 297
     *
298 298
     * @param g
299
     * @throws TransformException 
300
     * @throws FactoryException 
299
     * @throws TransformException
300
     * @throws FactoryException
301 301
     */
302 302
    public void setGeometry(Geometry g) throws TransformException, FactoryException {
303 303
        if( g!=null){
......
316 316
        } catch (FactoryException e) {
317 317
            // TODO Auto-generated catch block
318 318
            e.printStackTrace();
319
        }        
319
        }
320 320
        xScale = (float) Math.sqrt(
321 321
            (affineTransform.getScaleX() * affineTransform.getScaleX())
322 322
            + (affineTransform.getShearX() * affineTransform.getShearX()));
323 323
        yScale = (float) Math.sqrt(
324 324
            (affineTransform.getScaleY() * affineTransform.getScaleY())
325 325
            + (affineTransform.getShearY() * affineTransform.getShearY()));
326
        
326

  
327 327
    }
328 328

  
329 329
    /**
330 330
     * Tests if the interior of the <code>Shape</code> entirely contains the
331 331
     * specified <code>Rectangle2D</code>. This method might conservatively
332 332
     * return <code>false</code> when:
333
     * 
333
     *
334 334
     * <ul>
335 335
     * <li>
336 336
     * the <code>intersect</code> method returns <code>true</code> and
......
341 341
     * expensive.
342 342
     * </li>
343 343
     * </ul>
344
     * 
344
     *
345 345
     * This means that this method might return <code>false</code> even though
346 346
     * the <code>Shape</code> contains the <code>Rectangle2D</code>. The
347 347
     * <code>Area</code> class can be used to perform more accurate
......
405 405
     * rectangular area must lie within the <code>Shape</code> for the entire
406 406
     * rectanglar area to be considered contained within the
407 407
     * <code>Shape</code>.
408
     * 
408
     *
409 409
     * <p>
410 410
     * This method might conservatively return <code>false</code> when:
411
     * 
411
     *
412 412
     * <ul>
413 413
     * <li>
414 414
     * the <code>intersect</code> method returns <code>true</code> and
......
418 418
     * entirely contains the rectangular area are prohibitively expensive.
419 419
     * </li>
420 420
     * </ul>
421
     * 
421
     *
422 422
     * This means that this method might return <code>false</code> even though
423 423
     * the <code>Shape</code> contains the rectangular area. The
424 424
     * <code>Area</code> class can be used to perform more accurate
......
574 574
     * boundary and provides access to the geometry of the <code>Shape</code>
575 575
     * outline.  If an optional {@link AffineTransform} is specified, the
576 576
     * coordinates returned in the iteration are transformed accordingly.
577
     * 
577
     *
578 578
     * <p>
579 579
     * Each call to this method returns a fresh <code>PathIterator</code>
580 580
     * object that traverses the geometry of the <code>Shape</code> object
581 581
     * independently from any other <code>PathIterator</code> objects in use
582 582
     * at the same time.
583 583
     * </p>
584
     * 
584
     *
585 585
     * <p>
586 586
     * It is recommended, but not guaranteed, that objects implementing the
587 587
     * <code>Shape</code> interface isolate iterations that are in process
588 588
     * from any changes that might occur to the original object's geometry
589 589
     * during such iterations.
590 590
     * </p>
591
     * 
591
     *
592 592
     * <p>
593 593
     * Before using a particular implementation of the <code>Shape</code>
594 594
     * interface in more than one thread simultaneously, refer to its
......
619 619
            pi = new PointIterator((Point) geometry, combined);
620 620
        }
621 621

  
622
        if (this.geometry instanceof Polygon) {             
622
        if (this.geometry instanceof Polygon) {
623 623

  
624 624
            pi = new PolygonIterator((Polygon) geometry, combined, generalize,
625 625
                    maxDistance);
......
635 635
            if(combined == affineTransform)
636 636
                lineIterator.init((LineString) geometry, combined, generalize,
637 637
                        (float) maxDistance, xScale, yScale);
638
            else 
638
            else
639 639
                lineIterator.init((LineString) geometry, combined, generalize,
640 640
                        (float) maxDistance);
641 641
            pi = lineIterator;
......
651 651
     * Returns an iterator object that iterates along the <code>Shape</code>
652 652
     * boundary and provides access to a flattened view of the
653 653
     * <code>Shape</code> outline geometry.
654
     * 
654
     *
655 655
     * <p>
656 656
     * Only SEG_MOVETO, SEG_LINETO, and SEG_CLOSE point types are returned by
657 657
     * the iterator.
658 658
     * </p>
659
     * 
659
     *
660 660
     * <p>
661 661
     * If an optional <code>AffineTransform</code> is specified, the
662 662
     * coordinates returned in the iteration are transformed accordingly.
663 663
     * </p>
664
     * 
664
     *
665 665
     * <p>
666 666
     * The amount of subdivision of the curved segments is controlled by the
667 667
     * <code>flatness</code> parameter, which specifies the maximum distance
......
671 671
     * flattening parameters to be treated as larger values.  This limit, if
672 672
     * there is one, is defined by the particular implementation that is used.
673 673
     * </p>
674
     * 
674
     *
675 675
     * <p>
676 676
     * Each call to this method returns a fresh <code>PathIterator</code>
677 677
     * object that traverses the <code>Shape</code> object geometry
678 678
     * independently from any other <code>PathIterator</code> objects in use
679 679
     * at the same time.
680 680
     * </p>
681
     * 
681
     *
682 682
     * <p>
683 683
     * It is recommended, but not guaranteed, that objects implementing the
684 684
     * <code>Shape</code> interface isolate iterations that are in process
685 685
     * from any changes that might occur to the original object's geometry
686 686
     * during such iterations.
687 687
     * </p>
688
     * 
688
     *
689 689
     * <p>
690 690
     * Before using a particular implementation of this interface in more than
691 691
     * one thread simultaneously, refer to its documentation to verify that it
......
710 710
     * Tests if the interior of the <code>Shape</code> intersects the interior
711 711
     * of a specified <code>Rectangle2D</code>. This method might
712 712
     * conservatively return <code>true</code> when:
713
     * 
713
     *
714 714
     * <ul>
715 715
     * <li>
716 716
     * there is a high probability that the <code>Rectangle2D</code> and the
......
721 721
     * prohibitively expensive.
722 722
     * </li>
723 723
     * </ul>
724
     * 
724
     *
725 725
     * This means that this method might return <code>true</code> even though
726 726
     * the <code>Rectangle2D</code> does not intersect the <code>Shape</code>.
727 727
     *
......
746 746
     * of a specified rectangular area. The rectangular area is considered to
747 747
     * intersect the <code>Shape</code> if any point is contained in both the
748 748
     * interior of the <code>Shape</code> and the specified rectangular area.
749
     * 
749
     *
750 750
     * <p>
751 751
     * This method might conservatively return <code>true</code> when:
752
     * 
752
     *
753 753
     * <ul>
754 754
     * <li>
755 755
     * there is a high probability that the rectangular area and the
......
760 760
     * prohibitively expensive.
761 761
     * </li>
762 762
     * </ul>
763
     * 
763
     *
764 764
     * This means that this method might return <code>true</code> even though
765 765
     * the rectangular area does not intersect the <code>Shape</code>. The
766 766
     * {@link java.awt.geom.Area Area} class can be used to perform more
......
819 819

  
820 820
        return geometry.getFactory().createPolygon(lr, null);
821 821
    }
822
    
822

  
823 823
    /**
824 824
     * Returns the affine transform for this lite shape
825 825
     * @return
......
849 849
        if (geometry instanceof MultiLineString)
850 850
            type = FShape.LINE;
851 851

  
852
        
852

  
853 853
        return type;
854 854
    }
855 855

  
......
873 873
            pointCoords[i] = pt.getX();
874 874
            pointCoords[i+1] = pt.getY();
875 875
        } */
876
        
876

  
877 877
    }
878 878

  
879 879
	public Handler[] getStretchingHandlers() {
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FGeometryCollection.java
49 49
import java.awt.geom.Rectangle2D;
50 50
import java.io.IOException;
51 51
import java.util.ArrayList;
52
import java.util.Comparator;
53
import java.util.TreeMap;
52 54

  
53 55
import org.cresques.cts.ICoordTrans;
54 56
import org.geotools.data.postgis.attributeio.WKBEncoder;
......
69 71
 */
70 72
public class FGeometryCollection implements IGeometry {
71 73
	private ArrayList geometries = new ArrayList();
72

  
74
	private int type=FShape.LINE;
73 75
	/**
74 76
	 * Crea un nuevo FGeometryCollection.
75 77
	 *
......
120 122
	 */
121 123
	public boolean intersects(Rectangle2D r) {
122 124
	    boolean resul = false;
123
		for (int i = 0; i < geometries.size(); i++)
124
		{
125
			resul = ((IGeometry)geometries.get(i)).intersects(r);
126
			if (resul) break;
125
		if (type==FShape.LINE) {
126
	    	for (int i = 0; i < geometries.size(); i++){
127
				resul = ((IGeometry)geometries.get(i)).intersects(r);
128
				if (resul) break;
129
			}
130
		}else if (type==FShape.POLYGON) {
131
			GeneralPathX gpx=new GeneralPathX();
132
			Handler lastHandler=null;
133
			for (int i = 0; i < geometries.size(); i++) {
134
				IGeometry geom=(IGeometry)geometries.get(i);
135
				GeneralPathXIterator gpxi=(GeneralPathXIterator)geom.getPathIterator(null);
136
				Handler[] handlers=geom.getHandlers(IGeometry.SELECTHANDLER);
137
				if (lastHandler==null || handlers[0].getPoint().distance(lastHandler.getPoint())==0) {
138
					gpx.append(gpxi,true);
139
				}else {
140
					gpx.append(gpxi,false);
141
				}
142
				lastHandler=handlers[handlers.length-1];
143
			}
144
			resul=ShapeFactory.createPolygon2D(gpx).intersects(r);
127 145
		}
128

  
129 146
		return resul;
130 147
	}
131 148

  
......
156 173

  
157 174
		return ret;
158 175
		*/
159
		return FShape.LINE;
176
		return type;
160 177
	}
161

  
178
	public void setGeometryType(int type) {
179
		this.type=type;
180
	}
162 181
	/* (non-Javadoc)
163 182
	 * @see com.iver.cit.gvsig.fmap.core.IGeometry#draw(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.cit.gvsig.fmap.core.v02.FSymbol)
164 183
	 */
165 184
	public void draw(Graphics2D g, ViewPort vp, FSymbol symbol) {
166
		for (int i = 0; i < geometries.size(); i++)
167
			((IGeometry)geometries.get(i)).draw(g, vp, symbol);
185
		if (type==FShape.LINE) {
186
			for (int i = 0; i < geometries.size(); i++)
187
				((IGeometry)geometries.get(i)).draw(g, vp, symbol);
188
		}else if (type==FShape.POLYGON) {
189
			//GeneralPathXIterator gpxi=(GeneralPathXIterator)getPathIterator(null);
190
			GeneralPathX gpx=new GeneralPathX();
191
			Handler lastHandler=null;
192
			for (int i = 0; i < geometries.size(); i++) {
193
				IGeometry geom=(IGeometry)geometries.get(i);
194
				GeneralPathXIterator gpxi=(GeneralPathXIterator)geom.getPathIterator(null);
195
				Handler[] handlers=geom.getHandlers(IGeometry.SELECTHANDLER);
196
				if (lastHandler==null || handlers[0].getPoint().distance(lastHandler.getPoint())==0) {
197
					gpx.append(gpxi,true);
198
				}else {
199
					gpx.append(gpxi,false);
200
				}
201
				lastHandler=handlers[handlers.length-1];
202
			}
203
			ShapeFactory.createPolygon2D(gpx).draw(g,vp,symbol);
204
		}
168 205
	}
169 206

  
170 207
	/* (non-Javadoc)
......
175 212

  
176 213
		for (int i = 0; i < geometries.size(); i++)
177 214
			newGeometries[i] = ((IGeometry)geometries.get(i)).cloneGeometry();
178

  
179
		return new FGeometryCollection(newGeometries);
215
		FGeometryCollection gc=new FGeometryCollection(newGeometries);
216
		gc.type=type;
217
		return gc;
180 218
	}
181 219

  
182 220
	/* (non-Javadoc)
......
189 227
            theGeoms[i] = ((IGeometry)geometries.get(i)).toJTSGeometry();
190 228
        }
191 229
        GeometryCollection geomCol = new GeometryFactory().createGeometryCollection(theGeoms);
192
        
193
        
230

  
231

  
194 232
		return geomCol;
195 233
	}
196 234

  
......
285 323
     * @see com.iver.cit.gvsig.fmap.core.IGeometry#drawInts(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.cit.gvsig.fmap.core.v02.FSymbol)
286 324
     */
287 325
    public void drawInts(Graphics2D g, ViewPort vp, FSymbol symbol) {
288
        for (int i = 0; i < geometries.size(); i++)
289
            ((IGeometry)geometries.get(i)).drawInts(g, vp, symbol);
326
    	if (type==FShape.LINE) {
327
			for (int i = 0; i < geometries.size(); i++)
328
				((IGeometry)geometries.get(i)).drawInts(g, vp, symbol);
329
    	}else if (type==FShape.POLYGON) {
330
			//GeneralPathXIterator gpxi=(GeneralPathXIterator)getPathIterator(null);
331
			GeneralPathX gpx=new GeneralPathX();
332
			Handler lastHandler=null;
333
			for (int i = 0; i < geometries.size(); i++) {
334
				IGeometry geom=(IGeometry)geometries.get(i);
335
				GeneralPathXIterator gpxi=(GeneralPathXIterator)geom.getPathIterator(null);
336
				Handler[] handlers=geom.getHandlers(IGeometry.SELECTHANDLER);
337
				if (lastHandler==null || handlers[0].getPoint().distance(lastHandler.getPoint())==0) {
338
					gpx.append(gpxi,true);
339
				}else {
340
					gpx.append(gpxi,false);
341
				}
342
				lastHandler=handlers[handlers.length-1];
343
			}
344
			IGeometry geom=ShapeFactory.createPolygon2D(gpx);
345
			geom.setGeometryType(type);
346
			geom.drawInts(g,vp,symbol);
347
		}
290 348

  
291 349
    }
292 350

  
......
315 373
		for (int i = 0; i < geometries.size(); i++){
316 374
			Handler[] handAux=((IGeometry)geometries.get(i)).getHandlers(type);
317 375
			for (int j=0;j<handAux.length;j++){
318
				handlers.add(handAux[j]);
376
				if (!handlers.contains(handAux[j]))
377
					handlers.add(handAux[j]);
319 378
			}
320 379
		}
321 380
		return (Handler[])handlers.toArray(new Handler[0]);
......
363 422
	}
364 423

  
365 424
	public boolean intersects(double x, double y, double w, double h) {
366
		boolean bRes;
367
		for (int i=0; i < geometries.size(); i++)
368
		{
369
			IGeometry gAux = (IGeometry) geometries.get(i);
370
			bRes = gAux.intersects(x,y, w, h);
371
			if (bRes) return bRes;
425
		boolean resul = false;
426
		if (type==FShape.LINE) {
427
			for (int i=0; i < geometries.size(); i++){
428
				IGeometry gAux = (IGeometry) geometries.get(i);
429
				resul= gAux.intersects(x,y, w, h);
430
				if (resul) break;
431
			}
432
		}else if (type==FShape.POLYGON) {
433
			GeneralPathX gpx=new GeneralPathX();
434
			Handler lastHandler=null;
435
			for (int i = 0; i < geometries.size(); i++) {
436
				IGeometry geom=(IGeometry)geometries.get(i);
437
				GeneralPathXIterator gpxi=(GeneralPathXIterator)geom.getPathIterator(null);
438
				Handler[] handlers=geom.getHandlers(IGeometry.SELECTHANDLER);
439
				if (lastHandler==null || handlers[0].getPoint().distance(lastHandler.getPoint())==0) {
440
					gpx.append(gpxi,true);
441
				}else {
442
					gpx.append(gpxi,false);
443
				}
444
				lastHandler=handlers[handlers.length-1];
445
			}
446
			IGeometry geom=ShapeFactory.createPolygon2D(gpx);
447
			geom.setGeometryType(FShape.POLYGON);
448
			resul=geom.intersects(x,y,w,h);
372 449
		}
373

  
374
		return false;
450
		return resul;
375 451
	}
376 452

  
377 453
	public Rectangle getBounds() {
......
413 489
	public Shape getInternalShape() {
414 490
		return this;
415 491
	}
492

  
493
	public int getOriginalGeometryType() {
494
		return type;
495
	}
496

  
497
	public boolean isClosed() {
498
		GeneralPathX gpx=new GeneralPathX();
499
		PathIterator pi=getPathIterator(null);
500
		gpx.append(pi,true);
501
		return gpx.isClosed();
502
	}
416 503
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FPolygon2D.java
48 48
 * @author Vicente Caballero Navarro
49 49
 */
50 50
public class FPolygon2D extends FPolyline2D {
51
	private int type=FShape.POLYGON;
51 52
	/**
52 53
	 * Crea un nuevo Polygon2D.
53 54
	 *
......
61 62
	 * @see com.iver.cit.gvsig.fmap.core.FShape#getShapeType()
62 63
	 */
63 64
	public int getShapeType() {
65
		return type;
66
	}
67
	public void setShapeType(int type) {
68
		this.type=type;
69
	}
70

  
71
	public int getShapeTypeOriginal() {
64 72
		return FShape.POLYGON;
65 73
	}
66

  
67 74
	/**
68 75
	 * Clona FPolygon2D.
69 76
	 *
......
80 87

  
81 88
	/* public void draw(Graphics2D g, ViewPort vp, Style2D symbol) {
82 89
	   gp.transform(vp.getAffineTransform());
83
	
90

  
84 91
	       g.setPaint(Color.red);
85 92
	       g.fill(gp);
86 93
	       g.setPaint(Color.black);
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FEllipse2D.java
42 42

  
43 43
import java.awt.geom.AffineTransform;
44 44
import java.awt.geom.Arc2D;
45
import java.awt.geom.Line2D;
46 45
import java.awt.geom.Point2D;
47 46
import java.awt.geom.Rectangle2D;
48

  
49 47
import java.util.ArrayList;
50 48

  
51 49
import com.iver.cit.gvsig.fmap.edition.UtilFunctions;
......
56 54
*
57 55
* @author Vicente Caballero Navarro
58 56
*/
59
public class FEllipse2D extends FPolyline2D {
57
public class FEllipse2D extends FPolygon2D {
60 58
	private Point2D init;
61 59
	private Point2D end;
62 60
	private double ydist;
......
404 402
			AffineTransform mT = AffineTransform.getRotateInstance(angle, init.getX(), init.getY());
405 403
			gp = new GeneralPathX(arc);
406 404
			gp.transform(mT);
407
		}		
405
		}
408 406
	}
409
	
407

  
410 408
	/* (non-Javadoc)
411 409
	 * @see com.iver.cit.gvsig.fmap.core.FPolyline2D#intersects(java.awt.geom.Rectangle2D)
412 410
	 */
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FNullGeometry.java
203 203
		// TODO Auto-generated method stub
204 204
		return null;
205 205
	}
206

  
207
	public int getOriginalGeometryType() {
208
		return FShape.NULL;
209
	}
210

  
211
	public void setGeometryType(int type) {
212

  
213
	}
206 214
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/core/FCircle2D.java
56 56
 *
57 57
 * @author Vicente Caballero Navarro
58 58
 */
59
public class FCircle2D extends FPolyline2D {
59
public class FCircle2D extends FPolygon2D {
60 60
	private Point2D center;
61 61
	private double radio;
62 62

  
trunk/extensions/extCAD/src/com/iver/cit/gvsig/InternalPolygonExtension.java
40 40
 */
41 41
package com.iver.cit.gvsig;
42 42

  
43
import java.util.ArrayList;
44

  
43 45
import com.iver.andami.PluginServices;
44 46
import com.iver.andami.plugins.Extension;
45 47
import com.iver.cit.gvsig.fmap.DriverException;
......
47 49
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
48 50
import com.iver.cit.gvsig.gui.View;
49 51
import com.iver.cit.gvsig.gui.cad.tools.InternalPolygonCADTool;
52
import com.iver.cit.gvsig.layers.VectorialLayerEdited;
50 53

  
51 54
/**
52 55
 * Extensi?n que gestiona la inserci?n de pol?gonos internos en edici?n.
......
90 93
				mapControl = (MapControl) view.getMapControl();
91 94
				if (CADExtension.getEditionManager().getActiveLayerEdited()==null)
92 95
					return false;
93
				FLyrVect lv=(FLyrVect)CADExtension.getEditionManager().getActiveLayerEdited().getLayer();
96
				EditionManager em=CADExtension.getEditionManager();
97
				if (em.getActiveLayerEdited()==null)
98
					return false;
99
				VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
100
				FLyrVect lv=(FLyrVect)vle.getLayer();
101
				ArrayList selectedRows=vle.getSelectedRow();
102
				if (selectedRows.size()<1) {
103
					return false;
104
				}
94 105
				if (internalpolygon.isApplicable(lv.getShapeType())){
95 106
					return true;
96 107
				}
trunk/extensions/extCAD/src/com/iver/cit/gvsig/ExploitExtension.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package com.iver.cit.gvsig;
42

  
43
import java.util.ArrayList;
44

  
45
import com.iver.andami.PluginServices;
46
import com.iver.andami.plugins.Extension;
47
import com.iver.cit.gvsig.fmap.DriverException;
48
import com.iver.cit.gvsig.fmap.MapControl;
49
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
50
import com.iver.cit.gvsig.gui.View;
51
import com.iver.cit.gvsig.gui.cad.tools.ExploitCADTool;
52
import com.iver.cit.gvsig.gui.cad.tools.InternalPolygonCADTool;
53
import com.iver.cit.gvsig.layers.VectorialLayerEdited;
54

  
55
/**
56
 * Extensi?n que gestiona la simplificaci?n de una geometr?a compuesta en otras m?s sencillas.
57
 *
58
 * @author Vicente Caballero Navarro
59
 */
60
public class ExploitExtension extends Extension {
61
	private View view;
62

  
63
	private MapControl mapControl;
64
	private ExploitCADTool exploit;
65

  
66
	/**
67
	 * @see com.iver.andami.plugins.IExtension#initialize()
68
	 */
69
	public void initialize() {
70
		exploit=new ExploitCADTool();
71
		CADExtension.addCADTool("_exploit",exploit);
72
	}
73

  
74
	/**
75
	 * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
76
	 */
77
	public void execute(String s) {
78
		CADExtension.initFocus();
79
		if (s.equals("_exploit")) {
80
        	CADExtension.setCADTool(s,true);
81
        }
82
		CADExtension.getEditionManager().setMapControl(mapControl);
83
		CADExtension.getCADToolAdapter().configureMenu();
84
	}
85

  
86
	/**
87
	 * @see com.iver.andami.plugins.IExtension#isEnabled()
88
	 */
89
	public boolean isEnabled() {
90

  
91
		try {
92
			if (EditionUtilities.getEditionStatus() == EditionUtilities.EDITION_STATUS_ONE_VECTORIAL_LAYER_ACTIVE_AND_EDITABLE) {
93
				view = (View) PluginServices.getMDIManager().getActiveView();
94
				mapControl = (MapControl) view.getMapControl();
95
				EditionManager em=CADExtension.getEditionManager();
96
				if (em.getActiveLayerEdited()==null)
97
					return false;
98
				VectorialLayerEdited vle=(VectorialLayerEdited)em.getActiveLayerEdited();
99
				FLyrVect lv=(FLyrVect)vle.getLayer();
100
				ArrayList selectedRows=vle.getSelectedRow();
101
				if (selectedRows.size()<1) {
102
					return false;
103
				}
104
				if (exploit.isApplicable(lv.getShapeType())){
105
					return true;
106
				}
107
			}
108
		} catch (DriverException e) {
109
			e.printStackTrace();
110
		}
111
		return false;
112
	}
113

  
114
	/**
115
	 * @see com.iver.andami.plugins.IExtension#isVisible()
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff