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...") |
|||
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 | + | <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''. |
Versione delle 20:48, 11 gen 2022
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 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: 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