[Gvsig_desarrolladores] Comparación de dos vistas
jaume domínguez faus
jaume.dominguez en iver.es
Mar Ago 21 11:24:46 CEST 2007
Hola David,
puedes, por ejemplo, tener tus dos vistas y crear una herramienta que te
devuelva el rectángulo que define el nuevo zoom
Puedes tomar como ejemplo la herramienta de zoom ya existente. Este
pedazo de código está en View.java (libFMap) y es el que instala la
herramienta en el mapcontro de la vista. Algo así debe de aparecer, por
ejemplo, en el execute() de la extensión que responde al botón en la
barra de herramientas.
ZoomInListener zil = new ZoomInListener(m_MapControl);
m_MapControl.addMapTool("zoomIn", new Behavior[]{new
RectangleBehavior(zil),
new PointBehavior(zoil), new
MouseMovementBehavior(sbl)});
Así a bote pronto, diría que únicamente necesitas crearte tu propio
ZoomInListenerImpl que añada un par de líneas a ZoomInListenerImpl en su
método rectangle(RectangleEvent) para que en vez de afectar únicamente a
una vista, afecte a las dos tuyas e instalarla en ambos MapControl de
ambas View (vistas).
/*
* @see
com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
*/
public void rectangle(RectangleEvent event) {
Rectangle2D rect = event.getWorldCoordRect();
Rectangle2D pixelRect = event.getPixelCoordRect();
Rectangle2D.Double r = new Rectangle2D.Double();
ViewPort vp = mapCtrl.getMapContext().getViewPort();
********************************************* NUEVA LÍNEA
// aquí obtienes la referencia al otro viewport de la otra vista
ViewPort vp2 <- TU OTRO VIEWPORT
*********************************************
if ((pixelRect.getWidth() < 3) && (pixelRect.getHeight() < 3))
{
if (vp.getExtent()!=null){
double factor = 1/MapContext.ZOOMINFACTOR;
double nuevoX = rect.getMaxX() -
((vp.getExtent().getWidth() * factor) / 2.0);
double nuevoY = rect.getMaxY() -
((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);
********************************************* NUEVA LÍNEA
vp2.setExtent(r);
*********************************************
}
}
else
{
vp.setExtent(event.getWorldCoordRect());
********************************************* NUEVA LÍNEA
vp2.setExtent(event.getWorldCoordRect());
*********************************************
}
mapCtrl.getMapContext().clearAllCachingImageDrawnLayers();
// mapCtrl.drawMap(false);
}
La referencia a los correspondientes viewports la puedes pasar en el
constructor de tu herramienta, (por ejemplo).
Esto sería para el zoom-in, faltaría algo similar para desplazamiento y
para zoom-out, pero como ves, es muy sencillo y rápido de implementar.
Salut!
David Fernández Martínez wrote:
> Hola a todos
>
> Queríamos desarrollar para gvSIG una funcionalidad que permitiera
> visualizar dos vistas diferentes (o simplemente dos rasters
> diferentes) de forma que si en una realizo un desplazamiento o un zoom
> también se realice esta operación sobre la otra. La clave es que las
> dos vistas representen la misma zona geográfica. Sería algo parecido
> al comportamiento que tiene el localizador, pero que en ambas se
> visualice exactamente el mismo espacio geográfico.
>
> Habíamos pensado como posibilidad desarrollar una extensión que,
> teniendo previamente las dos vistas abiertas, vinculara de alguna
> forma la posición de una respecto de la otra.
>
> ¿Alguien podría orientarme en cómo efectuar esta vinculación? ¿Se
> podría hacer de otra forma?
>
> Muchas gracias
>
> --
> ----------------------------------------
> David Fernández Martínez
> fmdavid en gmail.com <mailto:fmdavid en gmail.com>
> ------------------------------------------------------------------------
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>
--
Jaume Dominguez Faus
Àrea de Software Lliure
Equip gvSIG
Iver TI
C. Salamanca, 52
46005 València
Telf: 902 25 25 40 Fax: 96 316 27 16
(Spain)
Más información sobre la lista de distribución gvSIG_desarrolladores