Revision 36005 branches/v2_0_0_prep/extensions/extEditing/src/org/gvsig/editing/layers/VectorialLayerEdited.java

View differences:

VectorialLayerEdited.java
1 1
package org.gvsig.editing.layers;
2 2

  
3
import java.awt.Graphics2D;
4 3
import java.awt.Image;
5 4
import java.awt.geom.Point2D;
6
import java.awt.image.BufferedImage;
7 5
import java.util.ArrayList;
8 6
import java.util.ConcurrentModificationException;
9 7
import java.util.EmptyStackException;
......
29 27
import org.gvsig.fmap.dal.feature.FeatureSelection;
30 28
import org.gvsig.fmap.dal.feature.FeatureSet;
31 29
import org.gvsig.fmap.dal.feature.FeatureStore;
30
import org.gvsig.fmap.geom.Geometry;
32 31
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
33 32
import org.gvsig.fmap.geom.Geometry.TYPES;
34 33
import org.gvsig.fmap.geom.GeometryLocator;
......
52 51
import org.gvsig.fmap.mapcontext.layers.vectorial.IntersectsGeometryEvaluator;
53 52
import org.gvsig.fmap.mapcontext.layers.vectorial.OutGeometryEvaluator;
54 53
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
54
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
55 55
import org.gvsig.fmap.mapcontrol.MapControl;
56
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
56 57
import org.gvsig.fmap.mapcontrol.MapControlLocator;
57 58
import org.gvsig.fmap.mapcontrol.MapControlManager;
58 59
import org.gvsig.tools.dispose.DisposableIterator;
......
64 65
public class VectorialLayerEdited extends DefaultLayerEdited implements
65 66
LayerDrawingListener, Observer {
66 67
	private static final GeometryManager geomManager = GeometryLocator.getGeometryManager();
67
	private static final Logger logger = LoggerFactory.getLogger(VectorialLayerEdited.class);
68
	private static final MapControlManager mapControlManager = MapControlLocator.getMapControlManager();
68
	private static final Logger LOG = LoggerFactory.getLogger(VectorialLayerEdited.class);
69
	private static final MapControlManager MAP_CONTROL_MANAGER = MapControlLocator.getMapControlManager();
69 70
	private ArrayList selectedHandler = new ArrayList();
70 71
	private Point2D lastPoint;
71 72
	private Point2D firstPoint;
......
105 106
			firstPoint = new Point2D.Double(x, y);
106 107
			FeatureStore featureStore = getFeatureStore();
107 108
			// Se comprueba si se pincha en una gemometr�a
108
			ViewPort vp = getLayer().getMapContext().getViewPort();
109
			double tol = vp.toMapDistance(mapControlManager.getTolerance());
109
			ViewPort viewPort = getLayer().getMapContext().getViewPort();
110
			double tol = viewPort.toMapDistance(MAP_CONTROL_MANAGER.getTolerance());
110 111

  
111 112
			GeometryManager manager = GeometryLocator.getGeometryManager();
112 113
			Point center = (org.gvsig.fmap.geom.primitive.Point)manager.create(TYPES.POINT, SUBTYPES.GEOM2D);
......
115 116
			Circle circle = (Circle)geomManager.create(TYPES.CIRCLE, SUBTYPES.GEOM2D);
116 117
			circle.setPoints(center, tol);
117 118

  
118
			FeatureQuery fq = featureStore.createFeatureQuery();
119
			fq.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
120
			Evaluator evaluator = new IntersectsGeometryEvaluator(circle, vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
121
			fq.setFilter(evaluator);
122
			set = featureStore.getFeatureSet(fq);
119
			FeatureQuery featureQuery = featureStore.createFeatureQuery();
120
			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
121
			Evaluator evaluator = new IntersectsGeometryEvaluator(circle, viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
122
			featureQuery.setFilter(evaluator);
123
			set = featureStore.getFeatureSet(featureQuery);
123 124
			if (!multipleSelection && set.getSize()>1){
124
				SelectRowPanel selectionPanel=new SelectRowPanel(set, this);
125
				SelectRowPanel selectionPanel = new SelectRowPanel(set, this);
125 126
				PluginServices.getMDIManager().addCentredWindow(selectionPanel);
126 127
			}
127
			selectGeometries(featureStore, set, vp, multipleSelection);
128
			selectGeometries(featureStore, set, viewPort, multipleSelection);
128 129
		} catch (ReadException e) {
129 130
			NotificationManager.addError(e.getMessage(), e);
130 131
		} catch (GeometryOperationNotSupportedException e) {
......
145 146
		try {
146 147
			FeatureStore featureStore = getFeatureStore();
147 148
			lastPoint = new Point2D.Double(x, y);
148
			ViewPort vp = getLayer().getMapContext().getViewPort();
149
			ViewPort viewPort = getLayer().getMapContext().getViewPort();
149 150
			double x1;
150 151
			double y1;
151 152
			double w1;
......
169 170

  
170 171
			Envelope envelope = geomManager.createEnvelope(x1, y1, x1 + w1, y1 + h1, SUBTYPES.GEOM2D);
171 172

  
172
			FeatureQuery fq = featureStore.createFeatureQuery();
173
			fq.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
173
			FeatureQuery featureQuery = featureStore.createFeatureQuery();
174
			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
174 175
			Evaluator evaluator=null;
175 176
			if (firstPoint.getX() < lastPoint.getX()) {
176
				evaluator = new IntersectsGeometryEvaluator(envelope.getGeometry(), vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
177
				evaluator = new IntersectsGeometryEvaluator(envelope.getGeometry(), viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
177 178
			}else{
178
				evaluator = new IntersectsGeometryEvaluator(envelope.getGeometry(), vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
179
				evaluator = new IntersectsGeometryEvaluator(envelope.getGeometry(), viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
179 180
			}
180
			fq.setFilter(evaluator);
181
			set = featureStore.getFeatureSet(fq);
182
			selectGeometries(featureStore, set, vp, false);
181
			featureQuery.setFilter(evaluator);
182
			set = featureStore.getFeatureSet(featureQuery);
183
			selectGeometries(featureStore, set, viewPort, false);
183 184
		} catch (ReadException e) {
184 185
			NotificationManager.addError(e.getMessage(), e);
185 186
		} catch (GeometryOperationNotSupportedException e) {
......
199 200
		FeatureSet set = null;
200 201
		try {
201 202
			FeatureStore featureStore = getFeatureStore();
202
			ViewPort vp = getLayer().getMapContext().getViewPort();
203
			FeatureQuery fq = featureStore.createFeatureQuery();
204
			fq.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
205
			Evaluator evaluator = new ContainsGeometryEvaluator(polygon, vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
206
			fq.setFilter(evaluator);
207
			set = featureStore.getFeatureSet(fq);
208
			selectGeometries(featureStore, set, vp, false);
203
			ViewPort viewPort = getLayer().getMapContext().getViewPort();
204
			FeatureQuery featureQuery = featureStore.createFeatureQuery();
205
			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
206
			Evaluator evaluator = new ContainsGeometryEvaluator(polygon, viewPort.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
207
			featureQuery.setFilter(evaluator);
208
			set = featureStore.getFeatureSet(featureQuery);
209
			selectGeometries(featureStore, set, viewPort, false);
209 210
		} catch (ReadException e) {
210 211
			NotificationManager.addError(e.getMessage(), e);
211 212
		} catch (DataException e) {
......
218 219
			DisposeUtils.dispose(set);
219 220
		}
220 221
	}
222
	
221 223
	private void selectGeometries(FeatureStore featureStore, FeatureSet set, ViewPort vp, boolean multipleSelection) throws DataException, GeometryOperationNotSupportedException, GeometryOperationException{
222
		BufferedImage selectionImage = null;
223
		BufferedImage handlersImage = null;
224
		//		if (!multipleSelection) {
225
		//			clearSelection();
226
		//		}
227
		if (multipleSelection && getSelectionImage() != null
228
				&& getHandlersImage() != null) {
229
			selectionImage = (BufferedImage) getSelectionImage();
230
			handlersImage = (BufferedImage) getHandlersImage();
231
		} else {
232
			selectionImage =
233
					new BufferedImage(vp.getImageWidth(), vp.getImageHeight(),
234
							BufferedImage.TYPE_INT_ARGB);
235
			handlersImage =
236
					new BufferedImage(vp.getImageWidth(), vp.getImageHeight(),
237
							BufferedImage.TYPE_INT_ARGB);
238
		}
239
		Graphics2D gs = selectionImage.createGraphics();
240
		Graphics2D gh = handlersImage.createGraphics();
241 224
		FeatureSelection featureSelection = null;
242 225
		if (multipleSelection) {
243 226
			featureSelection = (FeatureSelection) featureStore.getSelection();
......
247 230
			featureSelection.select(set);
248 231
			featureStore.setSelection(featureSelection);
249 232
		}
233
		//Draw the geometries with the edition symbology
234
		
250 235
	}
251 236
	
252 237
	public void selectIntersectsSurface(org.gvsig.fmap.geom.Geometry polygon) {
......
254 239
		try {
255 240
			FeatureStore featureStore = getFeatureStore();
256 241
			ViewPort vp = getLayer().getMapContext().getViewPort();
257
			FeatureQuery fq = featureStore.createFeatureQuery();
258
			fq.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
242
			FeatureQuery featureQuery = featureStore.createFeatureQuery();
243
			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
259 244
			Evaluator evaluator = new IntersectsGeometryEvaluator(polygon, vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
260
			fq.setFilter(evaluator);
261
			set = featureStore.getFeatureSet(fq);
245
			featureQuery.setFilter(evaluator);
246
			set = featureStore.getFeatureSet(featureQuery);
262 247
			selectGeometries(featureStore,set,vp,false);
263 248
		} catch (ReadException e) {
264 249
			NotificationManager.addError(e.getMessage(), e);
......
278 263
		try {
279 264
			FeatureStore featureStore = getFeatureStore();
280 265
			ViewPort vp = getLayer().getMapContext().getViewPort();
281
			FeatureQuery fq = featureStore.createFeatureQuery();
282
			fq.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
266
			FeatureQuery featureQuery = featureStore.createFeatureQuery();
267
			featureQuery.setAttributeNames(new String[]{featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName()});
283 268
			Evaluator evaluator=new OutGeometryEvaluator(polygon, vp.getProjection(), featureStore.getDefaultFeatureType(), featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName());
284
			fq.setFilter(evaluator);
285
			set = featureStore.getFeatureSet(fq);
269
			featureQuery.setFilter(evaluator);
270
			set = featureStore.getFeatureSet(featureQuery);
286 271
			selectGeometries(featureStore, set, vp, false);
287 272

  
288 273
		} catch (ReadException e) {
......
302 287
		FeatureSet set = null;
303 288
		try {
304 289
			FeatureStore featureStore = getFeatureStore();
305
			ViewPort vp = getLayer().getMapContext().getViewPort();
290
			ViewPort viewPort = getLayer().getMapContext().getViewPort();
306 291
			set = featureStore.getFeatureSet();
307
			selectGeometries(featureStore, set, vp, false);
292
			selectGeometries(featureStore, set, viewPort, false);
308 293
		} catch (ReadException e) {
309 294
			NotificationManager.addError(e.getMessage(), e);
310 295
		} catch (DataException e) {
......
320 305

  
321 306
	public void drawHandlers(org.gvsig.fmap.geom.Geometry geom, 
322 307
			ViewPort vp) {
323
		Handler[] handlers = geom
324
		.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
308
		Handler[] handlers = geom.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
325 309
		mapControl.getMapControlDrawer().drawHandlers(handlers, vp.getAffineTransform(), 
326
				mapControlManager.getHandlerSymbol());
310
				MAP_CONTROL_MANAGER.getHandlerSymbol());
327 311
	}
328 312

  
329 313
	public Image getSelectionImage() {
......
353 337
		try {
354 338
			featureStore = getFeatureStore();
355 339
			if (featureStore.isEditing()) {
356
				ViewPort vp = getLayer().getMapContext().getViewPort();				
357
				iterator = featureStore.getFeatureSelection()
358
				.iterator();
340
				ViewPort viewPort = getLayer().getMapContext().getViewPort();				
341
				iterator = featureStore.getFeatureSelection().fastIterator();				
342
				MapControlDrawer mapControlDrawer = mapControl.getMapControlDrawer();
359 343
				try {
360 344
					while (iterator.hasNext()) {
361 345
						Feature feature = (Feature) iterator.next();
362
						org.gvsig.fmap.geom.Geometry geom = feature
363
						.getDefaultGeometry();
364
						mapControl.getMapControlDrawer().startDrawing(this);
365
						mapControl.getMapControlDrawer().setGraphics(e.getGraphics());
366
						drawHandlers(geom.cloneGeometry(), vp);
367
						mapControl.getMapControlDrawer().stopDrawing(this);
346
						Geometry geometry = feature.getDefaultGeometry();
347
						mapControlDrawer.startDrawing(this);
348
						mapControlDrawer.setGraphics(e.getGraphics());						
349
					    drawHandlers(geometry.cloneGeometry(), viewPort);  														
350
						mapControlDrawer.stopDrawing(this);
368 351
					}
369 352
				} catch (ConcurrentModificationException e1) {
370 353
					// throw new CancelationException(e1);
......
374 357
				}
375 358
			}
376 359
		} catch (Exception e2) {
377
			e2.printStackTrace();
360
			LOG.error("Error drawing the selected geometry", e2);
378 361
		} finally {
379 362
			if (iterator != null) {
380 363
				iterator.dispose();
......
382 365
		}
383 366
	}
384 367

  
385
	public void beforeGraphicLayerDraw(LayerDrawEvent e)
368
    public void beforeGraphicLayerDraw(LayerDrawEvent e)
386 369
	throws CancelationException {
387 370
	}
388 371

  

Also available in: Unified diff