Personal tools
You are here: Home Development Documents gvSIG desktop 1.0 / 1.1 FMap MapControl ToolListener
Document Actions

ToolListener

by Pablo Piqueras last modified 2010-06-01 22:46

''Listeners'' utilizados para tratar los eventos generados por el ''Behavior'' seleccionado en MapControl, y así permitir la interacción con éste simulando una determinada herramienta.

Introducción

Según el tipo de capas visibles y activas, gvSIG nos proporcionará una serie de herramientas con las que el usuario podrá interaccionar con el objeto MapControl que contiene las capas.

Al seleccionar cualquiera de las herramientas disponibles, lo que se está haciendo es seleccionar un comportamiento para trabajar con MapControl, que puede ser el resultado de múltiples comportamientos denominados cada uno Behavior, cada uno con una ToolListener.

La librería libFMap define cada uno de estos comportientos básicos, que procesan los eventos de ratón producidos en MapControl, generando otros eventos con la información necesaria según su naturaleza. Estos eventos serán los que se envíen a la herramienta actualmente seleccionada para interactuar con MapControl.

Dicha herramienta tendrá un icono que verá el usuario en su cursor, y una serie de métodos que serán invocados según el tipo de evento que se produzca.

Las ToolListener incluyen la lógica que complementa a los Behavior para simular una herramienta con la que interactuar con un objeto de tipo MapControl.

En la librería libFMap se definen las ToolListener básicas, pero existen otras muchas que heredan de estas, y están definidas en otros proyectos. Destacar las que proporciona el proyecto appgvSIG, que, en general, solo agregan como funcionalidad el actualizar las herramientas disponibles en la GUI de gvSIG , una ejecutada la lógica de la herramienta de la que hereda (en libFMap).

Diagramas

Existe multitud de herramientas definidas en la librería libFMap, todas implementan la interfaz ToolListener, y se agrupan en 5 tipos, según se puede observar en el diagrama 1: selección por área circular, rectangular, polinínea, por punto, o de tipo drag & drop (arrastrar y soltar).

Todas reciben eventos fruto de acciones realizadas con el ratón sobre la vista (MapControl) .

Diagrama con las interfaces para todas las herramientas

images/mapcontrol/dcinterfacesbasetoolslibfmap.png

Diagrama 1: diagrama de clases con las interfaces base que implementan todos los listeners de las herramientas definidas en libFMap. El color morado representa un elemento del diagrama global de MapContext.

Diagrama con herramientas que implementan CircleListener

El diagrama 2 muestra los tool listener definidos en la librería libFMap asociados a una selección por área circular.

images/mapcontrol/dclistenersimplcirclelistener.png

Diagrama 2: diagrama de clases: Listeners de herramientas de libFMap que implementan CircleListener.

Tipo Proyecto Descripción Cancelable Eventos a los que responde Icono
CircleMeasureListener appgvSIG Calcula el radio del círculo y lo muestra en el la barra de estado de gvSIG como distancias parcial y total. No. MeasureEvent
images/mapcontrol/toollistenericons/ictlrulercursor.png

Diagrama con herramientas que implementan PanListener

El diagrama 3 muestra los tool listener definidos en la librería libFMap asociados a una selección de tipo drag & drop (arrastrar y soltar).

images/mapcontrol/dclistenerstypepanlistener.png

Diagrama 3: diagrama de clases: Listeners de herramientas de libFMap que implementan PanListener.

Tipo Proyecto Descripción Cancelable Eventos a los que responde Icono
MapOverviewChangeZoomListener appgvSIG

Actualiza el extent del ViewPort del MapControl con el área rectangular seleccionada, o dibuja en el MapOverview asociado un rectángulo delimitando dicha área.

De este segundo modo establece dicha área como el extent a visualizar en el objeto MapControl asociado al MapOverview.

Sí. RectangleEvent, MoveEvent
images/mapcontrol/toollistenericons/ictlzoomincursor.gif
MapOverviewPanListener appgvSIG

Desplaza el área rectangular bajo el cursor del ratón en el objeto MapOverview según se arrastra éste mientras se mantiene pulsado su botón derecho.

De este modo se establece dicha área como el extent a visualizar en el objeto MapControl asociado al MapOverview.

