vuott   12-01-2022, 04:03
#1
Hola,
en este mi siguiente programa, haciendo clic con el botón derecho del ratón, se dibujan secuencias temporales de círculos concéntricos en el punto donde se ha hecho clic.
Al final, quedará un punto rojo.
En cambio, al hacer clic con el botón central del ratón, los puntos previamente dibujados se borrarán.
Hay que activar el componente gb.map .

Código:
Private MapView1 As MapView
Private pn As Panel
Private mmpp As MapPoint[]
Private ct As Short

Public Sub Form_Open()
 
  With Me
    .W = Screen.AvailableWidth
    .H = Screen.AvailableHeight
    .Arrangement = Arrange.Fill
  End With
  With MapView1 = New MapView(Me) As "MapView1"
    .Map.AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
    .Map.Zoom = 14
' Establece el centro del mapa al principio:
    .Map.Center = New MapPoint(36.5139777, -6.2727421) ' ...Gades !  Consuli romano Shell antiquissima patria est !
  End With 

' Identifica el Objeto "Hijo" de la "Mapview", que es un "Panel":
   pn = MapView1.Children[0]
   
   mmpp = New MapPoint[]

End

Public Sub MapView1_MouseUp()
  
' Al hacer clic con el botón central del ratón, se dibujan en la superficie de la "Mapview" unos círculos concéntricos en el punto donde se ha hecho clic, y también se confirman los puntos previamente establecidos:
  If Mouse.Right Then 
    Dim pt As Point
    Dim c As Short
    pt = New Point(Mouse.X, Mouse.Y)
    mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))
' Provee los datos para hacer dibujar unos círculos concéntricos secuencialmente sobre el mapa mostrada por el Objeto "Mapview":
    For c = 28 DownTo 1 Step 3
      ct = c
      MapView1.Refresh
      Wait 0.1
    Next 
    Me.Text = Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") & "   " &
              Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000")
  Endif 
  
' Al hacer clic con el botón central del ratón, los puntos previamente dibujados son cacelados por la superficie de la "Mapview":
  If Mouse.Middle Then 
    mmpp.clear
    MapView1.Refresh
  Endif 
 
End

Public Sub MapView1_Draw()
  
  If mmpp.Count == 0 Then Return 
  
  Dim n As Integer
  With Paint
    .Begin(pn.Children[0])
    .Brush = .Color(Color.Red)
    For n = 0 To mmpp.Max - 1
      .Arc(MapView1.Map.MapPointToPixelRel(mmpp[n]).X, MapView1.Map.MapPointToPixelRel(mmpp[n]).Y, 2, Rad(0), Rad(360), False)
      .Fill
    Next 
    .Arc(MapView1.Map.MapPointToPixelRel(mmpp[mmpp.Max]).X, MapView1.Map.MapPointToPixelRel(mmpp[mmpp.Max]).Y, 2 * ct, Rad(0), Rad(360), False)
    If ct > 1 Then 
      .Stroke
    Else 
      .Fill
    Endif 
    .End
  End With
  
End
Última modificación: 12-01-2022, 04:06 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
gambafeliz   12-01-2022, 13:02
#2
Según tu explicación me encanta, es algo que me parece que tiene muchas utilidades practicas. Gracias

Y por cierto, Feliz Año Nuevo, amigo Vuott, espero que todo te vaya bien en lo personal. Saludos
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.