[Gvsig_desarrolladores] Duda extendiendo de la herramienta
PointCADTOOL
Jose Manuel Díaz Bossini
jmdiaz en andago.com
Mar Ene 22 09:34:00 CET 2008
Buenos días a todos !
Continúo con problemas para desarrollar mi herramienta punto
personalizada , he creado una herramienta que extiende de la herramienta
PointCADTool y sobrecargado sus métodos addPoint y addGeometry de manera
que saque el formulario que quiero que saque , y después mi extension es
similar a la extension insertPointExtension pero suprimiendo todas las
referencias a PointCadTool por mi herramienta , el problema está en que
mi extension en principio funciona bien , precarga la herramienta etc ,
pero luego en los métodos de la herramienta no entra ni en addPoint ni
en addGeometry y en la capa en vez de marcar el punto en la capa me pide
dos puntos ( como si fuera una herramienta de selección ) .
Aquí os dejo el código de la herramienta a ver si me podéis indicar que
estoy haciendo mal, muchas gracias a todos :
package com.iver.cit.gvsig.tools;
import java.awt.Graphics;
import java.awt.event.InputEvent;
import java.awt.geom.Point2D;
import com.andago.opengeoservices.functionality.beans.CapaGvsig;
import com.andago.opengeoservices.functionality.beans.ConjuntoCapasGvsig;
import com.hardcode.gdbms.engine.data.driver.DriverException;
import com.iver.andami.PluginServices;
import com.iver.cit.gvsig.extensionAndago.PropiedadesPerfil;
import com.iver.cit.gvsig.fmap.MapControl;
import com.iver.cit.gvsig.fmap.core.FShape;
import com.iver.cit.gvsig.fmap.core.IGeometry;
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
import com.iver.cit.gvsig.fmap.layers.FLayer;
import com.iver.cit.gvsig.fmap.layers.FLayers;
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
import com.iver.cit.gvsig.gui.cad.DefaultCADTool;
import com.iver.cit.gvsig.gui.cad.exception.CommandException;
import com.iver.cit.gvsig.gui.cad.tools.PointCADTool;
import com.iver.cit.gvsig.gui.cad.tools.smc.PointCADToolContext;
import
com.iver.cit.gvsig.gui.cad.tools.smc.PointCADToolContext.PointCADToolState;
import com.iver.cit.gvsig.panels.DatosCapaPanel;
public class DatosPorPunto extends PointCADTool {
private MapControl mapControl = null;
private PropiedadesPerfil properties = null;
private PointCADToolContext _fsm;
private Point2D mapPoint = null;
/**
* Constructor del listener
* @param mapControl
*/
public DatosPorPunto(){
// this.mapControl=mapControl;
// this.properties = properties;
}
/**
* Método de incio, para poner el código de todo lo que se requiera
de una
* carga previa a la utilización de la herramienta.
*/
public void init() {
_fsm = new PointCADToolContext(this);
}
/**
* Equivale al transition del prototipo pero sin pasarle como pará
metro el
* editableFeatureSource que ya estará creado.
*
* @param sel Bitset con las geometrías que estén seleccionadas.
* @param x parámetro x del punto que se pase en esta transición.
* @param y parámetro y del punto que se pase en esta transición.
*/
public void addPoint(double x, double y,InputEvent event) {
PointCADToolState actualState = (PointCADToolState)
_fsm.getPreviousState();
String status = actualState.getName();
System.out.println("El status es
************************************* [ " + status + " ]
***********************************");
addGeometry(ShapeFactory.createPoint2D(mapPoint.getX(),
mapPoint.getY()));
}
public void addGeometry(IGeometry geometry) {
// TODO Auto-generated method stub
System.out.println("Entro en addGeometry
************************************************************************");
FLayers capas = mapControl.getMapContext().getLayers();
String [] fields = new String [] {};
FLyrVect capa=null;
if (capas!=null){
FLayer[] capasActivas = capas.getActives();
for (int i=0; i < capasActivas.length; i++){
if (capasActivas[i] instanceof FLyrVect) {
if (capasActivas[i].isEditing()){
capa = (FLyrVect) capasActivas[i];
try {
fields = capa.getRecordset().getFieldNames();
} catch (DriverException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (com.iver.cit.gvsig.fmap.DriverException
e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
ConjuntoCapasGvsig
conjuntoCapas=properties.getUserProperties().getCapasGvSig();
CapaGvsig defCapa=conjuntoCapas.getCapa(capa.getName());
if (defCapa!=null){
String layerName = defCapa.getIdCapa();
String tableName = defCapa.getIdCapa();
String geomField = defCapa.getIdGeom();
String fidField = defCapa.getIdField(); // BE CAREFUL => MAY
BE NOT!!!
DBLayerDefinition lyrDef = new DBLayerDefinition();
lyrDef.setName(layerName);
lyrDef.setTableName(tableName);
lyrDef.setFieldNames(fields);
lyrDef.setFieldGeometry(geomField);
lyrDef.setFieldID(fidField);
lyrDef.setFieldGeometry(geomField);
DatosCapaPanel panel = new
DatosCapaPanel(lyrDef,this.properties,mapPoint);
PluginServices.getMDIManager().addWindow(panel);
}
}
public void transition(double x, double y, InputEvent event) {
_fsm.addPoint(x, y, event);
}
public void transition(double d) {
_fsm.addValue(d);
}
public void transition(String s) throws CommandException {
if (!super.changeCommand(s)){
_fsm.addOption(s);
}
}
public void drawOperation(Graphics g, double x,
double y) {
}
public String getName() {
return PluginServices.getText(this,"PUNTO");
}
public String toString() {
return "_point";
}
public boolean isApplicable(int shapeType) {
switch (shapeType) {
case FShape.POLYGON:
case FShape.LINE:
case FShape.MULTIPOINT:
return false;
}
return true;
}
}
Más información sobre la lista de distribución gvSIG_desarrolladores