Revision 23424 branches/v2_0_0_prep/extensions/extCAD/src/com/iver/cit/gvsig/gui/cad/tools/EditVertexCADTool.java
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