[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