[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