Differenze tra le versioni di "Disegnare sulla MapView dei cerchi concentrici al punto ove si è cliccato con il puntatore del mouse"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Mostreremo di seguito un possibile codice, sufficientemente commentato, con il quale disegnare in sequenza temporale sulla ''MapView'' dei cerchi concentrici al punto ove si...")
 
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 2: Riga 2:
  
 
Se si clicca sulla ''MapView'' con il tasto <SPAN Style="text-decoration:underline">destro</span> del mouse, allora saranno disegnati in sequenza temporale i cerchi concentrici, e alla fine di tale effetto grafico resterà un puntino pieno rosso.
 
Se si clicca sulla ''MapView'' con il tasto <SPAN Style="text-decoration:underline">destro</span> del mouse, allora saranno disegnati in sequenza temporale i cerchi concentrici, e alla fine di tale effetto grafico resterà un puntino pieno rosso.
<BR>Se si clicca con il tasto <SPAN Style="text-decoration:underline">centrale</span> del mouse, allora i punti precedentemente disegnati sranno cacellati dalla superficie della ''MapView''.
+
<BR>Se si clicca con il tasto <SPAN Style="text-decoration:underline">centrale</span> del mouse, allora i punti precedentemente disegnati saranno cacellati dalla superficie della ''MapView''.
  
 
E' necessario attivare il Componente ''gb.map''.
 
E' necessario attivare il Componente ''gb.map''.
Riga 10: Riga 10:
 
  Private ct As Short
 
  Private ct As Short
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   With Me
 
   With Me
Riga 30: Riga 30:
 
   mmpp = New MapPoint[]
 
   mmpp = New MapPoint[]
 
   
 
   
  '''End'''
+
  End
 
   
 
   
'''Public''' Sub MapView1_MouseUp()
 
 
   
 
   
  <FONT Color=gray>' ''Se si clicca con il tasto centrale del mouse, sono disegnati sulla superficie della "MapView" dei cerchi concentrici al punto ove si è cliccato, e sono confermati anche gli eventuali punti precedentemente impostati:''</font>
+
Public Sub MapView1_MouseUp()
 +
 +
  <FONT Color=gray>' ''Se si clicca con il tasto destro del mouse, sono disegnati sulla superficie della "MapView" dei cerchi concentrici al punto ove si è cliccato, e sono confermati anche gli eventuali punti precedentemente impostati:''</font>
 
   If Mouse.Right Then  
 
   If Mouse.Right Then  
 
     Dim pt As Point
 
     Dim pt As Point
Riga 57: Riga 58:
 
   Endif  
 
   Endif  
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub MapView1_Draw()
+
  Public Sub MapView1_Draw()
 
   
 
   
 
   If mmpp.Count == 0 Then Return  
 
   If mmpp.Count == 0 Then Return  
Riga 87: Riga 89:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 17:04, 22 set 2023

Mostreremo di seguito un possibile codice, sufficientemente commentato, con il quale disegnare in sequenza temporale sulla MapView dei cerchi concentrici al punto ove si è cliccato con il puntatore del mouse.

Se si clicca sulla MapView con il tasto destro del mouse, allora saranno disegnati in sequenza temporale i cerchi concentrici, e alla fine di tale effetto grafico resterà un puntino pieno rosso.
Se si clicca con il tasto centrale del mouse, allora i punti precedentemente disegnati saranno cacellati dalla superficie della MapView.

E' necessario attivare il Componente gb.map.

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
' Imposta il centro della mappa all'inizio:
   .Map.Center = New MapPoint(44.407335, 8.918706)
 End With 

' Individua l'Oggetto "Figlio" della "MapView", che è un "Panel":
 pn = MapView1.Children[0]

' Crea un array di Oggetti "MapPoint" per memorizzare le coordinate geografiche di tutti i punti ove si è cliccato sulla mappa e conseguentemente per farli ridisegnare ogni volta sulla superficie della "MapView":
 mmpp = New MapPoint[]

End


Public Sub MapView1_MouseUp()

' Se si clicca con il tasto destro del mouse, sono disegnati sulla superficie della "MapView" dei cerchi concentrici al punto ove si è cliccato, e sono confermati anche gli eventuali punti precedentemente impostati:
 If Mouse.Right Then 
   Dim pt As Point
   Dim c As Short
   pt = New Point(Mouse.X, Mouse.Y)
' Memorizza le coordinate geografiche del punto ove si è cliccato sulla mappa:
   mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))
' Fornisce i dati per far disegnare dei cerchi concentrici in sequenza sulla mappa, mostrata dall'Oggetto "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 

' Se si clicca con il tasto centrale del mouse, i punti precedentemente disegnati sono cacellati dalla superficie della "MapView":
 If Mouse.Middle Then 
   mmpp.clear
   MapView1.Refresh
 Endif 

End


Public Sub MapView1_Draw()

 If mmpp.Count == 0 Then Return 
 
 Dim i As Integer

 With Paint
' Il disegno sarà possibile solo sull'Oggetto "Figlio" del "Panel" (a sua volta "Figlio" della "MapView"), che è una "DrawingArea":
   .Begin(pn.Children[0])
   .Brush = .Color(Color.Red)
' Disegna i punti precedentemente impostati sulla "MapView":
   For i = 0 To mmpp.Max - 1
' Si passano al Metodo ".Arc()" le coordinate geografiche memorizzate in precedenza per ciascun punto cliccato:
     .Arc(MapView1.Map.MapPointToPixelRel(mmpp[i]).X, MapView1.Map.MapPointToPixelRel(mmpp[i]).Y, 2, Rad(0), Rad(360), False)
     .Fill
   Next 
' Disegna il punto corrente (ossia l'ultimo) ove si è cliccato, passando al Metodo ".Arc()" le sue coordinate geografiche memorizzate:
   .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 
' Disegna i cerchi rossi concentrici:
     .Stroke
   Else 
' Disegna il puntino rosso finale:
     .Fill
   Endif 
   .End
 End With

End