Consulta desarrollo

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Consulta desarrollo

Alex Mtz. de Agirre Escobar
Buenos días!

Estoy teniendo algunos problemas a la hora de implementar una herramienta propia sobre Kosmo.

El primer paso que debe realizar dicha herramienta es seleccionar los elementos de la capa activa que se encuentren en la ventana de visualización de Kosmo. Para ello, debo de llamar al evento que realiza el botón de selección, y posteriormente seleccionar los elementos que se encuentren dentro de las coordenadas de la ventana de visualización. De momento, me conformaría con lograr dicho propósito. El error que tengo en mi código es que el constructor CalculateSelectionPlugIn no está definido.

Si fuese posible, les agradecería que me ayudaran a solucionar dicho contratiempo.

Gracias de antemano,
Alex.


Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun posta elektronikoko zerbitzua. Erregistratu orain.
_______________________________________________
Kosmo mailing list
[hidden email]
http://lists.saig.es/mailman/listinfo/kosmo
Reply | Threaded
Open this post in threaded view
|

Re: Consulta desarrollo

Sergio Baños Calvo
Buenos días Alex.

Le comento una serie de puntos sobre la funcionalidad que quiere
implementar:

1) En primer lugar, supondré que su herramienta será un PlugIn (es
decir, que la clase implementa la interfaz PlugIn o extiende a alguna de
sus subclases, como AbstractPlugIn o ThreadedPlugIn).

2) En el método execute de dicha herramienta debe incluir el código que
debe ejecutarse al pulsar el botón de la misma en la interfaz de usuario
(o, si la tarea que desea realizar es de "larga duración", deberá
comprobarse en dicho método execute que se cumplen todas las
precondiciones para la ejecución de la misma en el método run(),
recuperando a su vez los datos que necesite).

En este caso, lo primero que necesitará es recuperar el encuadre de la
vista activa (no olvide incluir en el método getCheck() /
createEnableCheck la comprobación de que debe existir una vista activa):

Envelope encuadreActual =
context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();

3) Una vez obtenida dicha referencia, sería necesario recuperar de qué
capa/s se van a seleccionar los elementos. Dependiendo de la
funcionalidad que desea implementar, puede obtener la referencia
directamente (si sabe de antemano de qué capa debe recuperarla), o, si
es una herramienta válida para cualquier capa, puede obtener la
referencia a la capa mediante la selección de la misma en el árbol de capas:

a) Referencia directa por nombre (sería recomendable incluir un chequeo
de que la capa de nombre nombreDeMiCapa existe realmente):

Layer selectedLayer = JUMPWorkbench.getLayer(nombreDeMiCapa);

b) Recuperarla a partir de la selección del árbol (sería recomendable
incluir un chequeo que compruebe que existe una capa vectorial y que
está seleccionada en el árbol)

Layer selectedLayer = context.getSelectedLayer(0);

4) Recuperamos los elementos que cruzan con el encuadre actual:

List<Layer> layersToFilter = new ArrayList<Layer>();
layersToFilter.add(selectedLayer);
Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
Map layerToFeaturesInFenceMap =
context.getLayerViewPanel().layersToFeaturesInFenceMap(
                layersToFilter, fence);

5) Para seleccionar los elementos puedes consultar el método
refreshSelection(layerToFeaturesInFenceMap, context.getLayerViewPanel())
del plugin CalculateSelectionPlugIn.

Saludos,


Alex Mtz. de Agirre Escobar escribió:

> Buenos días!
>
> Estoy teniendo algunos problemas a la hora de implementar una
> herramienta propia sobre Kosmo.
>
> El primer paso que debe realizar dicha herramienta es seleccionar los
> elementos de la capa activa que se encuentren en la ventana de
> visualización de Kosmo. Para ello, debo de llamar al evento que
> realiza el botón de selección, y posteriormente seleccionar los
> elementos que se encuentren dentro de las coordenadas de la ventana de
> visualización. De momento, me conformaría con lograr dicho
> propósito. El error que tengo en mi código es que el constructor
> /CalculateSelectionPlugIn/ no está definido.
>
> Si fuese posible, les agradecería que me ayudaran a solucionar dicho
> contratiempo.
>
> Gracias de antemano,
> Alex.
>
> ------------------------------------------------------------------------
> Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> posta elektronikoko zerbitzua. Erregistratu orain.
> <https://signup.live.com/signup.aspx?id=60969>
--

Sergio Baños Calvo

Jefe de desarrollos
Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
Tlfno. móvil: 685005960
Tlfno. fijo: (+34) 954788876

E-mail: [hidden email]


_______________________________________________
Kosmo mailing list
[hidden email]
http://lists.saig.es/mailman/listinfo/kosmo
Reply | Threaded
Open this post in threaded view
|

Re: Consulta desarrollo

Alex Mtz. de Agirre Escobar
Muchas gracias por la respuesta.
He seguido las instrucciones, y he llegado al código que se muestra a continuación:


