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

View differences:

EditVertexCADTool.java
48 48
import java.awt.geom.Point2D;
49 49
import java.awt.geom.Rectangle2D;
50 50
import java.util.ArrayList;
51
import java.util.Iterator;
51 52

  
52 53
import javax.swing.JOptionPane;
53 54

  
55
import org.gvsig.fmap.data.DataException;
54 56
import org.gvsig.fmap.data.ReadException;
55 57
import org.gvsig.fmap.data.feature.Feature;
56 58
import org.gvsig.fmap.data.feature.FeatureCollection;
......
60 62
import org.gvsig.fmap.geom.GeometryManager;
61 63
import org.gvsig.fmap.geom.aggregate.BaseMultiPrimitive;
62 64
import org.gvsig.fmap.geom.handler.Handler;
65
import org.gvsig.fmap.geom.operation.DrawInts;
66
import org.gvsig.fmap.geom.operation.DrawOperationContext;
67
import org.gvsig.fmap.geom.operation.GeometryOperationException;
68
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
63 69
import org.gvsig.fmap.geom.primitive.Curve2D;
64 70
import org.gvsig.fmap.geom.primitive.GeneralPathX;
65 71
import org.gvsig.fmap.geom.primitive.Surface2D;
......
198 204
    	EditVertexCADToolState actualState = (EditVertexCADToolState) _fsm.getPreviousState();
199 205
        String status = actualState.getName();
200 206
        VectorialLayerEdited vle=getVLE();
201
        FeatureStore featureStore=vle.getFeatureStore();
207
        FeatureStore featureStore=null;
208
		try {
209
			featureStore = vle.getFeatureStore();
210
		} catch (ReadException e1) {
211
			// TODO Auto-generated catch block
212
			e1.printStackTrace();
213
		}
202 214
        FeatureCollection selection=(FeatureCollection)featureStore.getSelection();
203 215
        Feature feature=null;
204 216
        Geometry ig=null;
205 217
        Handler[] handlers=null;
206 218
        if (selection.size()==1){
207
				feature =  selection.getFeature(0);
219
				feature =  (Feature)selection.iterator().next();
208 220
			ig=((Geometry)feature.getDefaultGeometry()).cloneGeometry();
209 221
        	handlers=ig.getHandlers(Geometry.SELECTHANDLER);
210 222
        	numHandlers=handlers.length;
......
214 226
//					vea.removeRow(row.getIndex(),getName(),EditionEvent.GRAPHIC);
215 227
				} catch (ReadException e) {
216 228
					NotificationManager.addError(e.getMessage(),e);
229
				} catch (DataException e) {
230
					NotificationManager.addError(e.getMessage(),e);
217 231
				}
218 232
        	}
219 233
        }else{
......
244 258
        				newGeometry=removeVertex(ig,handlers,numSelect);
245 259
        			}
246 260
        			//numSelect=0;
261
        			try {
247 262
        			feature.editing();
248 263
        			feature.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometry(),ig);
249 264
//        			IRow newRow=new DefaultFeature(newGeometry,row.getAttributes(),row.getID());
250
        			try {
265

  
251 266
						featureStore.update(feature);
252 267
//        				vea.modifyRow(row.getIndex(),newRow,getName(),EditionEvent.GRAPHIC);
253 268
						clearSelection();
......
256 271
					}
257 272
//					vle.addSelectionCache(new DefaultRowEdited(newRow,
258 273
//							IRowEdited.STATUS_MODIFIED, row.getIndex()));
274
 catch (DataException e) {
275
						// TODO Auto-generated catch block
276
						e.printStackTrace();
277
					}
259 278

  
260 279
//					vle.refreshSelectionCache(new Point2D.Double(0,0),getCadToolAdapter());
261 280
//					refresh();
......
267 286
        }
268 287
    }
