Disegnare sulla MapView dei cerchi concentrici al punto ove si è cliccato con il puntatore del mouse
Da Gambas-it.org - Wikipedia.
Versione del 11 gen 2022 alle 20:47 di Vuott (Discussione | contributi) (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...")
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 sranno 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