public boolean execute(PlugInContext context) throws Exception {
//******************
//MENSAJE DE DIALOGO
//******************
DialogFactory.showInformationDialog(context.getWorkbenchFrame(), "Proyecto de exportación a dxf...",
"Diálogo de información");
//*************************************************************
//SELEECIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
//*************************************************************
//recuperamos el encuadre de la vista activa
Envelope encuadreActual = context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
//recuperamos la capa a partir de la selección del árbol
Layer selectedLayer = context.getSelectedLayer(0);  -->  ERROR: "Type mismatch: cannot convert from Layerable to Layer"

//recuperamos los elementos que cruzan con el encuadre actual
List<Layer> layersToFilter = new ArrayList<Layer>();
layersToFilter.add(selectedLayer);
Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
Map layerToFeaturesInFenceMap =
context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter, fence); --> ERROR: "The method layersToFeaturesInFenceMap(List<Layerable>, Geometry) in the type LayerViewPanel is not applicable 
for the arguments (List<Layer>, Geometry)"


Espero que me puedan ayudar con estos 2 errores.
Gracias de nuevo, y un saludo,
Alex. 




> Date: Mon, 7 Jun 2010 11:16:42 +0200
> From: [hidden email]
> To: [hidden email]
> Subject: [Kosmo] Re: Consulta desarrollo
>
> Buenos días Alex.
>
> Le comento una serie de puntos sobre la funcionalidad que quiere
> implementar:
>
> 1) En primer lugar, supondré que su herramienta será un PlugIn (es
> decir, que la clase implementa la interfaz PlugIn o extiende a alguna de
> sus subclases, como AbstractPlugIn o ThreadedPlugIn).
>
> 2) En el método execute de dicha herramienta debe incluir el código que
> debe ejecutarse al pulsar el botón de la misma en la interfaz de usuario
> (o, si la tarea que desea realizar es de "larga duración", deberá
> comprobarse en dicho método execute que se cumplen todas las
> precondiciones para la ejecución de la misma en el método run(),
> recuperando a su vez los datos que necesite).
>
> En este caso, lo primero que necesitará es recuperar el encuadre de la
> vista activa (no olvide incluir en el método getCheck() /
> createEnableCheck la comprobación de que debe existir una vista activa):
>
> Envelope encuadreActual =
> context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
>
> 3) Una vez obtenida dicha referencia, sería necesario recuperar de qué
> capa/s se van a seleccionar los elementos. Dependiendo de la
> funcionalidad que desea implementar, puede obtener la referencia
> directamente (si sabe de antemano de qué capa debe recuperarla), o, si
> es una herramienta válida para cualquier capa, puede obtener la
> referencia a la capa mediante la selección de la misma en el árbol de capas:
>
> a) Referencia directa por nombre (sería recomendable incluir un chequeo
> de que la capa de nombre nombreDeMiCapa existe realmente):
>
> Layer selectedLayer = JUMPWorkbench.getLayer(nombreDeMiCapa);
>
> b) Recuperarla a partir de la selección del árbol (sería recomendable
> incluir un chequeo que compruebe que existe una capa vectorial y que
> está seleccionada en el árbol)
>
> Layer selectedLayer = context.getSelectedLayer(0);
>
> 4) Recuperamos los elementos que cruzan con el encuadre actual:
>
> List<Layer> layersToFilter = new ArrayList<Layer>();
> layersToFilter.add(selectedLayer);
> Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> Map layerToFeaturesInFenceMap =
> context.getLayerViewPanel().layersToFeaturesInFenceMap(
> layersToFilter, fence);
>
> 5) Para seleccionar los elementos puedes consultar el método
> refreshSelection(layerToFeaturesInFenceMap, context.getLayerViewPanel())
> del plugin CalculateSelectionPlugIn.
>
> Saludos,
>
>
> Alex Mtz. de Agirre Escobar escribió:
> > Buenos días!
> >
> > Estoy teniendo algunos problemas a la hora de implementar una
> > herramienta propia sobre Kosmo.
> >
> > El primer paso que debe realizar dicha herramienta es seleccionar los
> > elementos de la capa activa que se encuentren en la ventana de
> > visualización de Kosmo. Para ello, debo de llamar al evento que
> > realiza el botón de selección, y posteriormente seleccionar los
> > elementos que se encuentren dentro de las coordenadas de la ventana de
> > visualización. De momento, me conformaría con lograr dicho
> > propósito. El error que tengo en mi código es que el constructor
> > /CalculateSelectionPlugIn/ no está definido.
> >
> > Si fuese posible, les agradecería que me ayudaran a solucionar dicho
> > contratiempo.
> >
> > Gracias de antemano,
> > Alex.
> >
> > ------------------------------------------------------------------------
> > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> > posta elektronikoko zerbitzua. Erregistratu orain.
> > <https://signup.live.com/signup.aspx?id=60969>
>
> --
>
> Sergio Baños Calvo
>
> Jefe de desarrollos
> Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> Tlfno. móvil: 685005960
> Tlfno. fijo: (+34) 954788876
>
> E-mail: [hidden email]
>


Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun posta elektronikoko zerbitzua. Erregistratu orain.
_______________________________________________
Kosmo mailing list
[hidden email]
http://lists.saig.es/mailman/listinfo/kosmo
Reply | Threaded
Open this post in threaded view
|

