[Gvsig_desarrolladores] problema con setScaleView

Francisco José Peñarrubia fpenarru en gmail.com
Mar Oct 2 09:58:47 CEST 2007


Hola Manuel.

Yo probaría el camino de los listeners:

- Crea un listener que haga lo que tu quieres y luego se borre de la 
colección de listeners.

Si quieres hacer algo cuando el mapcontrol esté visible, crea un 
ComponentListener.
Si quieres hacer algo cuando el mapcontext termine de dibujarse, o antes 
de que empiece a dibujarse, pero con el viewPort ya calculado (con 
imageSize correcto), crea un listener que implemente
LayerDrawingListener
y añádelo al mapContext con el método addLayerDrawingListener.

Los eventos que saltan son antes de pintar una capa, después de 
pintarla, antes de pintar los gráficos y después de pintar los gráficos. 
Antes de pintar la primera capa, fijas tu nuevo extent y debería 
funcionar. Para los que han usado MapObjects, les sonará el sistema.

Saludos.

Fran.


Manuel de la Calle Alonso escribió:
> Muchas gracias por la ayuda!!!
> Si no me equivoco ese código es el de la extensión centerToPoint, 
> ¿no?, de hecho uso ese método primero y luego intento seleccionar un 
> escala por tanto lo que necesito es que
> pasando una escala se actualize el extent, vamos en concreto necesito 
> el método setScaleView(long scale).
> Otra idea sería calcular el extent a partir de la escala y luego 
> actualizarlo de la manera que hace este método que me has mandado, pero
> he visto que setScaleView para hacer eso necesita el tamaño de la 
> imagen del viewport y en el momento que yo intento
> actualizar la escala eso es nulo, por eso no me funciona el 
> setScaleView, supongo que eso deja de ser nulo cuando se ha pintado
> completamente la imagen, ¿Puedo saber cuando es ese momento?. ¿Hay 
> algún método por ahí que calcule la escala a partir de un extent?
>
> Un saludo y muchas gracias de nuevo.
>
>
>
> On 10/2/07, *Vicente Caballero Navarro* <vicente.caballero en iver.es 
> <mailto:vicente.caballero en iver.es>> wrote:
>
>     Hola Manuel.
>
>     Te paso un trozo de código con el que puedes centrar la vista en
>     un determinado punto y mantener el extent, a partir de esto puedes
>     probar a cambiar el extent como quieras:
>
>     *private void zoomToCoordinates(Point2D center) throws Exception {
>            try{
>             Rectangle2D oldExtent =
>     mapControl.getViewPort().getAdjustedExtent();
>             double oldCenterX = oldExtent.getCenterX();
>             double oldCenterY = oldExtent.getCenterY();
>           
>             double movX = center.getX()-oldCenterX;
>             double movY = center.getY()-oldCenterY;
>             double upperLeftCornerX = oldExtent.getMinX()+movX;
>             double upperLeftCornerY = oldExtent.getMinY()+movY;
>             double width = oldExtent.getWidth();
>             double height = oldExtent.getHeight();
>             Rectangle2D extent = new
>     Rectangle2D.Double(upperLeftCornerX, upperLeftCornerY, width, height);
>             mapControl.getViewPort().setExtent(extent);
>            }catch (NumberFormatException e) {
>                throw new Exception();
>            }
>
>         }*
>
>
>
>     Manuel de la Calle Alonso escribió:
>>     Hola buenas, tengo un problemita haciendo unas cosas en un plugin
>>     y no sé muy bien como hacer, os cuento.
>>     El plugin abre un proyecto, luego lo centra en un punto y después
>>     debe ponerlo en la escala adecuada. En el método
>>     execute del plugin hago:
>>
>>
>>     execute() {
>>     //LEO PROPIEDADES
>>
>>     //ABRO EL PROYECTO
>>
>>     //CENTRO EN UN PUNTO
>>
>>     //PONGO LA ESCALA ADECUADA PARA OBTENER UN EXTENT
>>     .....
>>     MapContext mapa = mapControl.getMapContext ();
>>     mapa.setScaleView(escala);
>>     .....
>>     }
>>
>>     Al hacer eso, he visto que no se refresca la escala, parece ser
>>     que porque en el método setScaleView si es nulo el
>>     tamaño de la imagen, parece que no se refresca
>>
>>     viewPort.getImageSize()
>>
>>     ¿En qué momento deja de ser nulo el ImageSIze del viewport?
>>     ¿Cómo puedo saber cuando se ha terminado de pintar para poder
>>     hacer el setScaleView?
>>     ¿Hay alguna forma alternativa de poner el mapa en la escala?
>>
>>     Un saludo y muchas gracias por la ayuda
>>
>>     ------------------------------------------------------------------------
>>
>>     _______________________________________________
>>     gvSIG_desarrolladores mailing list
>>     gvSIG_desarrolladores en runas.cap.gva.es
>>      <mailto:gvSIG_desarrolladores en runas.cap.gva.es>
>>     http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>>       
>     Un saludo.
>
>     -- 
>     Vicente Caballero Navarro
>     Grupo desarrollo gvSIG.
>     IVER TI S.A.
>     C/ Lérida, 20
>     46005-Valencia
>     Tlf.+34963354983
>
>     www.iver.es <http://www.iver.es>
>     www.gvsig.com <http://www.gvsig.com>
>
>
>     Este mensaje y sus archivos son confidenciales. No está permitida
>     su reproducción o distribución sin la autorización expresa de
>     "IVER Tecnologías de la Información". Si usted no es el
>     destinatario previsto, queda desautorizado cualquier uso, acceso o
>     copia de este mensaje. Si ha recibido este mensaje por error, por
>     favor bórrelo e infórmenos por esta misma vía.
>
>     _______________________________________________
>     gvSIG_desarrolladores mailing list
>     gvSIG_desarrolladores en runas.cap.gva.es
>     <mailto:gvSIG_desarrolladores en runas.cap.gva.es>
>     http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>   


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