Re: [Gvsig_desarrolladores] Comparación de dos vistas

David Fernández Martínez fmdavid en gmail.com
Mar Ago 21 11:49:53 CEST 2007


Muchas gracias.

Empezaré a probar siguiendo tus indicaciones.

El día 21/08/07, jaume domínguez faus <jaume.dominguez en iver.es> escribió:
>
> 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)
>
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>



-- 
----------------------------------------
David Fernández Martínez
fmdavid en gmail.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20070821/74b0c8eb/attachment-0001.htm


Más información sobre la lista de distribución gvSIG_desarrolladores