Re: Consulta desarrollo

Sergio Baños Calvo
Buenas Alex.

Layer extiende AbstractLayerable (que a su vez implementa Layerable),
por lo que solo tienes que hacer el casting adecuado para que funcione ;):

Layer selectedLayer = (Layer)context.getSelectedLayer(0);

.........

List<Layerable> layersToFilter = new ArrayList<Layerable>();
layersToFilter.add(selectedLayer);
Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
Map layerToFeaturesInFenceMap =
context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter,
fence);

Saludos,

Alex Mtz. de Agirre Escobar escribió:

> Muchas gracias por la respuesta.
> He seguido las instrucciones, y he llegado al código que se muestra a
> continuación:
>
>
> public boolean execute(PlugInContext context) throws Exception {
> //******************
> //MENSAJE DE DIALOGO
> //******************
> DialogFactory.showInformationDialog(context.getWorkbenchFrame(),
> "Proyecto de exportación a dxf...",
> "Diálogo de información");
> //*************************************************************
> //SELEECIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
> //*************************************************************
> //recuperamos el encuadre de la vista activa
> Envelope encuadreActual =
> context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> //recuperamos la capa a partir de la selección del árbol
> Layer selectedLayer = _context.getSelectedLayer(0)_;  -->  _ERROR:
> "Type mismatch: cannot convert from Layerable to Layer"_
>
> //recuperamos los elementos que cruzan con el encuadre actual
> List<Layer> layersToFilter = new ArrayList<Layer>();
> layersToFilter.add(selectedLayer);
> Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> Map layerToFeaturesInFenceMap =
> context.getLayerViewPanel()._layersToFeaturesInFenceMap_(layersToFilter,
> fence); --> _ERROR: "The method _
> _layersToFeaturesInFenceMap(List<Layerable>, Geometry) in the type
> LayerViewPanel is not applicable _
> _for the arguments (List<Layer>, Geometry)"_
>
>
> Espero que me puedan ayudar con estos 2 errores.
> Gracias de nuevo, y un saludo,
> Alex.
>
>
>
>
> > Date: Mon, 7 Jun 2010 11:16:42 +0200
> > From: [hidden email]
> > To: [hidden email]
> > Subject: [Kosmo] Re: Consulta desarrollo
> >
> > Buenos días Alex.
> >
> > Le comento una serie de puntos sobre la funcionalidad que quiere
> > implementar:
> >
> > 1) En primer lugar, supondré que su herramienta será un PlugIn (es
> > decir, que la clase implementa la interfaz PlugIn o extiende a
> alguna de
> > sus subclases, como AbstractPlugIn o ThreadedPlugIn).
> >
> > 2) En el método execute de dicha herramienta debe incluir el código que
> > debe ejecutarse al pulsar el botón de la misma en la interfaz de
> usuario
> > (o, si la tarea que desea realizar es de "larga duración", deberá
> > comprobarse en dicho método execute que se cumplen todas las
> > precondiciones para la ejecución de la misma en el método run(),
> > recuperando a su vez los datos que necesite).
> >
> > En este caso, lo primero que necesitará es recuperar el encuadre de la
> > vista activa (no olvide incluir en el método getCheck() /
> > createEnableCheck la comprobación de que debe existir una vista activa):
> >
> > Envelope encuadreActual =
> >
> context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> >
> > 3) Una vez obtenida dicha referencia, sería necesario recuperar de qué
> > capa/s se van a seleccionar los elementos. Dependiendo de la
> > funcionalidad que desea implementar, puede obtener la referencia
> > directamente (si sabe de antemano de qué capa debe recuperarla), o, si
> > es una herramienta válida para cualquier capa, puede obtener la
> > referencia a la capa mediante la selección de la misma en el árbol
> de capas:
> >
> > a) Referencia directa por nombre (sería recomendable incluir un chequeo
> > de que la capa de nombre nombreDeMiCapa existe realmente):
> >
> > Layer selectedLayer = JUMPWorkbench.getLayer(nombreDeMiCapa);
> >
> > b) Recuperarla a partir de la selección del árbol (sería recomendable
> > incluir un chequeo que compruebe que existe una capa vectorial y que
> > está seleccionada en el árbol)
> >
> > Layer selectedLayer = context.getSelectedLayer(0);
> >
> > 4) Recuperamos los elementos que cruzan con el encuadre actual:
> >
> > List<Layer> layersToFilter = new ArrayList<Layer>();
> > layersToFilter.add(selectedLayer);
> > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > Map layerToFeaturesInFenceMap =
> > context.getLayerViewPanel().layersToFeaturesInFenceMap(
> > layersToFilter, fence);
> >
> > 5) Para seleccionar los elementos puedes consultar el método
> > refreshSelection(layerToFeaturesInFenceMap,
> context.getLayerViewPanel())
> > del plugin CalculateSelectionPlugIn.
> >
> > Saludos,
> >
> >
> > Alex Mtz. de Agirre Escobar escribió:
> > > Buenos días!
> > >
> > > Estoy teniendo algunos problemas a la hora de implementar una
> > > herramienta propia sobre Kosmo.
> > >
> > > El primer paso que debe realizar dicha herramienta es seleccionar los
> > > elementos de la capa activa que se encuentren en la ventana de
> > > visualización de Kosmo. Para ello, debo de llamar al evento que
> > > realiza el botón de selección, y posteriormente seleccionar los
> > > elementos que se encuentren dentro de las coordenadas de la
> ventana de
> > > visualización. De momento, me conformaría con lograr dicho
> > > propósito. El error que tengo en mi código es que el constructor
> > > /CalculateSelectionPlugIn/ no está definido.
> > >
> > > Si fuese posible, les agradecería que me ayudaran a solucionar dicho
> > > contratiempo.
> > >
> > > Gracias de antemano,
> > > Alex.
> > >
> > >
> ------------------------------------------------------------------------
> > > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> > > posta elektronikoko zerbitzua. Erregistratu orain.
> > > <https://signup.live.com/signup.aspx?id=60969>
> >
> > --
> >
> > Sergio Baños Calvo
> >
> > Jefe de desarrollos
> > Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> > Tlfno. móvil: 685005960
> > Tlfno. fijo: (+34) 954788876
> >
> > E-mail: [hidden email]
> >
>
> ------------------------------------------------------------------------
> Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> posta elektronikoko zerbitzua. Erregistratu orain.
> <https://signup.live.com/signup.aspx?id=60969>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Kosmo mailing list
> [hidden email]
> http://lists.saig.es/mailman/listinfo/kosmo
>  
--

