RE: [Gvsig_desarrolladores] ¿Cómo añadir una nueva geometría en una layer en edición por código?

Jorge Bellido Diez jbellido en ikt.es
Vie Feb 22 10:10:30 CET 2008


Hola Fran, he modificado la línea ...

	vea.addRow(df, vle.getLayer().getName(), EditionEvent.CHANGE_TYPE_ADD );

.. por esta otra ..

	vea.addRow(df, vle.getLayer().getName(), EditionEvent.GRAPHIC );

... y ya no me sale error alguno pero no consigo hacer lo que me proponía.

te pongo en antecedentes,.. quería crear una herramienta que, al pinchar en un punto, localice los datos de una capa de poligonos que tengo por debajo, me muestre un formulario con los datos de ese capa y, si pulso aceptar, me añada un nuevo registro a la capa actual de edición con datos de esa capa de polígonos y su geometría.

He conseguido llegar a obtener los datos y la geometría de la capa pero no se como añadirselo a la capa actual de Edición.
He estado mirando cómo funcionan las herramientas de CAD y he querido imitar el método adGeometry de la clase DefaultCADTool pero sin resultado. La funcion que me he preparado es esta.


public void addGeometry(IGeometry geometry) {
		VectorialLayerEdited vle = (VectorialLayerEdited)CADExtension.getEditionManager().getActiveLayerEdited();
		VectorialEditableAdapter vea = vle.getVEA();
		
		int numAttr;
		
		try {
			numAttr = vea.getRecordset().getFieldCount();
			Value[] values = new Value[numAttr];
			for (int i = 0; i < numAttr; i++) {
				values[i] = ValueFactory.createNullValue();
			}			
			
			String newFID = vea.getNewFID();
			DefaultFeature df = new DefaultFeature(geometry, values, newFID);
			
			
			try {
				int index =vea.addRow(df, vle.getLayer().getName(), EditionEvent.GRAPHIC );
				vea.getRecordset().clearSelection();
				System.out.println("la geometría es ... " + geometry.getGeometryType());
				
				
				ArrayList selectedRow = vle.getSelectedRow();


				ViewPort vp = vle.getLayer().getMapContext().getViewPort();
				BufferedImage selectionImage = new BufferedImage(vp
						.getImageWidth(), vp.getImageHeight(),
						BufferedImage.TYPE_INT_ARGB);
				Graphics2D gs = selectionImage.createGraphics();
				int inversedIndex=vea.getInversedIndex(index);
				selectedRow.add(new DefaultRowEdited(df,
						IRowEdited.STATUS_ADDED, inversedIndex ));
				
				vea.getSelection().set(inversedIndex);
				
				IGeometry geom = df.getGeometry();
				geom.cloneGeometry().draw(gs, vp, DefaultCADTool.selectionSymbol);
				vle.drawHandlers(geom.cloneGeometry(), gs, vp);
				vea.setSelectionImage(selectionImage);
				
				

			} catch (DriverIOException e) {
				// TODO Auto-generated catch block
				NotificationManager.addError(e.getMessage(),e);
				return;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				NotificationManager.addError(e.getMessage(),e);
				return;
			}
			
			
			
			
			
		} catch (DriverLoadException e) {
			// TODO Auto-generated catch block
			NotificationManager.addError(e.getMessage(),e);
			return;
		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
			// TODO Auto-generated catch block
			NotificationManager.addError(e.getMessage(),e);
			return;
		}
		
	}









-----Mensaje original-----
De: gvsig_desarrolladores-bounces en runas.cap.gva.es [mailto:gvsig_desarrolladores-bounces en runas.cap.gva.es] En nombre de Francisco José Peñarrubia
Enviado el: jueves, 21 de febrero de 2008 22:57
Para: Lista de Desarrolladores de gvSIG
Asunto: Re: [Gvsig_desarrolladores] ¿Cómo añadir una nueva geometría en una layer en edición por código?

Hola Jorge.

¿Qué fallo te da exactamente?. ¿Puedes mostrar la traza de error?.

Saludos.

Fran.

Jorge Bellido Diez escribió:
> Hola buenas tardes, estaba intentando añadir una nueva geometría en 
> una layer que tengo en edición.. todo esto por código.. tengo lo 
> siguiente pero me falla en el método addRow. Si alguien se le ocurre 
> algo... Gracias. jorge
>  
>  	public void addGeometry(IGeometry geometry) {
> 		VectorialLayerEdited vle = (VectorialLayerEdited)CADExtension.getEditionManager().getActiveLayerEdited();
> 		VectorialEditableAdapter vea = vle.getVEA();
> 		int numAttr;
> 		try {
> 			numAttr = vea.getRecordset().getFieldCount();
> 			Value[] values = new Value[numAttr];
> 			for (int i = 0; i < numAttr; i++) {
> 				values[i] = ValueFactory.createNullValue();
> 			}			
> 			
> 			String newFID = vea.getNewFID();
> 			DefaultFeature df = new DefaultFeature(geometry, values, newFID);
> 			
> 			
> 			try {
> // me falla aquí----->>>
> 				vea.addRow(df, vle.getLayer().getName(), 
> EditionEvent.CHANGE_TYPE_ADD );
>
> 				vea.getRecordset().clearSelection();
> 			} catch (DriverIOException e) {
> 				// TODO Auto-generated catch block
> 				NotificationManager.addError(e.getMessage(),e);
> 				return;
> 			} catch (IOException e) {
> 				// TODO Auto-generated catch block
> 				NotificationManager.addError(e.getMessage(),e);
> 				return;
> 			}
> 			
> 		} catch (DriverLoadException e) {
> 			// TODO Auto-generated catch block
> 			NotificationManager.addError(e.getMessage(),e);
> 			return;
> 		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
> 			// TODO Auto-generated catch block
> 			NotificationManager.addError(e.getMessage(),e);
> 			return;
> 		}
> 	}
>  
>  
>  
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>
>   

_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores en runas.cap.gva.es
http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores



Más información sobre la lista de distribución gvSIG_desarrolladores