svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extCAD / src / com / iver / cit / gvsig / layers / VectorialLayerEdited.java @ 23086
History | View | Annotate | Download (29.7 KB)
1 |
package com.iver.cit.gvsig.layers; |
---|---|
2 |
|
3 |
import java.awt.Graphics2D; |
4 |
import java.awt.Image; |
5 |
import java.awt.geom.Point2D; |
6 |
import java.awt.geom.Rectangle2D; |
7 |
import java.awt.image.BufferedImage; |
8 |
import java.util.ArrayList; |
9 |
import java.util.EmptyStackException; |
10 |
import java.util.Iterator; |
11 |
|
12 |
import org.cresques.cts.ICoordTrans; |
13 |
import org.gvsig.fmap.data.DataException; |
14 |
import org.gvsig.fmap.data.ReadException; |
15 |
import org.gvsig.fmap.data.feature.Feature; |
16 |
import org.gvsig.fmap.data.feature.FeatureCollection; |
17 |
import org.gvsig.fmap.data.feature.FeatureStore; |
18 |
import org.gvsig.fmap.geom.handler.Handler; |
19 |
import org.gvsig.fmap.geom.operation.Draw; |
20 |
import org.gvsig.fmap.geom.operation.DrawOperationContext; |
21 |
import org.gvsig.fmap.geom.operation.GeometryOperationException; |
22 |
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException; |
23 |
import org.gvsig.fmap.geom.operation.tojts.ToJTS; |
24 |
import org.gvsig.fmap.geom.primitive.DefaultEnvelope; |
25 |
import org.gvsig.fmap.geom.primitive.Envelope; |
26 |
import org.gvsig.fmap.mapcontext.ViewPort; |
27 |
import org.gvsig.fmap.mapcontext.layers.CancelationException; |
28 |
import org.gvsig.fmap.mapcontext.layers.FBitSet; |
29 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
30 |
import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent; |
31 |
import org.gvsig.fmap.mapcontext.layers.LayerDrawingListener; |
32 |
import org.gvsig.fmap.mapcontext.layers.LayerEvent; |
33 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
34 |
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend; |
35 |
import org.gvsig.fmap.mapcontext.rendering.symbols.FGraphicUtilities; |
36 |
import org.gvsig.tools.observer.Observable; |
37 |
import org.gvsig.tools.observer.Observer; |
38 |
|
39 |
import com.iver.andami.PluginServices; |
40 |
import com.iver.andami.messages.NotificationManager; |
41 |
import com.iver.andami.ui.mdiManager.IWindow; |
42 |
import com.iver.cit.gvsig.CADExtension; |
43 |
import com.iver.cit.gvsig.StartEditing; |
44 |
import com.iver.cit.gvsig.ViewCommandStackExtension; |
45 |
import com.iver.cit.gvsig.gui.cad.CADTool; |
46 |
import com.iver.cit.gvsig.gui.cad.CADToolAdapter; |
47 |
import com.iver.cit.gvsig.gui.cad.DefaultCADTool; |
48 |
import com.iver.cit.gvsig.gui.cad.tools.SelectionCADTool; |
49 |
import com.iver.cit.gvsig.project.documents.view.gui.View; |
50 |
import com.vividsolutions.jts.geom.Geometry; |
51 |
|
52 |
public class VectorialLayerEdited extends DefaultLayerEdited implements LayerDrawingListener, Observer{ |
53 |
private ArrayList selectedHandler = new ArrayList(); |
54 |
// private ArrayList selectedRow = new ArrayList();
|
55 |
private Point2D lastPoint; |
56 |
private Point2D firstPoint; |
57 |
private CADTool cadtool=null; |
58 |
|
59 |
private ArrayList snappers = new ArrayList(); |
60 |
private ArrayList layersToSnap = new ArrayList(); |
61 |
private ILegend legend;
|
62 |
/** Selecci?n previa**/
|
63 |
private ArrayList previousRowSelection=new ArrayList(); |
64 |
private ArrayList previousHandlerSelection=new ArrayList(); |
65 |
private Image imageSelection; |
66 |
private Image imageHandlers; |
67 |
public static final boolean SAVEPREVIOUS=true; |
68 |
public static final boolean NOTSAVEPREVIOUS=false; |
69 |
|
70 |
|
71 |
public VectorialLayerEdited(FLayer lyr)
|
72 |
{ |
73 |
super(lyr);
|
74 |
lyr.getMapContext().addLayerDrawingListener(this);
|
75 |
// Por defecto, siempre hacemos snapping sobre la capa en edici?n.
|
76 |
layersToSnap.add(lyr); |
77 |
try {
|
78 |
((FLyrVect)lyr).getFeatureStore().addObserver(this);
|
79 |
} catch (ReadException e) {
|
80 |
NotificationManager.addError(e.getMessage(),e); |
81 |
} |
82 |
} |
83 |
|
84 |
public ArrayList getSelectedHandler() { |
85 |
return selectedHandler;
|
86 |
} |
87 |
|
88 |
// public ArrayList getSelectedRow() {
|
89 |
// return selectedRow;
|
90 |
// }
|
91 |
|
92 |
public void clearSelection(boolean savePrevious) throws ReadException { |
93 |
if (getFeatureStore()==null) |
94 |
return;
|
95 |
FeatureCollection selection=(FeatureCollection)getFeatureStore().getSelection(); |
96 |
if (!selection.isEmpty() && savePrevious){
|
97 |
// if (!selectedRow.isEmpty() && savePrevious) {
|
98 |
previousRowSelection.clear(); |
99 |
previousHandlerSelection.clear(); |
100 |
} |
101 |
if (savePrevious) {
|
102 |
previousRowSelection.addAll(selection); |
103 |
previousHandlerSelection.addAll(selectedHandler); |
104 |
} |
105 |
selectedHandler.clear(); |
106 |
selection.clear(); |
107 |
// if (getVEA() != null)
|
108 |
// {
|
109 |
// FBitSet selection=getVEA().getSelection();
|
110 |
// selection.clear();
|
111 |
// }
|
112 |
} |
113 |
public void restorePreviousSelection() throws ReadException { |
114 |
FeatureCollection selection=(FeatureCollection)getFeatureStore().getSelection(); |
115 |
selection.clear(); |
116 |
selectedHandler.clear(); |
117 |
selection.addAll(previousRowSelection); |
118 |
selectedHandler.addAll(previousHandlerSelection); |
119 |
// VectorialEditableAdapter vea=getVEA();
|
120 |
// FBitSet selection=vea.getSelection();
|
121 |
//
|
122 |
// selection.clear();
|
123 |
// selectedRow.clear();
|
124 |
// selectedHandler.clear();
|
125 |
//
|
126 |
// selectedRow.addAll(previousRowSelection);
|
127 |
// selectedHandler.addAll(previousHandlerSelection);
|
128 |
// for (int i = 0;i < selectedRow.size(); i++) {
|
129 |
// IRowEdited edRow = (IRowEdited) selectedRow.get(i);
|
130 |
// selection.set(edRow.getIndex());
|
131 |
// }
|
132 |
|
133 |
previousRowSelection.clear(); |
134 |
previousHandlerSelection.clear(); |
135 |
} |
136 |
/**
|
137 |
* @return Returns the selectedRow.
|
138 |
*/
|
139 |
// public IFeature[] getSelectedRowsCache() {
|
140 |
// return (IFeature[]) selectedRow.toArray(new IFeature[0]);
|
141 |
// }
|
142 |
public void selectWithPoint(double x, double y,boolean multipleSelection){ |
143 |
try {
|
144 |
firstPoint = new Point2D.Double(x, y); |
145 |
// VectorialEditableAdapter vea = getVEA();
|
146 |
FeatureStore featureStore=getFeatureStore(); |
147 |
FeatureCollection selection=(FeatureCollection)featureStore.getSelection(); |
148 |
// FBitSet selection=null;
|
149 |
// try {
|
150 |
// selection = vea.getSelection();
|
151 |
|
152 |
if (!multipleSelection) {
|
153 |
clearSelection(SAVEPREVIOUS); |
154 |
} |
155 |
// } catch (ReadException e) {
|
156 |
// NotificationManager.addError(e.getMessage(),e);
|
157 |
// }
|
158 |
// Se comprueba si se pincha en una gemometr?a
|
159 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
160 |
double tol =vp.toMapDistance(SelectionCADTool.tolerance);
|
161 |
|
162 |
FeatureCollection newSelection = ((FLyrVect)getLayer()).queryByPoint(firstPoint, tol, getFeatureStore().getDefaultFeatureType()); |
163 |
|
164 |
|
165 |
// Envelope rect = new DefaultEnvelope(firstPoint.getX() - tam,
|
166 |
// firstPoint.getY() - tam, tam * 2, tam * 2);
|
167 |
//
|
168 |
String strEPSG = vp.getProjection().getAbrev();
|
169 |
selection.clear(); |
170 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
171 |
Graphics2D gs = selectionImage.createGraphics();
|
172 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
173 |
Graphics2D gh = handlersImage.createGraphics();
|
174 |
// ICoordTrans ct=getLayer().getCoordTrans();
|
175 |
// Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),((FLyrVect)getLayer()).getDataStoreFilterForGeomerty(
|
176 |
// rect.getGeometry(),
|
177 |
// featureStore.getDefaultFeatureType().getDefaultGeometry(),null),null).iterator();
|
178 |
Iterator iterator=newSelection.iterator();
|
179 |
while (iterator.hasNext()) {
|
180 |
Feature feature = (Feature) iterator.next(); |
181 |
|
182 |
// }
|
183 |
// IRowEdited[] feats;
|
184 |
//
|
185 |
|
186 |
// feats = vea.getFeatures(rect, strEPSG);
|
187 |
// selection.clear();
|
188 |
// BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
|
189 |
// Graphics2D gs = selectionImage.createGraphics();
|
190 |
// BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
|
191 |
// Graphics2D gh = handlersImage.createGraphics();
|
192 |
// ICoordTrans ct=getLayer().getCoordTrans();
|
193 |
// for (int i = 0; i < feats.length; i++) {
|
194 |
// IFeature feat = (IFeature) feats[i].getLinkedRow();
|
195 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
196 |
if (geom == null) { |
197 |
continue;
|
198 |
} |
199 |
org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry(); |
200 |
// if (ct!=null)
|
201 |
// geomReproject.reProject(ct);
|
202 |
// if (geomReproject.intersects(new Rectangle2D.Double(rect.getMinimum(0),rect.getMaximum(0),rect.getMinimum(1)-rect.getMinimum(0),rect.getMaximum(1)-rect.getMaximum(0)))) { // , 0.1)){
|
203 |
selection.add(feature); |
204 |
// selection.set(feats[i].getIndex(), true);
|
205 |
// selectedRow.add(feats[i]);
|
206 |
DrawOperationContext doc=new DrawOperationContext();
|
207 |
doc.setGraphics(gs); |
208 |
doc.setViewPort(vp); |
209 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
210 |
geomReproject.invokeOperation(Draw.CODE,doc);//cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol);
|
211 |
drawHandlers(geomReproject.cloneGeometry(),gh,vp); |
212 |
} |
213 |
// }
|
214 |
setSelectionImage(selectionImage); |
215 |
setHandlersImage(handlersImage); |
216 |
} catch (ReadException e) {
|
217 |
NotificationManager.addError(e.getMessage(),e); |
218 |
} catch (GeometryOperationNotSupportedException e) {
|
219 |
NotificationManager.addError(e.getMessage(),e); |
220 |
} catch (GeometryOperationException e) {
|
221 |
NotificationManager.addError(e.getMessage(),e); |
222 |
} |
223 |
} |
224 |
public void selectWithSecondPoint(double x, double y) { |
225 |
|
226 |
// FBitSet selection=null;
|
227 |
try {
|
228 |
FeatureStore featureStore=getFeatureStore(); |
229 |
// selection = vea.getSelection();
|
230 |
|
231 |
lastPoint = new Point2D.Double(x, y); |
232 |
// selection.clear();
|
233 |
clearSelection(SAVEPREVIOUS); |
234 |
|
235 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
236 |
double x1;
|
237 |
double y1;
|
238 |
double w1;
|
239 |
double h1;
|
240 |
|
241 |
if (firstPoint.getX() < lastPoint.getX()) {
|
242 |
x1 = firstPoint.getX(); |
243 |
w1 = lastPoint.getX() - firstPoint.getX(); |
244 |
} else {
|
245 |
x1 = lastPoint.getX(); |
246 |
w1 = firstPoint.getX() - lastPoint.getX(); |
247 |
} |
248 |
|
249 |
if (firstPoint.getY() < lastPoint.getY()) {
|
250 |
y1 = firstPoint.getY(); |
251 |
h1 = lastPoint.getY() - firstPoint.getY(); |
252 |
} else {
|
253 |
y1 = lastPoint.getY(); |
254 |
h1 = firstPoint.getY() - lastPoint.getY(); |
255 |
} |
256 |
|
257 |
Rectangle2D rect = new Rectangle2D.Double(x1, y1, w1, h1); |
258 |
|
259 |
String strEPSG = vp.getProjection().getAbrev();
|
260 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
261 |
Graphics2D gs = selectionImage.createGraphics();
|
262 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
263 |
Graphics2D gh = handlersImage.createGraphics();
|
264 |
ICoordTrans ct=getLayer().getCoordTrans(); |
265 |
Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator(); |
266 |
DrawOperationContext doc=new DrawOperationContext();
|
267 |
doc.setGraphics(gs); |
268 |
doc.setViewPort(vp); |
269 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
270 |
while (iterator.hasNext()) {
|
271 |
Feature feature = (Feature) iterator.next(); |
272 |
//
|
273 |
// }
|
274 |
// IRowEdited[] feats;
|
275 |
// try {
|
276 |
// feats = vea.getFeatures(rect, strEPSG);
|
277 |
|
278 |
// for (int i = 0; i < feats.length; i++) {
|
279 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature |
280 |
.getDefaultGeometry(); |
281 |
|
282 |
if (geom == null) { |
283 |
continue;
|
284 |
} |
285 |
org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry(); |
286 |
if (ct!=null) |
287 |
geomReproject.reProject(ct); |
288 |
|
289 |
if (firstPoint.getX() < lastPoint.getX()) {
|
290 |
if (rect.contains(geomReproject.getBounds2D())) {
|
291 |
featureStore.getSelection().add(feature); |
292 |
// selectedRow.add(feats[i]);
|
293 |
// selection.set(feats[i].getIndex(), true);
|
294 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
295 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
296 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
297 |
} |
298 |
} else {
|
299 |
if (geomReproject.intersects(rect)) { // , 0.1)){ |
300 |
featureStore.getSelection().add(feature); |
301 |
// selectedRow.add(feats[i]);
|
302 |
// selection.set(feats[i].getIndex(), true);
|
303 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
304 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
305 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
306 |
} |
307 |
} |
308 |
} |
309 |
setSelectionImage(selectionImage); |
310 |
setHandlersImage(handlersImage); |
311 |
} catch (ReadException e) {
|
312 |
NotificationManager.addError(e.getMessage(),e); |
313 |
} catch (GeometryOperationNotSupportedException e) {
|
314 |
NotificationManager.addError(e.getMessage(),e); |
315 |
} catch (GeometryOperationException e) {
|
316 |
NotificationManager.addError(e.getMessage(),e); |
317 |
} |
318 |
} |
319 |
public void selectInsidePolygon(org.gvsig.fmap.geom.Geometry polygon) { |
320 |
|
321 |
// VectorialEditableAdapter vea = getVEA();
|
322 |
// FBitSet selection=null;
|
323 |
try {
|
324 |
FeatureStore featureStore=getFeatureStore(); |
325 |
// selection = vea.getSelection();
|
326 |
//
|
327 |
// selection.clear();
|
328 |
clearSelection(SAVEPREVIOUS); |
329 |
// } catch (ReadException e1) {
|
330 |
// NotificationManager.addError(e1.getMessage(),e1);
|
331 |
// }
|
332 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
333 |
|
334 |
Rectangle2D rect = polygon.getBounds2D();
|
335 |
|
336 |
String strEPSG = vp.getProjection().getAbrev();
|
337 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
338 |
Graphics2D gs = selectionImage.createGraphics();
|
339 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
340 |
Graphics2D gh = handlersImage.createGraphics();
|
341 |
ICoordTrans ct=getLayer().getCoordTrans(); |
342 |
Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator(); |
343 |
DrawOperationContext doc=new DrawOperationContext();
|
344 |
doc.setGraphics(gs); |
345 |
doc.setViewPort(vp); |
346 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
347 |
while (iterator.hasNext()) {
|
348 |
Feature feature = (Feature) iterator.next(); |
349 |
|
350 |
// }
|
351 |
// IRowEdited[] feats;
|
352 |
// try {
|
353 |
// feats = vea.getFeatures(rect, strEPSG);
|
354 |
|
355 |
// for (int i = 0; i < feats.length; i++) {
|
356 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
357 |
if (geom == null) { |
358 |
continue;
|
359 |
} |
360 |
org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry(); |
361 |
if (ct!=null) |
362 |
geomReproject.reProject(ct); |
363 |
if (contains(polygon,geomReproject)) {
|
364 |
featureStore.getSelection().add(feature); |
365 |
// selectedRow.add(feats[i]);
|
366 |
// selection.set(feats[i].getIndex(), true);
|
367 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
368 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
369 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
370 |
} |
371 |
} |
372 |
setSelectionImage(selectionImage); |
373 |
setHandlersImage(handlersImage); |
374 |
} catch (ReadException e) {
|
375 |
NotificationManager.addError(e.getMessage(),e); |
376 |
} catch (GeometryOperationNotSupportedException e) {
|
377 |
NotificationManager.addError(e.getMessage(),e); |
378 |
} catch (GeometryOperationException e) {
|
379 |
NotificationManager.addError(e.getMessage(),e); |
380 |
} |
381 |
} |
382 |
|
383 |
public void selectCrossPolygon(org.gvsig.fmap.geom.Geometry polygon) { |
384 |
// VectorialEditableAdapter vea = getVEA();
|
385 |
// FBitSet selection=null;
|
386 |
try {
|
387 |
FeatureStore featureStore=getFeatureStore(); |
388 |
// selection = vea.getSelection();
|
389 |
// selection.clear();
|
390 |
clearSelection(SAVEPREVIOUS); |
391 |
// } catch (ReadException e1) {
|
392 |
// NotificationManager.addError(e1.getMessage(),e1);
|
393 |
// }
|
394 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
395 |
|
396 |
Rectangle2D rect = polygon.getBounds2D();
|
397 |
|
398 |
String strEPSG = vp.getProjection().getAbrev();
|
399 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
400 |
Graphics2D gs = selectionImage.createGraphics();
|
401 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
402 |
Graphics2D gh = handlersImage.createGraphics();
|
403 |
ICoordTrans ct=getLayer().getCoordTrans(); |
404 |
Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator(); |
405 |
|
406 |
DrawOperationContext doc=new DrawOperationContext();
|
407 |
doc.setGraphics(gs); |
408 |
doc.setViewPort(vp); |
409 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
410 |
while (iterator.hasNext()) {
|
411 |
Feature feature = (Feature) iterator.next(); |
412 |
|
413 |
// }
|
414 |
// IRowEdited[] feats;
|
415 |
// try {
|
416 |
// feats = vea.getFeatures(rect, strEPSG);
|
417 |
|
418 |
// for (int i = 0; i < feats.length; i++) {
|
419 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
420 |
if (geom == null) { |
421 |
continue;
|
422 |
} |
423 |
org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry(); |
424 |
if (ct!=null) |
425 |
geomReproject.reProject(ct); |
426 |
if (contains(polygon,geomReproject) || intersects(polygon,geomReproject)) {
|
427 |
featureStore.getSelection().add(feature); |
428 |
// selectedRow.add(feats[i]);
|
429 |
// selection.set(feats[i].getIndex(), true);
|
430 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
431 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
432 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
433 |
} |
434 |
} |
435 |
setSelectionImage(selectionImage); |
436 |
setHandlersImage(handlersImage); |
437 |
} catch (ReadException e) {
|
438 |
NotificationManager.addError(e.getMessage(),e); |
439 |
} catch (GeometryOperationNotSupportedException e) {
|
440 |
NotificationManager.addError(e.getMessage(),e); |
441 |
} catch (GeometryOperationException e) {
|
442 |
NotificationManager.addError(e.getMessage(),e); |
443 |
} |
444 |
} |
445 |
|
446 |
public void selectOutPolygon(org.gvsig.fmap.geom.Geometry polygon) { |
447 |
|
448 |
// VectorialEditableAdapter vea = getVEA();
|
449 |
// FBitSet selection=null;
|
450 |
try {
|
451 |
FeatureStore featureStore=getFeatureStore(); |
452 |
// selection = vea.getSelection();
|
453 |
// selection.clear();
|
454 |
clearSelection(SAVEPREVIOUS); |
455 |
// } catch (ReadException e1) {
|
456 |
// NotificationManager.addError(e1.getMessage(),e1);
|
457 |
// }
|
458 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
459 |
Rectangle2D rect = polygon.getBounds2D();
|
460 |
|
461 |
String strEPSG = vp.getProjection().getAbrev();
|
462 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
463 |
Graphics2D gs = selectionImage.createGraphics();
|
464 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
465 |
Graphics2D gh = handlersImage.createGraphics();
|
466 |
ICoordTrans ct=getLayer().getCoordTrans(); |
467 |
Iterator iterator=featureStore.getDataCollection(featureStore.getDefaultFeatureType(),rect.toString(),null).iterator(); |
468 |
|
469 |
DrawOperationContext doc=new DrawOperationContext();
|
470 |
doc.setGraphics(gs); |
471 |
doc.setViewPort(vp); |
472 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
473 |
while (iterator.hasNext()) {
|
474 |
Feature feature = (Feature) iterator.next(); |
475 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
476 |
if (geom == null) { |
477 |
continue;
|
478 |
} |
479 |
org.gvsig.fmap.geom.Geometry geomReproject=geom.cloneGeometry(); |
480 |
if (ct!=null) |
481 |
geomReproject.reProject(ct); |
482 |
if (!contains(polygon,geomReproject) && !intersects(polygon,geomReproject)) {
|
483 |
featureStore.getSelection().add(feature); |
484 |
// selectedRow.add(rowEd);
|
485 |
// selection.set(rowEd.getIndex(), true);
|
486 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
487 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
488 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
489 |
} |
490 |
} |
491 |
setSelectionImage(selectionImage); |
492 |
setHandlersImage(handlersImage); |
493 |
} catch (ReadException e) {
|
494 |
NotificationManager.addError(e.getMessage(),e); |
495 |
} catch (GeometryOperationNotSupportedException e) {
|
496 |
NotificationManager.addError(e.getMessage(),e); |
497 |
} catch (GeometryOperationException e) {
|
498 |
NotificationManager.addError(e.getMessage(),e); |
499 |
} |
500 |
} |
501 |
public void selectAll() { |
502 |
|
503 |
// VectorialEditableAdapter vea = getVEA();
|
504 |
// FBitSet selection=null;
|
505 |
try {
|
506 |
FeatureStore featureStore=getFeatureStore(); |
507 |
// selection = vea.getSelection();
|
508 |
// selection.clear();
|
509 |
clearSelection(SAVEPREVIOUS); |
510 |
// } catch (ReadException e1) {
|
511 |
// NotificationManager.addError(e1.getMessage(),e1);
|
512 |
// }
|
513 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
514 |
|
515 |
// try {
|
516 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
517 |
Graphics2D gs = selectionImage.createGraphics();
|
518 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
519 |
Graphics2D gh = handlersImage.createGraphics();
|
520 |
ICoordTrans ct=getLayer().getCoordTrans(); |
521 |
FeatureCollection fCollection=(FeatureCollection)featureStore.getDataCollection(); |
522 |
Iterator iterator=fCollection.iterator();
|
523 |
featureStore.setSelection(fCollection); |
524 |
|
525 |
DrawOperationContext doc=new DrawOperationContext();
|
526 |
doc.setGraphics(gs); |
527 |
doc.setViewPort(vp); |
528 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
529 |
|
530 |
while (iterator.hasNext()) {
|
531 |
Feature feature = (Feature) iterator.next(); |
532 |
|
533 |
// }
|
534 |
// for (int i = 0; i < vea.getRowCount(); i++) {
|
535 |
// IRowEdited rowEd=vea.getRow(i);
|
536 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
537 |
if (ct!=null) |
538 |
geom.reProject(ct); |
539 |
// addSelectionCache((DefaultRowEdited)rowEd);
|
540 |
// selection.set(rowEd.getIndex(), true);
|
541 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
542 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
543 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
544 |
} |
545 |
setSelectionImage(selectionImage); |
546 |
setHandlersImage(handlersImage); |
547 |
} catch (ReadException e) {
|
548 |
NotificationManager.addError(e.getMessage(),e); |
549 |
} catch (GeometryOperationNotSupportedException e) {
|
550 |
NotificationManager.addError(e.getMessage(),e); |
551 |
} catch (GeometryOperationException e) {
|
552 |
NotificationManager.addError(e.getMessage(),e); |
553 |
} catch (DataException e) {
|
554 |
NotificationManager.addError(e.getMessage(),e); |
555 |
} |
556 |
} |
557 |
|
558 |
public void refreshSelectionCache(Point2D firstPoint,CADToolAdapter cta){ |
559 |
// VectorialEditableAdapter vea = getVEA();
|
560 |
// FBitSet selection=null;
|
561 |
try {
|
562 |
// selection = vea.getSelection();
|
563 |
// Cogemos las entidades seleccionadas
|
564 |
clearSelection(SAVEPREVIOUS); |
565 |
// } catch (ReadException e1) {
|
566 |
// NotificationManager.addError(e1.getMessage(),e1);
|
567 |
// }
|
568 |
double min = java.lang.Double.MAX_VALUE;
|
569 |
ViewPort vp=getLayer().getMapContext().getViewPort(); |
570 |
BufferedImage selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
571 |
Graphics2D gs = selectionImage.createGraphics();
|
572 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB); |
573 |
Graphics2D gh = handlersImage.createGraphics();
|
574 |
FeatureStore featureStore=getFeatureStore(); |
575 |
|
576 |
Iterator iterator=featureStore.getSelection().iterator();
|
577 |
|
578 |
DrawOperationContext doc=new DrawOperationContext();
|
579 |
doc.setGraphics(gs); |
580 |
doc.setViewPort(vp); |
581 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
582 |
while (iterator.hasNext()) {
|
583 |
Feature feature = (Feature) iterator.next(); |
584 |
|
585 |
// }
|
586 |
// for (int i = selection.nextSetBit(0); i >= 0; i = selection
|
587 |
// .nextSetBit(i + 1)) {
|
588 |
Handler[] handlers = null; |
589 |
|
590 |
// DefaultRowEdited dre = null;
|
591 |
// try {
|
592 |
// dre = (DefaultRowEdited)(vea.getRow(i));
|
593 |
// IFeature feat=(DefaultFeature)dre.getLinkedRow();
|
594 |
org.gvsig.fmap.geom.Geometry geom=(org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
595 |
handlers = geom.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER); |
596 |
// addSelectionCache(dre);
|
597 |
|
598 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
599 |
// draw(gs, vp, DefaultCADTool.selectionSymbol);
|
600 |
drawHandlers(geom.cloneGeometry(),gh,vp); |
601 |
// y miramos los handlers de cada entidad seleccionada
|
602 |
min = cta.getMapControl().getViewPort() |
603 |
.toMapDistance(SelectionCADTool.tolerance); |
604 |
for (int j = 0; j < handlers.length; j++) { |
605 |
Point2D handlerPoint = handlers[j].getPoint();
|
606 |
double distance = firstPoint.distance(handlerPoint);
|
607 |
if (distance <= min) {
|
608 |
min = distance; |
609 |
selectedHandler.add(handlers[j]); |
610 |
} |
611 |
} |
612 |
|
613 |
} |
614 |
|
615 |
setSelectionImage(selectionImage); |
616 |
setHandlersImage(handlersImage); |
617 |
} catch (ReadException e) {
|
618 |
NotificationManager.addError(e.getMessage(),e); |
619 |
} catch (GeometryOperationNotSupportedException e) {
|
620 |
NotificationManager.addError(e.getMessage(),e); |
621 |
} catch (GeometryOperationException e) {
|
622 |
NotificationManager.addError(e.getMessage(),e); |
623 |
} |
624 |
} |
625 |
|
626 |
public void drawHandlers(org.gvsig.fmap.geom.Geometry geom, Graphics2D gs, ViewPort vp) { |
627 |
// if (!(getLayer() instanceof FLyrAnnotation)){
|
628 |
Handler[] handlers = geom.getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER); |
629 |
FGraphicUtilities.DrawHandlers(gs, vp.getAffineTransform(), handlers,DefaultCADTool.handlerSymbol); |
630 |
// }
|
631 |
} |
632 |
public Image getSelectionImage(){ |
633 |
return imageSelection;
|
634 |
} |
635 |
public void setSelectionImage(Image image){ |
636 |
imageSelection=image; |
637 |
} |
638 |
public Image getHandlersImage() { |
639 |
return imageHandlers;
|
640 |
} |
641 |
public void setHandlersImage(Image image){ |
642 |
imageHandlers=image; |
643 |
} |
644 |
// public VectorialEditableAdapter getVEA(){
|
645 |
// if (((FLyrVect)getLayer()).getSource() instanceof VectorialEditableAdapter)
|
646 |
// return (VectorialEditableAdapter)((FLyrVect)getLayer()).getSource();
|
647 |
// return null;
|
648 |
// }
|
649 |
|
650 |
public void beforeLayerDraw(LayerDrawEvent e) throws CancelationException { |
651 |
FeatureStore featureStore=null;
|
652 |
try {
|
653 |
featureStore = getFeatureStore(); |
654 |
} catch (ReadException e2) {
|
655 |
// TODO Auto-generated catch block
|
656 |
e2.printStackTrace(); |
657 |
} |
658 |
if (featureStore.isEditing()) {
|
659 |
// VectorialEditableAdapter vea = (VectorialEditableAdapter) ((FLyrVect) getLayer())
|
660 |
// .getSource();
|
661 |
ViewPort vp = getLayer().getMapContext().getViewPort(); |
662 |
BufferedImage selectionImage = new BufferedImage( |
663 |
vp.getImageWidth(), vp.getImageHeight(), |
664 |
BufferedImage.TYPE_INT_ARGB);
|
665 |
BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(), |
666 |
vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
|
667 |
Graphics2D gs = selectionImage.createGraphics();
|
668 |
Graphics2D gh = handlersImage.createGraphics();
|
669 |
Iterator iterator=featureStore.getSelection().iterator();
|
670 |
while (iterator.hasNext()) {
|
671 |
Feature feature = (Feature) iterator.next(); |
672 |
|
673 |
// }
|
674 |
// for (int i = 0; i < selectedRow.size(); i++) {
|
675 |
// IFeature feat = (IFeature) ((IRowEdited) selectedRow.get(i))
|
676 |
// .getLinkedRow();
|
677 |
org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry)feature.getDefaultGeometry(); |
678 |
|
679 |
DrawOperationContext doc=new DrawOperationContext();
|
680 |
doc.setGraphics(gs); |
681 |
doc.setViewPort(vp); |
682 |
doc.setSymbol(DefaultCADTool.selectionSymbol); |
683 |
try {
|
684 |
geom.cloneGeometry().invokeOperation(Draw.CODE,doc); |
685 |
} catch (GeometryOperationNotSupportedException e1) {
|
686 |
e1.printStackTrace(); |
687 |
} catch (GeometryOperationException e1) {
|
688 |
e1.printStackTrace(); |
689 |
} |
690 |
drawHandlers(geom.cloneGeometry(), gh, vp); |
691 |
} |
692 |
// vea.setSelectionImage(selectionImage);
|
693 |
// vea.setHandlersImage(handlersImage);
|
694 |
} |
695 |
} |
696 |
|
697 |
public void afterLayerDraw(LayerDrawEvent e) throws CancelationException { |
698 |
} |
699 |
|
700 |
|
701 |
public void beforeGraphicLayerDraw(LayerDrawEvent e) throws CancelationException { |
702 |
} |
703 |
|
704 |
public void afterLayerGraphicDraw(LayerDrawEvent e) throws CancelationException { |
705 |
} |
706 |
private static boolean contains(org.gvsig.fmap.geom.Geometry g1,org.gvsig.fmap.geom.Geometry g2) { |
707 |
try{
|
708 |
Geometry geometry1=(Geometry)g1.invokeOperation(ToJTS.CODE,null);
|
709 |
Geometry geometry2=(Geometry)g2.invokeOperation(ToJTS.CODE,null);
|
710 |
if (geometry1==null || geometry2==null)return false; |
711 |
return geometry1.contains(geometry2);
|
712 |
} catch (GeometryOperationNotSupportedException e) {
|
713 |
e.printStackTrace(); |
714 |
} catch (GeometryOperationException e) {
|
715 |
e.printStackTrace(); |
716 |
} |
717 |
return false; |
718 |
} |
719 |
private static boolean intersects(org.gvsig.fmap.geom.Geometry g1,org.gvsig.fmap.geom.Geometry g2) { |
720 |
try{
|
721 |
Geometry geometry1=(Geometry)g1.invokeOperation(ToJTS.CODE,null);
|
722 |
Geometry geometry2=(Geometry)g2.invokeOperation(ToJTS.CODE,null);
|
723 |
if (geometry1==null || geometry2==null)return false; |
724 |
return geometry1.intersects(geometry2);
|
725 |
} catch (GeometryOperationNotSupportedException e) {
|
726 |
e.printStackTrace(); |
727 |
} catch (GeometryOperationException e) {
|
728 |
e.printStackTrace(); |
729 |
} |
730 |
return false; |
731 |
} |
732 |
|
733 |
public void activationGained(LayerEvent e) { |
734 |
if (ViewCommandStackExtension.csd!=null){ |
735 |
try {
|
736 |
ViewCommandStackExtension.csd.setModel(((FLyrVect)getLayer()).getFeatureStore().getCommandsRecord()); |
737 |
} catch (ReadException e1) {
|
738 |
// TODO Auto-generated catch block
|
739 |
e1.printStackTrace(); |
740 |
} |
741 |
} |
742 |
IWindow window=PluginServices.getMDIManager().getActiveWindow(); |
743 |
if (window instanceof View){ |
744 |
View view=(View)window; |
745 |
if (e.getSource().isEditing()){
|
746 |
view.showConsole(); |
747 |
} |
748 |
} |
749 |
if (cadtool!=null){ |
750 |
CADExtension.getCADToolAdapter().setCadTool(cadtool); |
751 |
PluginServices.getMainFrame().setSelectedTool(cadtool.toString()); |
752 |
StartEditing.startCommandsApplicable(null,(FLyrVect)getLayer());
|
753 |
CADExtension.initFocus(); |
754 |
} |
755 |
|
756 |
} |
757 |
|
758 |
public void activationLost(LayerEvent e) { |
759 |
try{
|
760 |
cadtool=CADExtension.getCADTool(); |
761 |
IWindow window=PluginServices.getMDIManager().getActiveWindow(); |
762 |
if (window instanceof View){ |
763 |
View view=(View)window; |
764 |
view.hideConsole(); |
765 |
} |
766 |
}catch (EmptyStackException e1) { |
767 |
cadtool=new SelectionCADTool();
|
768 |
cadtool.init(); |
769 |
} |
770 |
|
771 |
} |
772 |
|
773 |
public ArrayList getSnappers() { |
774 |
return snappers;
|
775 |
} |
776 |
|
777 |
public ArrayList getLayersToSnap() { |
778 |
return layersToSnap;
|
779 |
} |
780 |
|
781 |
public void setLayersToSnap(ArrayList layersToSnap) { |
782 |
this.layersToSnap = layersToSnap;
|
783 |
|
784 |
} |
785 |
|
786 |
// public void setSelectionCache(boolean savePrevious,ArrayList selectedRowAux) {
|
787 |
// try {
|
788 |
// clearSelection(savePrevious);
|
789 |
// VectorialEditableAdapter vea=getVEA();
|
790 |
// FBitSet selection=vea.getSelection();
|
791 |
// selectedRow.addAll(selectedRowAux);
|
792 |
// for (int i = 0;i < selectedRow.size(); i++) {
|
793 |
// IRowEdited edRow = (IRowEdited) selectedRow.get(i);
|
794 |
// selection.set(edRow.getIndex());
|
795 |
// }
|
796 |
// FLyrVect active = (FLyrVect)getLayer();
|
797 |
// active.getRecordset().getSelectionSupport().fireSelectionEvents();
|
798 |
// } catch (ReadException e) {
|
799 |
// NotificationManager.addError(e.getMessage(),e);
|
800 |
// }
|
801 |
// }
|
802 |
|
803 |
public void setLegend(ILegend legend) { |
804 |
this.legend=legend;
|
805 |
} |
806 |
public ILegend getLegend() {
|
807 |
return legend;
|
808 |
} |
809 |
|
810 |
// public void addSelectionCache(DefaultRowEdited edited) {
|
811 |
// selectedRow.add(edited);
|
812 |
// }
|
813 |
|
814 |
public boolean getPreviousSelection() { |
815 |
try {
|
816 |
return !((FLyrVect)getLayer()).getFeatureStore().getSelection().isEmpty();
|
817 |
} catch (ReadException e) {
|
818 |
// TODO Auto-generated catch block
|
819 |
e.printStackTrace(); |
820 |
} |
821 |
return false; |
822 |
} |
823 |
public FeatureStore getFeatureStore() throws ReadException{ |
824 |
return ((FLyrVect)getLayer()).getFeatureStore();
|
825 |
} |
826 |
|
827 |
public void update(Observable observable, Object notification) { |
828 |
try {
|
829 |
if (getFeatureStore().getSelection().isEmpty())
|
830 |
clearSelection(NOTSAVEPREVIOUS); |
831 |
} catch (ReadException e1) {
|
832 |
NotificationManager.addError(e1.getMessage(),e1); |
833 |
} |
834 |
|
835 |
} |
836 |
} |