Sergio Baños Calvo

Jefe de desarrollos
Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
Tlfno. móvil: 685005960
Tlfno. fijo: (+34) 954788876

E-mail: [hidden email]


_______________________________________________
Kosmo mailing list
[hidden email]
http://lists.saig.es/mailman/listinfo/kosmo
Reply | Threaded
Open this post in threaded view
|

Re: Consulta desarrollo

Alex Mtz. de Agirre Escobar
Buenos días.
Tengo problemas para implementar el método refreshSelection en el siguiente código:


public boolean execute(PlugInContext context) throws Exception {
//*************************************************************
//SELECCIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
//*************************************************************
//recuperamos el encuadre de la vista activa
Envelope encuadreActual = context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
//recuperamos la capa a partir de la selección del árbol
Layer selectedLayer = (Layer) context.getSelectedLayer(0);

//recuperamos los elementos que cruzan con el encuadre actual
List<Layerable> layersToFilter = new ArrayList<Layerable>();
layersToFilter.add(selectedLayer);
Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
Map layerToFeaturesInFenceMap =
context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter, fence);
//seleccionamos los elementos
refreshSelection(layerToFeaturesInFenceMap, context.getLayerViewPanel());
        
       return true;
}

Logger LOGGER = Logger.getLogger(CalculateSelectionPlugIn.class);
boolean wasShiftPressed;
AbstractSelection selection;

public void refreshSelection( Map layerToFeaturesInFenceMap, LayerViewPanel panel ) throws Exception {
        Layer[] layers = new Layer[layerToFeaturesInFenceMap.keySet().size()];
        layerToFeaturesInFenceMap.keySet().toArray(layers);

        for( int i = 0; i < layers.length; i++ ) {
            
         Layer layer = layers[i];

            boolean originalPanelUpdatesEnabled = panel.getSelectionManager()
                    .arePanelUpdatesEnabled();

            panel.getSelectionManager().setPanelUpdatesEnabled(false);

            try {
                Collection featuresToSelect = (Collection) layerToFeaturesInFenceMap.get(layer);

                if (featuresToSelect == null)
                    continue;
                Collection featuresToUnselect = selection.getFeaturesWithSelectedItems(layer);
                featuresToUnselect.retainAll(featuresToSelect);

                selection.selectItems(layer, featuresToSelect);

                if (wasShiftPressed) {
                    selection.unselectItems(layer, featuresToUnselect);
                }
            } finally {
                panel.getSelectionManager().setPanelUpdatesEnabled(originalPanelUpdatesEnabled);
            }
        }

        panel.getSelectionManager().updatePanel();
}


El proyecto compila sin problemas, pero a la hora de ejecutarlo en Kosmo me da una excepción sin mensaje asociado (Null Pointer Exception):

java.lang.NullPointerException
at org.saig.jump.plugin.proyecto.HelloWorldPlugIn.refreshSelection(HelloWorldPlugIn.java:167)
at org.saig.jump.plugin.proyecto.HelloWorldPlugIn.execute(HelloWorldPlugIn.java:116)
at com.vividsolutions.jump.workbench.plugin.AbstractPlugIn$1.actionPerformed(AbstractPlugIn.java:151)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


Espero me puedan ayudar. Gracias de antemano y un saludo,
Alex.




