[Gvsig_desarrolladores] Motor Grafico

Francisco José Peñarrubia fpenarru en iver.es
Vie Mayo 6 08:41:38 CEST 2005


Hola Martín.

Lo de pintar en una imagen y luego pegar esa imagen es una buena idea (nosotros la usamos :-)). Por varios motivos, 2 de los más importantes:
1.- puedes trabajar con threads para pintar y dejar que el usuario pueda seguir haciendo cosas y 
2.- pintar en una imagen es más rápido y te permite hacer más optimizaciones.

Pero siempre se pinta sobre una imagen que es igual al tamaño del control (el tamaño lo define la clase MapControl, que hereda de JComponent).

El zoom se hace con las clases que están dentro del paquete tools. Distinguimos entre lo que es el comportamiento (behavior)  de un tool y el resultado. Por ejemplo, hay varios tools que dibujan un rectángulo en pantalla (para seleccionar, para zoom, y cualquier otro que se le ocurra al usuario). Ese behavior lanza un evento de tipo RectangleEvent, que lo puede recibir una clase como ZoomInListenerImpl. Esta clase interpreta ese rectángulo que le llega y hace sus operaciones con el rectángulo. En este caso, modifica el extent del ViewPort para que en el siguiente repintado el zoom se corresponda con el que ha pedido el usuario.

Lo hemos hecho así porque de esta forma si alguien quiere implementar algo que necesite un rectángulo, o una polilinea, etc, solo se preocupa de crear una clase que reciba el evento que le interesa. Se pueden reaprovechar los behaviors. Sería el equivalente de la clase CRectTracker de VC++ (captura el ratón para que el usuario haga un rectángulo, y cuando termina, devuelve ese rectángulo).

El método que tiene la lógica de adaptar ese rectángulo que el usuario dibuja a la pantalla está en la clase ViewPort.setExtent(). (Dentro se llama a una función interna "calculateAffineTransform" que realiza la transformación afín correspondiente. Ojo, hablamos de transformación afín. (escalados, rotaciones y desplazamientos). NO estamos hablando aquí de proyecciones. Eso es otra historia.

Salu2, y esperamos que lo que hagas lo saques GPL ;-).

Francisco José Peñarrubia

IVER T.I. S.A.
Salamanca, 50
46005 Valencia
Tel: 963163400



  ----- Original Message ----- 
  From: Martin Rodriguez 
  To: gvsig_desarrolladores en runas.cap.gva.es 
  Sent: Thursday, May 05, 2005 9:48 PM
  Subject: [Gvsig_desarrolladores] Motor Grafico


  Hola,

  estoy implementado una aplicación para PDA, que permita visualizar ficheros mapas almacenados en formato .shp. Me gustaría saber cuál es la estrategía que habeis utilizado para realizar el zoom, yo por ahora lo único que he probado es ha dibujar el mapa completo, para ello dibujo el mapa sobre una imagen, y luego dibujo dicha imagen sobre un panel. Con esto intento ahorrar el tiempo de desplazar el mapa puesto que se reduce a desplazar la imagen sobre el panel, el problema viene ahora a la hora de hacer zoom, por ahora únicamente había utilizado un nivel de zoom, que lo realizaba duplicando el tamaño de la imagen, pero como es obvio esto consume muchisima memoria y no es aplicable.

  También necesitaría información sobre el tema de las escalas siempre trabajando en coordenadas UTM. Y me podeis pasar información sobre las transformacíones que usais para pasar de coordenadas UTM a coordenadas de pantalla, así como lo que realizais para que los mapa aparezcan centrados en pantalla.

  Cómo podeis ver es la primera vez que trabajo con esto, y estoy aun bastante perdio.

  Muchas gracias.

  Un saludo






  Martín Rodríguez Tendero

  Ingeniería Informática

  Email: marrdoten en hotmail.com

  Tlf: 658223890





------------------------------------------------------------------------------


  _______________________________________________
  gvSIG_desarrolladores mailing list
  gvSIG_desarrolladores en runas.cap.gva.es
  http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/mailman/private/gvsig_desarrolladores/attachments/20050506/4707598c/attachment.htm


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