Sí. MoveEvent
images/mapcontrol/toollistenericons/ictlcruxcursor.png
PanListenerImpl libFMap Actualiza el ViewPort del objeto MapControl asociado con un nuevo extent. Sí. MoveEvent
images/mapcontrol/toollistenericons/ictlhand.png
PanListener appgvSIG Igual a PanListenerImpl, actualizando los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado. Sí. MoveEvent
images/mapcontrol/toollistenericons/ictlhand.png

Diagrama con herramientas que implementan PointListener

El diagrama 4 muestra los tool listener definidos en la librería libFMap asociados a una selección por punto.

images/mapcontrol/smalldclistenerstypepointlistener.png

Diagrama 4: diagrama de clases: Listeners de herramientas de libFMap que implementan PointListener.

Pulse aquí para ver el diagrama 4 en tamaño completo.

Tipo Proyecto Descripción Cancelable Eventos a los que responde Icono
DwgEntityListener extDWG Selecciona una geometría que tenga un punto en la posición seleccionada por el cursor, en una capa con información DWG. No. PointEvent Cursor.CROSSHAIR_CURSOR
InfoListener appgvSIG

Muestra la información alfanumérica disponible para el punto seleccionado y un área alrededor de 7 unidades equivalentes en coordenadas del mapa, en todas las capas activas del MapControl asociado.

Dicha información se muestra en forma de tabla.

No. PointEvent
images/mapcontrol/toollistenericons/ictlinfocursor.gif
LinkListener appgvSIG Muestra en un panel información (imagen, texto, etc) asociada a cualquier feature de las capas activas cuya área intersecte con el punto seleccionado. No. PointEvent
images/mapcontrol/toollistenericons/ictllink.png
MapOverviewListener appgvSIG

Crea un rectángulo centrado en el punto seleccionado con el botón izquierdo del ratón sobre el objeto MapOverview asociado.

De este modo se establece dicha área como el extent a visualizar en el objeto MapControl asociado al MapOverview.

Sí. PointEvent
images/mapcontrol/toollistenericons/ictlcruxcursor.png
PointSelectionListener libFMap Selecciona todas las features de capas vectoriales activas del objeto MapControl asociado cuya área intersecte con el punto seleccionado por un simple click de cualquier botón del ratón. No. PointEvent
images/mapcontrol/toollistenericons/ictlpointselectcursor.png
PointSelectListener appgvSIG Igual a PointSelectionListener actualizando los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado. No. PointEvent
images/mapcontrol/toollistenericons/ictlpointselectcursor.png
SelectImageListenerImpl libFMap ToolListener anticuado que permitía tener SelectImageListener en appgvSIG para la selección de capa raster. Sí. PointEvent
images/mapcontrol/toollistenericons/ictlpointselectcursor.png
SelectImageListener appgvSIG

Selecciona la capa raster situada más arriba en el TOC con información en la posición indicada en el objeto MapControl asociado. Dicha capa pasará a estar activa, mientras que el resto estará como no activas.

Posteriormente actualiza los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado.

Esta ToolListener también está anticuada.

Sí. PointEvent
images/mapcontrol/toollistenericons/ictlpointselectcursor.png
StatusBarListener appgvSIG

Muestra en la barra de estado de la interfaz gráfica de gvSIG las coordenadas equivalentes al punto sobre el objeto MapControl asociado, llamémosle m.

Sigue las siguientes reglas para obtener las expresiones de las coordenadas:

Si m no está proyectado, expresa las coordenadas como distancia en píxeles respecto la esquina superior izquierda (0, 0).

Si estando proyectado, las unidades de medida de distancia del ViewPort de m están en grados, calcula las coordenadas geográficas.

En cualquier otro caso expresa las coordenadas como números decimales teniendo en cuenta la proyección actual.

En caso de no estar proyectado m, expresará las coordenadas como latitud: Lat = y longitud: Long =, sino como X: X = e Y: Y =, como prefijo, mientras que como sufijo:

En caso de utilizar números decimales: 8 decimales si la proyección de *m es EPSG: 4230 ó EPSG: 4326, o 2 decimales con cualquier otra proyección.

En caso de no utilizar números decimales, seguirá este patrón:

S?Gº M' S'', con:

  • S?: opcionalmente, el símbolo - en caso de ser negativa.
  • G: grados equivalentes.
  • M: minutos equivalentes.
  • S: segundos equivalentes.
No. PointEvent No utiliza icono.
ToolSelectGraphic extCAD Selecciona ítems de la capa GraphicLayer de objeto MapControl asociado, cuya área intersecta con el punto indicado. No. PointEvent
images/mapcontrol/toollistenericons/ictlpointselectcursor.png
WCSZoomPixelCursorListener extWCS

Realiza una operación de zoom acercar en el objeto MapControl asociado, tomando como centro el punto seleccionado.

El factor de zoom dependerá de la resolución máxima de las capas activas con información WCS

No. PointEvent
images/mapcontrol/toollistenericons/ictlzoompixelcursor.gif
ZoomOutListenerImpl libFMap

Realiza una operación de zoom alejar sobre el objeto MapControl asociado. Para ello calcula el nuevo extent de su ViewPort según las siguientes ecuaciones:

ViewPort vp = mapControl.getMapContext().getViewPort();
Point2D p2 = vp.toMapPoint(event.getPoint());
double factor = 1/MapContext.ZOOMOUTFACTOR;
Rectangle2D.Double r = new Rectangle2D.Double();
double nuevoX = p2.getX() - ((vp.getExtent().getWidth() * factor) / 2.0);
double nuevoY = p2.getY() - ((vp.getExtent().getHeight() * factor) / 2.0);
r.x = nuevoX;
r.y = nuevoY;
r.width = vp.getExtent().getWidth() * factor;
r.height = vp.getExtent().getHeight() * factor;
vp.setExtent(r);

Hay que contar que el extent calculado no tendrá porqué coincidir con el que en última instancia se visualize, dado que ViewPort se encargará de calcular el extent ajustado a partir de éste.

Sí. PointEvent
images/mapcontrol/toollistenericons/ictlzoomoutcursor.gif
ZoomOutListener appgvSIG Igual a ZoomOutListenerImpl actualizando los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado. Sí. PointEvent
images/mapcontrol/toollistenericons/ictlzoomoutcursor.gif
ZoomOutRightButtonListener libFMap Funciona igual que ZoomOutListenerImpl, pero sólo como respuesta al pulsado del botón derecho del ratón. Sí. PointEvent
images/mapcontrol/toollistenericons/ictlzoomoutcursor.gif
ZoomPixelCursorListener appgvSIG Realiza una operación de zoom acercar calculando el nuevo extent del ViewPort del objeto MapControl asociado centrado en su pixel más al punto seleccionado. No. PointEvent
images/mapcontrol/toollistenericons/ictlzoompixelcursor.gif

Diagrama con herramientas que implementan PolylineListener

El diagrama 5 muestra los tool listener definidos en la librería libFMap asociados a una selección por polilínea.

images/mapcontrol/dclistenerstypepolylinelistener.png

Diagrama 5: diagrama de clases: Listeners de herramientas de libFMap que implementan PolylineListener.

Tipo Proyecto Descripción Cancelable Eventos a los que responde Icono
AreaListenerImpl libFMap

Calcula perímetro y área de la selección rectangular definida con dos vértices de una de sus diagonales.

Si el objeto MapControl no está proyectado, toma las coordenadas como geográficas (latitud - longitud), sino, las calcula teniendo en cuenta su proyección y unidades de medida.

No. MeasureEvent
images/mapcontrol/toollistenericons/ictlareacursor.png
AreaListener appgvSIG Igual que AreaListenerImpl actualizando la información de perímetro y área en la barra de estado de la GUI de gvSIG. No. MeasureEvent
images/mapcontrol/toollistenericons/ictlareacursor.png
MeasureListenerImpl libFMap Calcula y muestra por la salida estándar el valor de la longitud total y la del último segmento de la polilínea definida por una serie de puntos. No. MeasureEvent
images/mapcontrol/toollistenericons/ictlrulercursor.png
MeasureListener appgvSIG Calcula y muestra por en el statusbar de gvSIG el valor de la longitud total y la del último segmento de la polilínea definida por una serie de puntos. No. MeasureEvent
images/mapcontrol/toollistenericons/ictlrulercursor.png
PolygonSelectionListener libFMap

