Autor Tema: Programación gráfica y coordenadas  (Leído 8397 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Programación gráfica y coordenadas
« en: Noviembre 02, 2011, 10:40:30 am »
Buenos días a todos !!! esta vez quiero tocar un tema en el cual estoy "un poco" desorientado, y es, a grandes rasgos, todo lo que tenga que ver con programación de gráficos, coordenadas, zoom, acercamientos, clicks en imágenes dibujadas en tiempo de ejecución, etc.
Pero para que tengan una idea, me voy a remitir a un ejemplo:
Tengo un mapa, que coloco en un formulario, y hago click en el mismo, y marco un punto allí (coordenada), guardo esas coordenadas en donde sea (tabla, txt, etc), y luego recupero esa coordenada y muestro ese punto. Hasta allí todo joya, genial y de lujo; but (pero), el problema se presenta cuando cambio de monitor, ya sea o mas chico o mas grande, ya que las coordenadas que guardo son absolutas a la pantalla y con el simple método de posicionamiento del cursor, a lo cual, NO debería ser así.
No se si me explico, pero subo una imagen a modo de ejemplo:


Como podrán ver, hay un punto marcado (el autito de policía), que aparece EN EL RÍO!!! y es porque al redimensionar la ventana, se cambió la posición, y el punto quedó fijo, sin moverse. Creo que la solución sería jugar con las coordenadas a niveles de fórmulas matemáticas u otros algoritmos.
Espero hayan entendido el cuestionamiento, sino, voy a subir mas imágenes (o el proyecto) para que lo entiendan, ya que es algo que rompe un poco el esquema de programación al que estamos acostumbrados.

Gracias y saludos a todos!!
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Programación gráfica y coordenadas
« Respuesta #1 en: Noviembre 02, 2011, 12:53:30 pm »
Hola creo que deberias buscar una función que es relativa a la pantalla  no se si era TwipsPerPixel o algo así seguramente leandro te dará la posta.
Suerte!!!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #2 en: Noviembre 02, 2011, 02:14:00 pm »
Genial! consultémosle al amigo Leandro entonces!
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Programación gráfica y coordenadas
« Respuesta #3 en: Noviembre 02, 2011, 03:37:29 pm »
HOLA!!!

Lo que haria en tu caso seria lo siguiente...

Usaria los eventos MouseDown Y MouseUp (Suponiendo que no lo tenga tu control usa MouseMove)

Para guardar la X e Y del Click.

Ese sera un numero que no cambie seguramente...

Espero que te sirva.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #4 en: Noviembre 02, 2011, 05:14:10 pm »
Mi estimado @79137913, es así justamente como lo hago, y te lo muestro a continuación:
Código: (vb) [Seleccionar]
Call GetCursorPos(CURSOr)
    Call ScreenToClient(picMapa.hwnd, CURSOr)
    With Me.shpPoint
        Me.lblY.Caption = CURSOr.Y - (.Height / 2)
        Me.lblX.Caption = CURSOr.X - (.Width / 2)
    End With
    With LineX
      .X1 = picMapa.ScaleLeft
      .X2 = picMapa.ScaleLeft + picMapa.ScaleWidth
      .Y1 = CURSOr.Y
      .Y2 = CURSOr.Y
      .Visible = True
   End With
   With LineY
      .X1 = CURSOr.X
      .X2 = CURSOr.X
      .Y1 = picMapa.ScaleTop
      .Y2 = picMapa.ScaleTop + picMapa.ScaleHeight
      .Visible = True
   End With

Pero insisto en la aclaración, eso solo guarda posiciones absolutas a la pantalla.
« última modificación: Noviembre 06, 2011, 09:06:14 pm por xkiz ™ »
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #5 en: Noviembre 02, 2011, 06:53:35 pm »
Hola lo mejor es trabajar en vbPixels, o bien multiplicar por Screen.TwipsPerPixelX o Screen.TwipsPerPixelY  dependiendo el caso.

no te puedo dar un ejemplo ahora pero si tenes dudas despues esta noche vemos algun ejemplo.

Saludos.

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #6 en: Noviembre 02, 2011, 08:59:05 pm »
Perfecto Leandro, gracias, te lo agradecería.
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #7 en: Noviembre 02, 2011, 11:22:17 pm »
podrías subir el code o mostrar donde falla, asi te puedo orientar.

Saludos.

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #8 en: Noviembre 04, 2011, 06:34:26 am »
Si Leandro, estoy intentando subir el proyecto completo, ya que sería interesante mostrarle a todos ustedes, ya que si bien posee un módulo de datos (abm), también cuenta , como mencioné, un módulo gráfico (mapa), con lo cual rompe con el esquema clásico de programación al que estamos acostumbrados,  y sería espectacular compartir ese trabajo.
En fin, tal vez abra otro tema para explicar en principio de que se trata, xq si solo "pregunto" como se hace tal cosa, no tiene sentido. Insisto, me gustaría también tratar de encontrarle entre todos, la verdadera potencia gráfica de nuestro tan amado vb.

Saludos.
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #9 en: Noviembre 04, 2011, 06:37:52 am »
Estoy trabajando en un programa de delivery, en donde uso las imagenes de googlemap, (pude haber usado las api de googlemap, pero me pidieron que el programa tambien funcionara sin estar conectado a internet, asi que baje las imagenes de la ciudad y con eso alimento el mapa). En el programa trabajo todo con pixels y no importa si la ventana la redimencionan, el tamaño del mapa es siempre el mismo 1024x768 (12 tiles), ¿ tu haces lo mismo, mantienes el tamaño del mapa siempre igual, o tambien lo redimensionas junto con la ventana ?, por que a lo mejor ahi tienes el problema de desface de coordenadas.

Aqui te dejo lo que hago con el mapa.



http://www.4shared.com/file/BOti_drY/mapa.html

Al principio el programa te va a cargar las 12 imagenes necesarias para poder ver un mapa, (debes estar conectado a internet),  pero van a quedar guardadas en la carpeta del programa, para poner una flecha has click en cualquier lugar del mapa, luego con las flechas te mueves, tambien puedes maximizar la ventana, y la flecha permanece en el mismo lugar

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #10 en: Noviembre 04, 2011, 06:48:57 am »
Hola @Virgil, exactamente lo que tú dices debería hacer el sistema, cargar los puntos geográficos, señalar en el mapa, guardar la ubicación, y luego reflejarlos al consultar las capas.
El inconveniente se presenta en que se debería poder hacer ZOOM y MOVER el mapa (cuando está ampliado), y es así cuando se "corren" los puntos marcados, lo mismo al cambiarse de monitor. Supuse también que lo ideal debería ser utilizar las API de Google Maps, y si te fijas en la imagen que subí al inicio de este tema, verás que es un mapa hecho a mano (lo calqué en Flash  :o ) , y mas o menos refleja el espíritu del proyecto.

Saludos.
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #11 en: Noviembre 04, 2011, 07:10:16 am »
Lo ideal es que subas el codigo de tu mapa, para revisarlo, pero en el programa utilizo un picturebox para contener al mapa y mis coordenadas 0,0 es la esquina superior izquierda del picturebox, asi al hacer click se hace click sobre el mapa y no sobre la pantalla, y tu en tu codigo de ejemplo capturas la posicion del cursor sobre la pantalla, y al hacer zoom ¿que haces ?, utilizas un factor, digamos un 10% cada vez que incrementas el zoom, por que ese mismo factor deberias aplicarlo a la posicion del cursor, en mi programa es mas facil, por que parto con un zoom de 17, y la primera imagen es x=40456 y=78227, si quiero un zoom de 18 multiplico por 2, o si quiero zoom de 16 divido por 2, y esos valores se los mando a googlemap y el me manda mis 12 imagenes necesarias para construir el mapa y el tamaño del mapa se mantiene constante en 1024x768

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #12 en: Noviembre 04, 2011, 07:14:38 am »
Ok Virgil, subiré en el transcurso del día, el proyecto completo, mas la explicación del mismo.
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #13 en: Noviembre 05, 2011, 12:26:31 am »
Si quieres usar mi programa para ver la ciudad de Formosa cambia en el procedimiento initmap
la linea del setposmap

Código: (vb) [Seleccionar]
'formosa
SetPosMap 44359, 75420, False

Si quieres el mapa y no la imagen satelital cambia las lineas en el procedimiento paintmap

Código: (vb) [Seleccionar]
'satelite
'cPiece = "Sat_x=" & m_Mapa(i).x & "y=" & m_Mapa(i).y & "zoom=" & m_nMapZoom & ".jpg"
       
'mapa
cPiece = "Map_x=" & m_Mapa(i).x & "y=" & m_Mapa(i).y & "zoom=" & m_nMapZoom & ".png"

Código: (vb) [Seleccionar]
'satelite
'cUrl = "http://khm0.google.com/kh/v=94&x=[X]&y=[Y]&z=[Z]&s=galileo"

'mapa
cUrl = "http://mt0.google.com/vt/lyrs=m@161000000&hl=es&x=[X]&y=[Y]&z=[Z]&s=Galileo"

Para poder ver imagenes png, vas ha tener que cambiar LoadPicture por LoadPicturePlus
http://mvps.org/emorcillo/en/code/vb6/loadimagegdip.shtml
« última modificación: Noviembre 05, 2011, 12:33:40 am por Virgil Tracy »

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Programación gráfica y coordenadas
« Respuesta #14 en: Noviembre 05, 2011, 08:56:01 pm »
Cuando buscaba informacion para mi programa encontre esta pagina que muestra cualquier lugar geografico ( mapa o satelital ) con solo darle la latitud y la longitud, tambien viene el codigo fuente

http://pallit.lhi.is/bigice/bigpic.html

Formosa

Latitud : -26.124463
Longitud : -58.251572
Zoom : 14
Numero imagenes horizontales : 7
Numero imagenes verticales : 6
Tipo mapa : a gusto del usuario ( mapa o satelite )