269 288
    private void drawVertex(Graphics g,ViewPort vp){
270
		ArrayList selectedRows=getSelectedRows();
271
    	for (int i = 0; i<selectedRows.size();
272
		 		i++) {
273
    		DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRows
274
					.get(i)).getLinkedRow();
275
			Geometry ig = fea.getGeometry().cloneGeometry();
289
    	VectorialLayerEdited vle=getVLE();
290
    	Iterator iterator=null;
291
		try {
292
			iterator = vle.getFeatureStore().getSelection().iterator();
293
		} catch (ReadException e1) {
294
			// TODO Auto-generated catch block
295
			e1.printStackTrace();
296
		}
297
		while (iterator.hasNext()) {
298
			Feature feature = (Feature) iterator.next();
299

  
300
//		}
301
//    	ArrayList selectedRows=getSelectedRows();
302
//    	for (int i = 0; i<selectedRows.size();
303
//		 		i++) {
304
//    		DefaultFeature fea = (DefaultFeature) ((DefaultRowEdited) selectedRows
305
//					.get(i)).getLinkedRow();
306
			Geometry ig = ((Geometry)feature.getDefaultGeometry()).cloneGeometry();
276 307
			if (ig == null) continue;
277
			ig.drawInts((Graphics2D)g,vp,DefaultCADTool.geometrySelectSymbol);
308
			DrawOperationContext doc=new DrawOperationContext();
309
			doc.setGraphics((Graphics2D)g);
310
			doc.setViewPort(vp);
311
			doc.setSymbol(DefaultCADTool.geometrySelectSymbol);
312
        	try {
313
				ig.invokeOperation(DrawInts.CODE,doc);
314
			} catch (GeometryOperationNotSupportedException e) {
315
				e.printStackTrace();
316
			} catch (GeometryOperationException e) {
317
				e.printStackTrace();
318
			}
319
//			ig.drawInts((Graphics2D)g,vp,DefaultCADTool.geometrySelectSymbol);
278 320
			Handler[] handlers=ig.getHandlers(Geometry.SELECTHANDLER);
279 321
			if (numSelect>=handlers.length)
280 322
				numSelect=0;
......
380 422
        return ig;
381 423
    }
382 424

  
383
    private Geometry removeVertexGC(GeometryCollection gc,Handler handler) {
425
    private Geometry removeVertexGC(BaseMultiPrimitive gc,Handler handler) {
384 426
        Geometry[] geoms=gc.getGeometries();
385 427
    	ArrayList geomsAux=new ArrayList();
386 428
        int pos=-1;
......
423 465
        	newGeoms.add(geoms[i]);
424 466
        }
425 467

  
426
    	return new GeometryCollection((Geometry[])newGeoms.toArray(new Geometry[0]));
468
    	return new BaseMultiPrimitive((Geometry[])newGeoms.toArray(new Geometry[0]));
427 469
    }
428 470

  
429 471

  
......
608 650
    	return geometryCloned;
609 651
*/
610 652
    }