Selecciona todas las features de las capas activas y vectoriales que intersecten con el área poligonal definida sobre el objeto MapControl asociado.

La selección se producirá una vez se finalice la creacción de la polilínea.

No. MeasureEvent
images/mapcontrol/toollistenericons/ictlpolygoncursor.png
PolygonSelectListener appgvSIG Igual a PolygonSelectionListener actualizando los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado. No. MeasureEvent
images/mapcontrol/toollistenericons/ictlpolygoncursor.png

Diagrama con herramientas que implementan RectangleListener

El diagrama 6 muestra los tool listener definidos en la librería libFMap asociados a una selección por área rectangular.

images/mapcontrol/dclistenerstyperectanglelistener.png

Diagrama 6: diagrama de clases: Listeners de herramientas de libFMap que implementan RectangleListener.

Tipo Proyecto Descripción Cancelable Eventos a los que responde Icono
MapOverviewChangeZoomListener appgvSIG

Permite realizar un cambio de extent según un área rectangular definida sobre un objeto de tipo MapOverview.

Si la acción es un movimiento, y el objeto asociado es de tipo MapOverview actualiza el extent manteniendo el zoom.

Si la acción es la selección de un área rectangular, y supera los 3x3 píxeles, realiza una operación de zoom in adaptando el ViewPort de MapOverview al extent equivalente en coordenadas del mundo al área seleccionada.

Sí. MoveEvent, RectangleEvent
images/mapcontrol/toollistenericons/ictlzoomincursor.gif
RectangleSelectionListener libFMap De las capas vectoriales que estén activas, selecciona todas las features que intersecten con el área rectangular definida. No. RectangleEvent
images/mapcontrol/toollistenericons/ictlrectselectcursor.gif
RectangleSelectListener appgvSIG Igual a RectangleSelectionListener actualizando los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado. No. RectangleEvent
images/mapcontrol/toollistenericons/ictlrectselectcursor.gif
SaveRasterListenerImpl libFMap, extRasterTools Almacena el área rectangular definida, en coordenadas del mapa y del mundo. Sí. RectangleEvent
images/mapcontrol/toollistenericons/ictlrectselectcursor.gif
SaveRasterListener extRasterTools Permite guardar el área rectangular seleccionada, como un fichero raster, vía un panel cone opciones de salvado. Sí. RectangleEvent
images/mapcontrol/toollistenericons/ictlrectselectcursor.gif
ExportToGeoRasterToolListener extRasterTools El diálogo de recorte raster utiliza esta herramienta para permitir al usuario seleccionar una nueva área y con ello actualizar las coordenadas de recorte. Sí. RectangleEvent
images/mapcontrol/toollistenericons/ictlrectselectcursor.gif
ZoomInListenerImpl libFMap

Realiza una operación de zoom acercar sobre el objeto MapControl asociado. Para ello calcula el nuevo extent de su ViewPort según las siguientes ecuaciones:

double factor = 1/MapContext.ZOOMINFACTOR;
Rectangle2D rect = event.getWorldCoordRect();
Rectangle2D.Double r = new Rectangle2D.Double();
ViewPort vp = mapCtrl.getMapContext().getViewPort()"
double nuevoX = rect.getMaxX() - ((vp.getExtent().getWidth() * factor) / 2.0);
double nuevoY = rect.getMaxY() - ((vp.getExtent().getHeight() * factor) / 2.0);
Rectangle2D.Double r;
r.x = nuevoX;
r.y = nuevoY;
r.width = vp.getExtent().getWidth() * factor;
r.height = vp.getExtent().getHeight() * factor;
vp.setExtent(r);

Hay que contar que el extent calculado no tendrá porqué coincidir con el que en última instancia se visualize, dado que que ViewPort se encargará de calcular el extent ajustado a partir de éste.

Sí. RectangleEvent
images/mapcontrol/toollistenericons/ictlzoomincursor.gif
ZoomInListener appgvSIG Igual a ZoomInListenerImpl actualizando los controles disponibles de la interfaz gráfica de gvSIG para trabajar con la información actual en el objeto MapControl asociado. Sí. RectangleEvent
images/mapcontrol/toollistenericons/ictlzoomincursor.gif

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: