Revision 23424 branches/v2_0_0_prep/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/tools/ComplexSelectionCADTool.java

View differences:

ComplexSelectionCADTool.java
48 48
import java.awt.event.MouseEvent;
49 49
import java.awt.geom.Point2D;
50 50
import java.util.ArrayList;
51
import java.util.Iterator;
51 52

  
53
import org.gvsig.fmap.data.DataException;
54
import org.gvsig.fmap.data.InitializeException;
52 55
import org.gvsig.fmap.data.ReadException;
56
import org.gvsig.fmap.data.feature.Feature;
57
import org.gvsig.fmap.data.feature.FeatureStore;
58
import org.gvsig.fmap.data.feature.FeatureType;
59
import org.gvsig.fmap.data.feature.IsNotFeatureSettingException;
53 60
import org.gvsig.fmap.geom.Geometry;
61
import org.gvsig.fmap.geom.GeometryFactory;
62
import org.gvsig.fmap.geom.GeometryManager;
54 63
import org.gvsig.fmap.geom.handler.Handler;
64
import org.gvsig.fmap.geom.operation.Draw;
65
import org.gvsig.fmap.geom.operation.DrawOperationContext;
66
import org.gvsig.fmap.geom.operation.GeometryOperationException;
67
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
55 68
import org.gvsig.fmap.geom.primitive.GeneralPathX;
56 69
import org.gvsig.fmap.mapcontext.ViewPort;
57 70
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
......
120 133
	public void addPoint(double x, double y, InputEvent event) {
121 134
		if (event!=null && ((MouseEvent)event).getClickCount()==2){
122 135
			try {
123
				pointDoubleClick((MapControl)event.getComponent());
136
				pointDoubleClick(((MapControl)event.getComponent()).getMapContext());
124 137
			} catch (ReadException e) {
125 138
				NotificationManager.addError(e.getMessage(),e);
126 139
			}
......
132 145
		System.out.println("PREVIOUSSTATE =" + status); // + "ESTADO ACTUAL: " +
133 146
														// _fsm.getState());
134 147
		VectorialLayerEdited vle = getVLE();
135
		VectorialEditableAdapter vea=vle.getVEA();
148
		FeatureStore featureStore=null;
149
		try {
150
			featureStore = vle.getFeatureStore();
151
		} catch (ReadException e) {
152
			// TODO Auto-generated catch block
153
			e.printStackTrace();
154
		}
155
//		VectorialEditableAdapter vea=vle.getVEA();
136 156
		ArrayList selectedHandler = vle.getSelectedHandler();
137
		ArrayList selectedRow = vle.getSelectedRow();
157
//		ArrayList selectedRow = vle.getSelectedRow();
138 158
		System.out.println("STATUS ACTUAL = " + _fsm.getTransition());
139 159
		if (status.equals("Selection.FirstPoint")) {
140 160
			firstPoint=new Point2D.Double(x,y);
......
142 162
		} else if (status.equals("Selection.SecondPoint")) {
143 163
		} else if (status.equals("Selection.WithFeatures")) {
144 164
		} else if (status.equals("Selection.WithHandlers")) {
145
			vea.startComplexRow();
165
			featureStore.getCommandsRecord().startComplex();
146 166
			ArrayList selectedRowsAux=new ArrayList();
147
			for (int i = 0; i < selectedRow.size(); i++) {
148
				IRowEdited row = (IRowEdited) selectedRow.get(i);
149
				IFeature feat = (IFeature) row.getLinkedRow().cloneRow();
150
				IGeometry ig = feat.getGeometry();
167
			Iterator iterator=featureStore.getSelection().iterator();
168
			while (iterator.hasNext()) {
169
				Feature feature = (Feature) iterator.next();
170

  
171
//			}
172
//			for (int i = 0; i < selectedRow.size(); i++) {
173
//				IRowEdited row = (IRowEdited) selectedRow.get(i);
174
//				IFeature feat = (IFeature) row.getLinkedRow().cloneRow();
175
				Geometry ig = ((Geometry)feature.getDefaultGeometry()).cloneGeometry();
151 176
				// Movemos los handlers que hemos seleccionado
152 177
				// previamente dentro del m?todo select()
153
				Handler[] handlers=ig.getHandlers(IGeometry.SELECTHANDLER);
178
				Handler[] handlers=ig.getHandlers(Geometry.SELECTHANDLER);
154 179
				for (int k = 0; k < selectedHandler.size(); k++) {
155 180
					Handler h = (Handler)selectedHandler.get(k);
156 181
					for (int j=0;j<handlers.length;j++) {
......
158 183
							handlers[j].set(x,y);
159 184
					}
160 185
				}
161

  
162
				modifyFeature(row.getIndex(), feat);
163
				selectedRowsAux.add(new DefaultRowEdited(feat,IRowEdited.STATUS_MODIFIED,row.getIndex()));
186
				try {
187
					feature.editing();
188
					feature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometry(), ig);
189
					featureStore.update(feature);
190
				} catch (IsNotFeatureSettingException e) {
191
					// TODO Auto-generated catch block
192
					e.printStackTrace();
193
				} catch (DataException e) {
194
					// TODO Auto-generated catch block
195
					e.printStackTrace();
196
				}
197
//				modifyFeature(row.getIndex(), feat);
198
				selectedRowsAux.add(feature);
164 199
			}
165 200
			firstPoint=new Point2D.Double(x,y);
166
			vle.setSelectionCache(VectorialLayerEdited.SAVEPREVIOUS, selectedRowsAux);
201
//			vle.setSelectionCache(VectorialLayerEdited.SAVEPREVIOUS, selectedRowsAux);
167 202
				String description=PluginServices.getText(this,"move_handlers");
168
				vea.endComplexRow(description);
203
				featureStore.getCommandsRecord().endComplex(description);
169 204
		}else if (status.equals("Selection.NextPointPolygon")) {
170 205
			pointsPolygon.add(new Point2D.Double(x,y));
171 206
		}
......
185 220
		gpx.lineTo(lastPoint.getX(),lastPoint.getY());
186 221
		gpx.lineTo(firstPoint.getX(),lastPoint.getY());
187 222
		gpx.closePath();
188
		IGeometry rectangle=ShapeFactory.createPolygon2D(gpx);
223
		Geometry rectangle=geomFactory.createPolygon2D(gpx);
189 224
		return selectWithPolygon(rectangle);
190 225
	}
191 226
	/**
......
195 230
	 * @return numFeatures selected
196 231
	 */
197 232
	public int selectWithCircle(double x, double y, InputEvent event) {
198
		IGeometry circle=geomFactory.createCircle(firstPoint,new Point2D.Double(x,y));
233
		Geometry circle=geomFactory.createCircle(firstPoint,new Point2D.Double(x,y));
199 234
		return selectWithPolygon(circle);
200 235
	}
201 236
	public int selectWithPolygon(Geometry polygon) {
......
209 244
		} else if (getType().equals(PluginServices.getText(this,"out_circle")) || getType().equals(PluginServices.getText(this,"out_polygon")) || getType().equals(PluginServices.getText(this,"out_rectangle"))) {
210 245
			vle.selectOutPolygon(polygon);
211 246
		}
212
		ArrayList selectedRow = vle.getSelectedRow();
247
		int countSelection=0;
248
		try {
249
			countSelection = vle.getFeatureStore().getSelection().size();
250
		} catch (ReadException e) {
251
			// TODO Auto-generated catch block
252
			e.printStackTrace();
253
		}
254
//		ArrayList selectedRow = vle.getSelectedRow();
213 255
		PluginServices.getMDIManager().restoreCursor();
214
		if (selectedRow.size() > 0) {
256
		if (countSelection>0){
257
//		if (selectedRow.size() > 0) {
215 258
			nextState = "Selection.WithSelectedFeatures";
216 259
			end();
217 260
		} else
218 261
			nextState = "Selection.FirstPoint";
219
		return selectedRow.size();
262
		return countSelection;
220 263
	}
221 264

  
222 265
	/**
......
247 290
			elShape.lineTo(x, y);
248 291
			elShape.lineTo(firstPoint.getX(), y);
249 292
			elShape.lineTo(firstPoint.getX(), firstPoint.getY());
250
			geomFactory.createPolyline2D(elShape).draw((Graphics2D) g,
251
					vp,
252
					DefaultCADTool.geometrySelectSymbol);
293

  
294
			DrawOperationContext doc=new DrawOperationContext();
295
			doc.setGraphics((Graphics2D)g);
296
			doc.setViewPort(vp);
297
			doc.setSymbol(DefaultCADTool.geometrySelectSymbol);
298
        	try {
299
        		geomFactory.createPolyline2D(elShape).invokeOperation(Draw.CODE,doc);
300
			} catch (GeometryOperationNotSupportedException e) {
301
				e.printStackTrace();
302
			} catch (GeometryOperationException e) {
303
				e.printStackTrace();
304
			}
305
//			geomFactory.createPolyline2D(elShape).draw((Graphics2D) g,
306
//					vp,
307
//					DefaultCADTool.geometrySelectSymbol);
253 308
			Image img = vle.getSelectionImage();
254 309
	        g.drawImage(img, 0, 0, null);
255 310
	        return;
......
259 314
			gpx.append(circle.getInternalShape(),true);
260 315
			Geometry circleSel=geomFactory.createPolyline2D(gpx);
261 316
			// Dibuja el c?rculo de selecci?n
262
			circleSel.draw((Graphics2D) g,
263
					vp,
264
					DefaultCADTool.geometrySelectSymbol);
317
			DrawOperationContext doc=new DrawOperationContext();
318
			doc.setGraphics((Graphics2D)g);
319
			doc.setViewPort(vp);
320
			doc.setSymbol(DefaultCADTool.geometrySelectSymbol);
321
        	try {
322
        		circleSel.invokeOperation(Draw.CODE,doc);
323
			} catch (GeometryOperationNotSupportedException e) {
324
				e.printStackTrace();
325
			} catch (GeometryOperationException e) {
326
				e.printStackTrace();
327
			}
328
//			circleSel.draw((Graphics2D) g,
329
//					vp,
330
//					DefaultCADTool.geometrySelectSymbol);
265 331
			Image img = vle.getSelectionImage();
266 332
	        g.drawImage(img, 0, 0, null);
267 333
	        return;
268 334
		}else if (status.equals("Selection.NextPointPolygon")) {
269 335
			// Dibuja el pol?gono de selecci?n
270 336
			Geometry polygon=getGeometryPolygon(new Point2D.Double(x,y));
271
			polygon.draw((Graphics2D) g,
272
					vp,
273
					DefaultCADTool.geometrySelectSymbol);
337
			DrawOperationContext doc=new DrawOperationContext();
338
			doc.setGraphics((Graphics2D)g);
339
			doc.setViewPort(vp);
340
			doc.setSymbol(DefaultCADTool.geometrySelectSymbol);
341
        	try {
342
        		polygon.invokeOperation(Draw.CODE,doc);
343
			} catch (GeometryOperationNotSupportedException e) {
344
				e.printStackTrace();
345
			} catch (GeometryOperationException e) {
346
				e.printStackTrace();
347
			}
348
//			polygon.draw((Graphics2D) g,
349
//					vp,
350
//					DefaultCADTool.geometrySelectSymbol);
274 351
			Image img = vle.getSelectionImage();
275 352
	        g.drawImage(img, 0, 0, null);
276 353
	        return;
......
288 365
			// Y una vez movidos los v?rtices (handles)
289 366
			// redibujamos la nueva geometr?a.
290 367
			for (int i = 0; i < rowselectedHandlers.size(); i++) {
291
				IRowEdited rowEd = (IRowEdited) rowselectedHandlers.get(i);
292
				IGeometry geom = ((IFeature) rowEd.getLinkedRow())
293
						.getGeometry().cloneGeometry();
368
				Feature rowEd = (Feature) rowselectedHandlers.get(i);
369
				Geometry geom = ((Geometry)rowEd.getDefaultGeometry()).cloneGeometry();
294 370
				g.setColor(Color.gray);
295
				geom.draw((Graphics2D) g, vp, DefaultCADTool.axisReferencesSymbol);
371
				DrawOperationContext doc=new DrawOperationContext();
372
				doc.setGraphics((Graphics2D)g);
373
				doc.setViewPort(vp);
374
				doc.setSymbol(DefaultCADTool.axisReferencesSymbol);
375
	        	try {
376
	        		geom.invokeOperation(Draw.CODE,doc);
377
				} catch (GeometryOperationNotSupportedException e) {
378
					e.printStackTrace();
379
				} catch (GeometryOperationException e) {
380
					e.printStackTrace();
381
				}
382
//				geom.draw((Graphics2D) g, vp, DefaultCADTool.axisReferencesSymbol);
296 383
			}
297 384
			for (int k = 0; k < selectedHandler.size(); k++) {
298 385
				Handler h = (Handler)selectedHandler.get(k);
......
361 448
		VectorialLayerEdited vle = getVLE();
362 449
		PluginServices.getMDIManager().setWaitCursor();
363 450
		vle.selectAll();
364
		ArrayList selectedRow = vle.getSelectedRow();
451
		int countSelection=0;
452
		try {
453
			countSelection = vle.getFeatureStore().getSelection().size();
454
		} catch (ReadException e) {
455
			// TODO Auto-generated catch block
456
			e.printStackTrace();
457
		}
458
//		ArrayList selectedRow = vle.getSelectedRow();
365 459
		PluginServices.getMDIManager().restoreCursor();
366
		if (selectedRow.size() > 0) {
460
		if (countSelection > 0) {
367 461
			nextState = "Selection.WithSelectedFeatures";
368 462
		} else
369 463
			nextState = "Selection.FirstPoint";
370 464
		end();
371
		return selectedRow.size();
465
		return countSelection;
372 466
	}
373 467

  
374 468
	private Geometry getGeometryPolygon(Point2D p) {
......
424 518
			vle.selectWithPoint(x,y,multipleSelection);
425 519
			PluginServices.getMDIManager().restoreCursor();
426 520
		}
427
		ArrayList selectedRow = vle.getSelectedRow();
428
		if (selectedRow.size() > 0) {
521
		int countSelection=0;
522
		try {
523
			countSelection = vle.getFeatureStore().getSelection().size();
524
		} catch (ReadException e) {
525
			// TODO Auto-generated catch block
526
			e.printStackTrace();
527
		}
528
		if (countSelection > 0) {
429 529
			nextState = "Selection.WithSelectedFeatures";
430 530
			return true;
431 531
		} else {
......
441 541

  
442 542
		VectorialLayerEdited vle = getVLE();
443 543
		ArrayList selectedHandler = vle.getSelectedHandler();
444
		ArrayList selectedRow = vle.getSelectedRow();
445
		System.out.println("DENTRO DE selectHandlers. selectedRow.size= "
446
				+ selectedRow.size());
544
//		ArrayList selectedRow = vle.getSelectedRow();
545
//		System.out.println("DENTRO DE selectHandlers. selectedRow.size= "
546
//				+ selectedRow.size());
447 547
		selectedHandler.clear();
448 548

  
449 549
		// Se comprueba si se pincha en una gemometr?a
......
454 554

  
455 555
		Handler[] handlers = null;
456 556
		rowselectedHandlers.clear();
457
		for (int i = 0; i < selectedRow.size(); i++) {
458
			IRowEdited rowEd = (IRowEdited) selectedRow.get(i);
557
		FeatureStore featureStore=null;
558
		try {
559
			featureStore = vle.getFeatureStore();
560
		} catch (ReadException e) {
561
			// TODO Auto-generated catch block
562
			e.printStackTrace();
563
		}
564
		Iterator iterator=featureStore.getSelection().iterator();
565
		while (iterator.hasNext()) {
566
			Feature feature = (Feature) iterator.next();
459 567

  
460
			IFeature fea = (IFeature) rowEd.getLinkedRow();
461
			handlers = fea.getGeometry().getHandlers(IGeometry.SELECTHANDLER);
568
//		}
569
//		for (int i = 0; i < selectedRow.size(); i++) {
570
//			IRowEdited rowEd = (IRowEdited) selectedRow.get(i);
571
//
572
//			IFeature fea = (IFeature) rowEd.getLinkedRow();
573
			Geometry geom=((Geometry)feature.getDefaultGeometry()).cloneGeometry();
574
			handlers = geom.getHandlers(Geometry.SELECTHANDLER);
462 575
			// y miramos los handlers de cada entidad seleccionada
463 576
			double min = tam;
464 577
			// int hSel = -1;
......
470 583
					min = distance;
471 584
					// hSel = j;
472 585
					selectedHandler.add(handlers[j]);
473
					rowselectedHandlers.add(rowEd);
586
					Feature f;
587
					try {
588
						f = featureStore.createDefaultFeature(false);
589

  
590
					f.editing();
591
					FeatureType featureType=featureStore.getDefaultFeatureType();
592
					for (int i = 0; i < featureType.size(); i++) {
593
						f.set(i,feature.get(i));
594
					}
595
					f.setGeometry(featureType.getDefaultGeometry(), geom);
596
					} catch (InitializeException e) {
597
						// TODO Auto-generated catch block
598
						e.printStackTrace();
599
					} catch (DataException e) {
600
						// TODO Auto-generated catch block
601
						e.printStackTrace();
602
					}
603
					rowselectedHandlers.add(feature);
474 604
				}
475 605
			}
476 606
		}

Also available in: Unified diff