611
    private Geometry addVertexGC(GeometryCollection gc,Point2D p,Rectangle2D rect) {
653
    private Geometry addVertexGC(BaseMultiPrimitive gc,Point2D p,Rectangle2D rect) {
612 654
    	Geometry[] geoms=gc.getGeometries();
613 655
    	int pos=-1;
614 656
    	for (int i=0;i<geoms.length;i++) {
......
636 678
    	for (int i=pos+1;i<geoms.length;i++) {
637 679
    		newGeoms.add(geoms[i]);
638 680
    	}
639
    	return new GeometryCollection((Geometry[])newGeoms.toArray(new Geometry[0]));
681
    	return new BaseMultiPrimitive((Geometry[])newGeoms.toArray(new Geometry[0]));
640 682
    	}else {
641 683
    		return null;
642 684
    	}
......
647 689
	private void selectHandler(double x, double y) {
648 690
		Point2D firstPoint = new Point2D.Double(x, y);
649 691
		VectorialLayerEdited vle = getVLE();
650
		VectorialEditableAdapter vea=vle.getVEA();
651
		ArrayList selectedRows = vle.getSelectedRow();
692
		FeatureStore featureStore=null;
693
		try {
694
			featureStore = vle.getFeatureStore();
695
		} catch (ReadException e1) {
696
			// TODO Auto-generated catch block
697
			e1.printStackTrace();
698
		}
699
		Iterator iterator=featureStore.getSelection().iterator();
700
//		ArrayList selectedRows = vle.getSelectedRow();
701

  
652 702
		double tam = getCadToolAdapter().getMapControl().getViewPort()
653 703
				.toMapDistance(SelectionCADTool.tolerance);
654 704
		Rectangle2D rect = new Rectangle2D.Double(firstPoint.getX() - tam,
655 705
				firstPoint.getY() - tam, tam * 2, tam * 2);
656
		if (selectedRows.size() > 0) {
706
		while (iterator.hasNext()) {
707
			Feature feature = (Feature) iterator.next();
708

  
709
//		}
710
//		if (selectedRows.size() > 0) {
657 711
			boolean isSelectedHandler = false;
658 712
			Geometry geometry = getSelectedGeometry();
659 713
			if (geometry != null) {
......
683 737
							}
684 738
						//}
685 739
						if (isSelectedGeometry && addVertex) {
686
							selectedRows = getSelectedRows();
687
							DefaultFeature fea = null;
688
							DefaultRowEdited row = null;
689
							row = (DefaultRowEdited) selectedRows.get(0);
690
							fea = (DefaultFeature) row.getLinkedRow();
740
							Feature feat = (Feature)featureStore.getSelection().iterator().next();
741
//							DefaultFeature fea = null;
742
//							DefaultRowEdited row = null;
743
//							row = (DefaultRowEdited) selectedRows.get(0);
744
//							fea = (DefaultFeature) row.getLinkedRow();
691 745
							Point2D posVertex = new Point2D.Double(x, y);
692
							Geometry geom1=fea.getGeometry().cloneGeometry();
746
							Geometry geom1=((Geometry)feat.getDefaultGeometry()).cloneGeometry();
693 747
							Geometry geom=null;
694
							if (geom1 instanceof GeometryCollection) {
695
								geom = addVertexGC((GeometryCollection)geom1, posVertex, rect);
748
							if (geom1 instanceof BaseMultiPrimitive) {
749
								geom = addVertexGC((BaseMultiPrimitive)geom1, posVertex, rect);
696 750
							}else {
697 751
								geom = addVertex(geom1, posVertex, rect);
698 752
							}
699 753
							if (geom!=null) {
700
							DefaultFeature df = new DefaultFeature(geom, fea
701
									.getAttributes(),row.getID());
702
							vea.modifyRow(row.getIndex(), df,
703
									PluginServices.getText(this,"add_vertex"),EditionEvent.GRAPHIC);
754
//							DefaultFeature df = new DefaultFeature(geom, fea
755
//									.getAttributes(),row.getID());
756
							feat.editing();
757
							feat.setGeometry(featureStore.getDefaultFeatureType().getDefaultGeometry(), geom);
758
							featureStore.update(feat);
759
//							vea.modifyRow(row.getIndex(), df,
760
//									PluginServices.getText(this,"add_vertex"),EditionEvent.GRAPHIC);
704 761

  
705 762
							Handler[] newHandlers = geom
706 763
									.getHandlers(Geometry.SELECTHANDLER);
......
713 770
							}
714 771

  
715 772
							clearSelection();
716
							vle.addSelectionCache(new DefaultRowEdited(df,
717
									IRowEdited.STATUS_MODIFIED, row.getIndex()));
773
//							vle.addSelectionCache(new DefaultRowEdited(df,
774
//									IRowEdited.STATUS_MODIFIED, row.getIndex()));
718 775
							}
719 776
						}
720
					} catch (ValidateRowException e) {
721
						NotificationManager.addError(e.getMessage(),e);
722 777
					} catch (ReadException e) {
723 778
						NotificationManager.addError(e.getMessage(),e);
779
					} catch (DataException e) {
780
						// TODO Auto-generated catch block
781
						e.printStackTrace();
724 782
					}
725 783
				}
726 784
			}

Also available in: Unified diff