> Date: Mon, 7 Jun 2010 13:05:52 +0200
> From: [hidden email]
> To: [hidden email]
> Subject: Re: [Kosmo] Re: Consulta desarrollo
>
> Buenas Alex.
>
> Layer extiende AbstractLayerable (que a su vez implementa Layerable),
> por lo que solo tienes que hacer el casting adecuado para que funcione ;):
>
> Layer selectedLayer = (Layer)context.getSelectedLayer(0);
>
> .........
>
> List<Layerable> layersToFilter = new ArrayList<Layerable>();
> layersToFilter.add(selectedLayer);
> Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> Map layerToFeaturesInFenceMap =
> context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter,
> fence);
>
> Saludos,
>
> Alex Mtz. de Agirre Escobar escribió:
> > Muchas gracias por la respuesta.
> > He seguido las instrucciones, y he llegado al código que se muestra a
> > continuación:
> >
> >
> > public boolean execute(PlugInContext context) throws Exception {
> > //******************
> > //MENSAJE DE DIALOGO
> > //******************
> > DialogFactory.showInformationDialog(context.getWorkbenchFrame(),
> > "Proyecto de exportación a dxf...",
> > "Diálogo de información");
> > //*************************************************************
> > //SELEECIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
> > //*************************************************************
> > //recuperamos el encuadre de la vista activa
> > Envelope encuadreActual =
> > context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> > //recuperamos la capa a partir de la selección del árbol
> > Layer selectedLayer = _context.getSelectedLayer(0)_; --> _ERROR:
> > "Type mismatch: cannot convert from Layerable to Layer"_
> >
> > //recuperamos los elementos que cruzan con el encuadre actual
> > List<Layer> layersToFilter = new ArrayList<Layer>();
> > layersToFilter.add(selectedLayer);
> > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > Map layerToFeaturesInFenceMap =
> > context.getLayerViewPanel()._layersToFeaturesInFenceMap_(layersToFilter,
> > fence); --> _ERROR: "The method _
> > _layersToFeaturesInFenceMap(List<Layerable>, Geometry) in the type
> > LayerViewPanel is not applicable _
> > _for the arguments (List<Layer>, Geometry)"_
> >
> >
> > Espero que me puedan ayudar con estos 2 errores.
> > Gracias de nuevo, y un saludo,
> > Alex.
> >
> >
> >
> >
> > > Date: Mon, 7 Jun 2010 11:16:42 +0200
> > > From: [hidden email]
> > > To: [hidden email]
> > > Subject: [Kosmo] Re: Consulta desarrollo
> > >
> > > Buenos días Alex.
> > >
> > > Le comento una serie de puntos sobre la funcionalidad que quiere
> > > implementar:
> > >
> > > 1) En primer lugar, supondré que su herramienta será un PlugIn (es
> > > decir, que la clase implementa la interfaz PlugIn o extiende a
> > alguna de
> > > sus subclases, como AbstractPlugIn o ThreadedPlugIn).
> > >
> > > 2) En el método execute de dicha herramienta debe incluir el código que
> > > debe ejecutarse al pulsar el botón de la misma en la interfaz de
> > usuario
> > > (o, si la tarea que desea realizar es de "larga duración", deberá
> > > comprobarse en dicho método execute que se cumplen todas las
> > > precondiciones para la ejecución de la misma en el método run(),
> > > recuperando a su vez los datos que necesite).
> > >
> > > En este caso, lo primero que necesitará es recuperar el encuadre de la
> > > vista activa (no olvide incluir en el método getCheck() /
> > > createEnableCheck la comprobación de que debe existir una vista activa):
> > >
> > > Envelope encuadreActual =
> > >
> > context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> > >
> > > 3) Una vez obtenida dicha referencia, sería necesario recuperar de qué
> > > capa/s se van a seleccionar los elementos. Dependiendo de la
> > > funcionalidad que desea implementar, puede obtener la referencia
> > > directamente (si sabe de antemano de qué capa debe recuperarla), o, si
> > > es una herramienta válida para cualquier capa, puede obtener la
> > > referencia a la capa mediante la selección de la misma en el árbol
> > de capas:
> > >
> > > a) Referencia directa por nombre (sería recomendable incluir un chequeo
> > > de que la capa de nombre nombreDeMiCapa existe realmente):
> > >
> > > Layer selectedLayer = JUMPWorkbench.getLayer(nombreDeMiCapa);
> > >
> > > b) Recuperarla a partir de la selección del árbol (sería recomendable
> > > incluir un chequeo que compruebe que existe una capa vectorial y que
> > > está seleccionada en el árbol)
> > >
> > > Layer selectedLayer = context.getSelectedLayer(0);
> > >
> > > 4) Recuperamos los elementos que cruzan con el encuadre actual:
> > >
> > > List<Layer> layersToFilter = new ArrayList<Layer>();
> > > layersToFilter.add(selectedLayer);
> > > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > > Map layerToFeaturesInFenceMap =
> > > context.getLayerViewPanel().layersToFeaturesInFenceMap(
> > > layersToFilter, fence);
> > >
> > > 5) Para seleccionar los elementos puedes consultar el método
> > > refreshSelection(layerToFeaturesInFenceMap,
> > context.getLayerViewPanel())
> > > del plugin CalculateSelectionPlugIn.
> > >
> > > Saludos,
> > >
> > >
> > > Alex Mtz. de Agirre Escobar escribió:
> > > > Buenos días!
> > > >
> > > > Estoy teniendo algunos problemas a la hora de implementar una
> > > > herramienta propia sobre Kosmo.
> > > >
> > > > El primer paso que debe realizar dicha herramienta es seleccionar los
> > > > elementos de la capa activa que se encuentren en la ventana de
> > > > visualización de Kosmo. Para ello, debo de llamar al evento que
> > > > realiza el botón de selección, y posteriormente seleccionar los
> > > > elementos que se encuentren dentro de las coordenadas de la
> > ventana de
> > > > visualización. De momento, me conformaría con lograr dicho
> > > > propósito. El error que tengo en mi código es que el constructor
> > > > /CalculateSelectionPlugIn/ no está definido.
> > > >
> > > > Si fuese posible, les agradecería que me ayudaran a solucionar dicho
> > > > contratiempo.
> > > >
> > > > Gracias de antemano,
> > > > Alex.
> > > >
> > > >
> > ------------------------------------------------------------------------
> > > > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> > > > posta elektronikoko zerbitzua. Erregistratu orain.
> > > > <https://signup.live.com/signup.aspx?id=60969>
> > >
> > > --
> > >
> > > Sergio Baños Calvo
> > >
> > > Jefe de desarrollos
> > > Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> > > Tlfno. móvil: 685005960
> > > Tlfno. fijo: (+34) 954788876
> > >
> > > E-mail: [hidden email]
> > >
> >
> > ------------------------------------------------------------------------
> > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> > posta elektronikoko zerbitzua. Erregistratu orain.
> > <https://signup.live.com/signup.aspx?id=60969>
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Kosmo mailing list
> > [hidden email]
> > http://lists.saig.es/mailman/listinfo/kosmo
> >
>
> --
>
> Sergio Baños Calvo
>
> Jefe de desarrollos
> Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> Tlfno. móvil: 685005960
> Tlfno. fijo: (+34) 954788876
>
> E-mail: [hidden email]
>


