Differenze tra le versioni di "Disegnare un mirino come cursore del mouse su una MapView"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "E' possibile disegnare un mirino come cursore del mouse, quando ci si sposta su una ''MapView'' e mostrare la latitudine e la longitudine corrispondente al centro del mirino....") |
|||
Riga 15: | Riga 15: | ||
Dim pn As Panel | Dim pn As Panel | ||
− | Me.Mouse = Mouse.Blank | + | With Me |
+ | .W = Screen.AvailableWidth | ||
+ | .H = Screen.AvailableHeight | ||
+ | .Arrangement = Arrange.Fill | ||
+ | .Mouse = Mouse.Blank | ||
+ | End With | ||
With MapView1.Map | With MapView1.Map | ||
Riga 48: | Riga 53: | ||
'''Public''' Sub MapView1_Draw() | '''Public''' Sub MapView1_Draw() | ||
− | Dim c, x, y, r | + | Dim c, x, y, r As Short |
− | |||
Dim po As Point = MapView1.Map.MapPointToPixelRel(mp) | Dim po As Point = MapView1.Map.MapPointToPixelRel(mp) | ||
Riga 71: | Riga 75: | ||
po.X = x + r * Cos(Rad(c)) | po.X = x + r * Cos(Rad(c)) | ||
po.Y = y + r * Sin(Rad(c)) | po.Y = y + r * Sin(Rad(c)) | ||
− | + | .MoveTo(po.X, po.Y) | |
− | + | <FONT Color=gray>' ''Per ridurre la lunghezza della "x" per i gradi 0, 90, 180 e 270 è necessaria questa sequenza: +n 0 -n 0 che si ottiene con il Coseno di c.'' | |
− | + | ' ''Per ridurre la lunghezza della "y" per i gradi 0, 90, 180 e 270 è necessaria questa sequenza: 0 -n 0 +n che si ottiene con il Coseno di c + 90.''</font> | |
− | + | .LineTo(x + (20 * Round(Cos(Rad(c)))), y - (20 * Round(Cos(Rad(c + 90))))) | |
− | + | .Stroke | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | . | ||
Next | Next | ||
.End | .End |
Versione delle 09:33, 16 apr 2021
E' possibile disegnare un mirino come cursore del mouse, quando ci si sposta su una MapView e mostrare la latitudine e la longitudine corrispondente al centro del mirino.
Si farà uso della "DrawingArea", Oggetto "Figlio" di un "Panel", "Figlio" quest'ultimo a sua volta dell'Oggetto "MapView":
MapView ⬇ padre di un Panel ⬇ padre di una DrawingArea
Mostriamo di seguito un codice esemplificativo:
Private mp As MapPoint = MapPoint(41.8903, 12.492255) Private DrawingArea1 As DrawingArea Public Sub Form_Open() Dim pn As Panel With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill .Mouse = Mouse.Blank End With With MapView1.Map .AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}") .Zoom = 15 ' Imposta il centro della mappa: .Center = mp End With ' Individua dapprima l'Oggetto "Figlio" della "MapView", che è un "Panel": pn = MapView1.Children[0] ' Quindi individua l'Oggetto "Figlio" del "Panel", che è una "DrawingArea": DrawingArea1 = pn.Children[0] End Public Sub MapView1_MouseMove() Dim pt As New Point(Mouse.X, Mouse.Y) Dim lat As Float = MapView1.Map.PixelToMapPointRel(pt).Lat Dim lon As Float = MapView1.Map.PixelToMapPointRel(pt).Lon mp = MapPoint(lat, lon) Me.Text = "Lat. " & Format(lat, "0.######") & " - Lon. " & Format(lon, "0.######") MapView1.Refresh MapView1.Map.Refresh End Public Sub MapView1_Draw() Dim c, x, y, r As Short Dim po As Point = MapView1.Map.MapPointToPixelRel(mp) With Paint ' Disegna sull'Oggetto "Figlio" del "Panel", che è una "DrawingArea", la stessa che la Classe "MapView" usa per mostrare la mappa: .Begin(DrawingArea1) .Brush = .Color(Color.DarkOrange) .LineWidth = 2.0 .Arc(MapView1.Map.MapPointToPixelRel(mp).X, MapView1.Map.MapPointToPixelRel(mp).Y, 50, 0, 360, False) .Arc(MapView1.Map.MapPointToPixelRel(mp).X, MapView1.Map.MapPointToPixelRel(mp).Y, 30, 0, 360, False) .Stroke .Brush = .Color(Color.Red) .Arc(MapView1.Map.MapPointToPixelRel(mp).X, MapView1.Map.MapPointToPixelRel(mp).Y, 1.5, 0, 360, False) .Fill r = 50 x = po.X y = po.Y For c = 0 To 360 Step 90 po.X = x + r * Cos(Rad(c)) po.Y = y + r * Sin(Rad(c)) .MoveTo(po.X, po.Y) ' Per ridurre la lunghezza della "x" per i gradi 0, 90, 180 e 270 è necessaria questa sequenza: +n 0 -n 0 che si ottiene con il Coseno di c. ' Per ridurre la lunghezza della "y" per i gradi 0, 90, 180 e 270 è necessaria questa sequenza: 0 -n 0 +n che si ottiene con il Coseno di c + 90. .LineTo(x + (20 * Round(Cos(Rad(c)))), y - (20 * Round(Cos(Rad(c + 90))))) .Stroke Next .End End With End