Revision 36005 branches/v2_0_0_prep/extensions/extEditing/src/org/gvsig/editing/layers/VectorialLayerEdited.java
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