Hotmail: Hotmail: konfiantzazko posta elektronikoa, egon babesturik nahi ez dituzun mezuetatik. Erregistratu orain.
_______________________________________________
Kosmo mailing list
[hidden email]
http://lists.saig.es/mailman/listinfo/kosmo
Reply | Threaded
Open this post in threaded view
|

Re: Consulta desarrollo

Sergio Baños Calvo
Buenas tardes Alex.

Coloque un punto de interrupción en la linea 167 de su herramienta y
compruebe que elemento es nulo en dicho punto. Es probable que falte
inicializar alguna variable que se use en dicha línea.

Saludos,

Alex Mtz. de Agirre Escobar escribió:

> Buenos días.
> Tengo problemas para implementar el método /refreshSelection/ en el
> siguiente código:
>
>
> public boolean execute(PlugInContext context) throws Exception {
> //*************************************************************
> //SELECCIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
> //*************************************************************
> //recuperamos el encuadre de la vista activa
> Envelope encuadreActual =
> context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> //recuperamos la capa a partir de la selección del árbol
> Layer selectedLayer = (Layer) context.getSelectedLayer(0);
>
> //recuperamos los elementos que cruzan con el encuadre actual
> List<Layerable> layersToFilter = new ArrayList<Layerable>();
> layersToFilter.add(selectedLayer);
> Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> Map layerToFeaturesInFenceMap =
> context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter,
> fence);
> //seleccionamos los elementos
> refreshSelection(layerToFeaturesInFenceMap, context.getLayerViewPanel());
>        
>        return true;
> }
>
> Logger LOGGER = Logger.getLogger(CalculateSelectionPlugIn.class);
> boolean wasShiftPressed;
> AbstractSelection selection;
>
> public void refreshSelection( Map layerToFeaturesInFenceMap,
> LayerViewPanel panel ) throws Exception {
>         Layer[] layers = new
> Layer[layerToFeaturesInFenceMap.keySet().size()];
>         layerToFeaturesInFenceMap.keySet().toArray(layers);
>
>         for( int i = 0; i < layers.length; i++ ) {
>            
>          Layer layer = layers[i];
>
>             boolean originalPanelUpdatesEnabled =
> panel.getSelectionManager()
>                     .arePanelUpdatesEnabled();
>
>             panel.getSelectionManager().setPanelUpdatesEnabled(false);
>
>             try {
>                 Collection featuresToSelect = (Collection)
> layerToFeaturesInFenceMap.get(layer);
>
>                 if (featuresToSelect == null)
>                     continue;
>                 Collection featuresToUnselect =
> selection.getFeaturesWithSelectedItems(layer);
>                 featuresToUnselect.retainAll(featuresToSelect);
>
>                 selection.selectItems(layer, featuresToSelect);
>
>                 if (wasShiftPressed) {
>                     selection.unselectItems(layer, featuresToUnselect);
>                 }
>             } finally {
>                
>  panel.getSelectionManager().setPanelUpdatesEnabled(originalPanelUpdatesEnabled);
>             }
>         }
>
>         panel.getSelectionManager().updatePanel();
> }
>
>
> El proyecto compila sin problemas, pero a la hora de ejecutarlo en
> Kosmo me da una excepción sin mensaje asociado (Null Pointer Exception):
>
> java.lang.NullPointerException
> at
> org.saig.jump.plugin.proyecto.HelloWorldPlugIn.refreshSelection(HelloWorldPlugIn.java:167)
> at
> org.saig.jump.plugin.proyecto.HelloWorldPlugIn.execute(HelloWorldPlugIn.java:116)
> at
> com.vividsolutions.jump.workbench.plugin.AbstractPlugIn$1.actionPerformed(AbstractPlugIn.java:151)
> at
> javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
> at
> javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
> at
> javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
> at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
> at
> javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
> at
> java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
> at java.awt.Component.processMouseEvent(Component.java:6263)
> at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
> at java.awt.Component.processEvent(Component.java:6028)
> at java.awt.Container.processEvent(Container.java:2041)
> at java.awt.Component.dispatchEventImpl(Component.java:4630)
> at java.awt.Container.dispatchEventImpl(Container.java:2099)
> at java.awt.Component.dispatchEvent(Component.java:4460)
> at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
> at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
> at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
> at java.awt.Container.dispatchEventImpl(Container.java:2085)
> at java.awt.Window.dispatchEventImpl(Window.java:2478)
> at java.awt.Component.dispatchEvent(Component.java:4460)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
> at
> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
> at
> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
> at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
>
>
> Espero me puedan ayudar. Gracias de antemano y un saludo,
> Alex.
>
>
>
>
> > Date: Mon, 7 Jun 2010 13:05:52 +0200
> > From: [hidden email]
> > To: [hidden email]
> > Subject: Re: [Kosmo] Re: Consulta desarrollo
> >
> > Buenas Alex.
> >
> > Layer extiende AbstractLayerable (que a su vez implementa Layerable),
> > por lo que solo tienes que hacer el casting adecuado para que
> funcione ;):
> >
> > Layer selectedLayer = (Layer)context.getSelectedLayer(0);
> >
> > .........
> >
> > List<Layerable> layersToFilter = new ArrayList<Layerable>();
> > layersToFilter.add(selectedLayer);
> > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > Map layerToFeaturesInFenceMap =
> > context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter,
> > fence);
> >
> > Saludos,
> >
> > Alex Mtz. de Agirre Escobar escribió:
> > > Muchas gracias por la respuesta.
> > > He seguido las instrucciones, y he llegado al código que se muestra a
> > > continuación:
> > >
> > >
> > > public boolean execute(PlugInContext context) throws Exception {
> > > //******************
> > > //MENSAJE DE DIALOGO
> > > //******************
> > > DialogFactory.showInformationDialog(context.getWorkbenchFrame(),
> > > "Proyecto de exportación a dxf...",
> > > "Diálogo de información");
> > > //*************************************************************
> > > //SELEECIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
> > > //*************************************************************
> > > //recuperamos el encuadre de la vista activa
> > > Envelope encuadreActual =
> > >
> context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> > > //recuperamos la capa a partir de la selección del árbol
> > > Layer selectedLayer = _context.getSelectedLayer(0)_; --> _ERROR:
> > > "Type mismatch: cannot convert from Layerable to Layer"_
> > >
> > > //recuperamos los elementos que cruzan con el encuadre actual
> > > List<Layer> layersToFilter = new ArrayList<Layer>();
> > > layersToFilter.add(selectedLayer);
> > > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > > Map layerToFeaturesInFenceMap =
> > >
> context.getLayerViewPanel()._layersToFeaturesInFenceMap_(layersToFilter,
> > > fence); --> _ERROR: "The method _
> > > _layersToFeaturesInFenceMap(List<Layerable>, Geometry) in the type
> > > LayerViewPanel is not applicable _
> > > _for the arguments (List<Layer>, Geometry)"_
> > >
> > >
> > > Espero que me puedan ayudar con estos 2 errores.
> > > Gracias de nuevo, y un saludo,
> > > Alex.
> > >
> > >
> > >
> > >
> > > > Date: Mon, 7 Jun 2010 11:16:42 +0200
> > > > From: [hidden email]
> > > > To: [hidden email]
> > > > Subject: [Kosmo] Re: Consulta desarrollo
> > > >
> > > > Buenos días Alex.
> > > >
> > > > Le comento una serie de puntos sobre la funcionalidad que quiere
> > > > implementar:
> > > >
> > > > 1) En primer lugar, supondré que su herramienta será un PlugIn (es
> > > > decir, que la clase implementa la interfaz PlugIn o extiende a
> > > alguna de
> > > > sus subclases, como AbstractPlugIn o ThreadedPlugIn).
> > > >
> > > > 2) En el método execute de dicha herramienta debe incluir el
> código que
> > > > debe ejecutarse al pulsar el botón de la misma en la interfaz de
> > > usuario
> > > > (o, si la tarea que desea realizar es de "larga duración", deberá
> > > > comprobarse en dicho método execute que se cumplen todas las
> > > > precondiciones para la ejecución de la misma en el método run(),
> > > > recuperando a su vez los datos que necesite).
> > > >
> > > > En este caso, lo primero que necesitará es recuperar el encuadre
> de la
> > > > vista activa (no olvide incluir en el método getCheck() /
> > > > createEnableCheck la comprobación de que debe existir una vista
> activa):
> > > >
> > > > Envelope encuadreActual =
> > > >
> > >
> context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> > > >
> > > > 3) Una vez obtenida dicha referencia, sería necesario recuperar
> de qué
> > > > capa/s se van a seleccionar los elementos. Dependiendo de la
> > > > funcionalidad que desea implementar, puede obtener la referencia
> > > > directamente (si sabe de antemano de qué capa debe recuperarla),
> o, si
> > > > es una herramienta válida para cualquier capa, puede obtener la
> > > > referencia a la capa mediante la selección de la misma en el árbol
> > > de capas:
> > > >
> > > > a) Referencia directa por nombre (sería recomendable incluir un
> chequeo
> > > > de que la capa de nombre nombreDeMiCapa existe realmente):
> > > >
> > > > Layer selectedLayer = JUMPWorkbench.getLayer(nombreDeMiCapa);
> > > >
> > > > b) Recuperarla a partir de la selección del árbol (sería
> recomendable
> > > > incluir un chequeo que compruebe que existe una capa vectorial y que
> > > > está seleccionada en el árbol)
> > > >
> > > > Layer selectedLayer = context.getSelectedLayer(0);
> > > >
> > > > 4) Recuperamos los elementos que cruzan con el encuadre actual:
> > > >
> > > > List<Layer> layersToFilter = new ArrayList<Layer>();
> > > > layersToFilter.add(selectedLayer);
> > > > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > > > Map layerToFeaturesInFenceMap =
> > > > context.getLayerViewPanel().layersToFeaturesInFenceMap(
> > > > layersToFilter, fence);
> > > >
> > > > 5) Para seleccionar los elementos puedes consultar el método
> > > > refreshSelection(layerToFeaturesInFenceMap,
> > > context.getLayerViewPanel())
> > > > del plugin CalculateSelectionPlugIn.
> > > >
> > > > Saludos,
> > > >
> > > >
> > > > Alex Mtz. de Agirre Escobar escribió:
> > > > > Buenos días!
> > > > >
> > > > > Estoy teniendo algunos problemas a la hora de implementar una
> > > > > herramienta propia sobre Kosmo.
> > > > >
> > > > > El primer paso que debe realizar dicha herramienta es
> seleccionar los
> > > > > elementos de la capa activa que se encuentren en la ventana de
> > > > > visualización de Kosmo. Para ello, debo de llamar al evento que
> > > > > realiza el botón de selección, y posteriormente seleccionar los
> > > > > elementos que se encuentren dentro de las coordenadas de la
> > > ventana de
> > > > > visualización. De momento, me conformaría con lograr dicho
> > > > > propósito. El error que tengo en mi código es que el constructor
> > > > > /CalculateSelectionPlugIn/ no está definido.
> > > > >
> > > > > Si fuese posible, les agradecería que me ayudaran a solucionar
> dicho
> > > > > contratiempo.
> > > > >
> > > > > Gracias de antemano,
> > > > > Alex.
> > > > >
> > > > >
> > >
> ------------------------------------------------------------------------
> > > > > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko
> duzun
> > > > > posta elektronikoko zerbitzua. Erregistratu orain.
> > > > > <https://signup.live.com/signup.aspx?id=60969>
> > > >
> > > > --
> > > >
> > > > Sergio Baños Calvo
> > > >
> > > > Jefe de desarrollos
> > > > Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> > > > Tlfno. móvil: 685005960
> > > > Tlfno. fijo: (+34) 954788876
> > > >
> > > > E-mail: [hidden email]
> > > >
> > >
> > >
> ------------------------------------------------------------------------
> > > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> > > posta elektronikoko zerbitzua. Erregistratu orain.
> > > <https://signup.live.com/signup.aspx?id=60969>
> > >
> ------------------------------------------------------------------------
> > >
> > > _______________________________________________
> > > Kosmo mailing list
> > > [hidden email]
> > > http://lists.saig.es/mailman/listinfo/kosmo
> > >
> >
> > --
> >
> > Sergio Baños Calvo
> >
> > Jefe de desarrollos
> > Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> > Tlfno. móvil: 685005960
> > Tlfno. fijo: (+34) 954788876
> >
> > E-mail: [hidden email]
> >
>
> ------------------------------------------------------------------------
> Hotmail: Hotmail: konfiantzazko posta elektronikoa, egon babesturik
> nahi ez dituzun mezuetatik. Erregistratu orain.
> <https://signup.live.com/signup.aspx?id=60969>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Kosmo mailing list
> [hidden email]
> http://lists.saig.es/mailman/listinfo/kosmo
>  
--

Sergio Baños Calvo

Jefe de desarrollos
Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
Tlfno. móvil: 685005960
Tlfno. fijo: (+34) 954788876

E-mail: [hidden email]


_______________________________________________
Kosmo mailing list
[hidden email]
http://lists.saig.es/mailman/listinfo/kosmo