Differenze tra le versioni di "Disegnare un poligono su una MapView usando l'Oggetto "Figlio" DrawingArea"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Il Controllo grafico ''MapView'' mostra la mappa su una ''DrawingArea'', che è un Oggetto "Figlio" di un ''Panel'', "Figlio" a sua volta del Controllo ''MapView'': <FONT Siz...")
 
Riga 77: Riga 77:
 
  End
 
  End
  
 +
 +
==Parti da inserire per disegnare un Quadrato==
 +
Le parti di codice che, per disegnare un quadrato, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:
 +
Private Const <FONT Color=#B22222><B>QUADRATO As Byte = 5</b></font>
 +
 +
<FONT Color=gray>In questo caso va modificato anche il valore iniziale del cislo "FOR...NEXT":''</font>
 +
For t As Short = <FONT Color=#B22222><B>45</b></font> To 360 Step 360 / <FONT Color=#B22222><B>QUADRATO</b></font>
 +
 +
.Polygon([<FONT Color=#B22222><B>(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7])</b></font>])
 +
 +
==Parti da inserire per disegnare un Pentagono regolare==
 +
Le parti di codice che, per disegnare un Pentagono regolare, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:
 +
Private Const <FONT Color=#B22222><B>PENTAGONO As Byte = 5</b></font>
 +
 +
For t As Short = 0 To 360 Step 360 / <FONT Color=#B22222><B>PENTAGONO</b></font>
 +
 +
.Polygon([<FONT Color=#B22222><B>(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7]), (coord[0] + pol[8]), (coord[1] + pol[9])</b></font>])
  
 
==Parti da inserire per disegnare un Esagono regolare==
 
==Parti da inserire per disegnare un Esagono regolare==

Versione delle 12:48, 30 mag 2023

Il Controllo grafico MapView mostra la mappa su una DrawingArea, che è un Oggetto "Figlio" di un Panel, "Figlio" a sua volta del Controllo MapView:

MapView
 padre di un
Panel
 padre di una
DrawingArea

Pertanto, sarà possibile utilizzare tale DrawingArea per disegnare qualsiasi cosa, facendola apparire al di sopra della mappa.

Mostriamo di seguito il codice base per disegnare ogni volta nel punto, ove si è cliccato sulla mappa con il puntatore del mouse, un poligono [nota 1], che rimarrà visibile sulla mappa anche dopo l'inserimento di altri poligoni. Per inserire il disegno di un Esagono regolare sulla DrawingArea della MapView, bisogna cliccare con il tasto destro del mouse.
Per variare la dimensione dell'Esagono disegnato sulla DrawingArea della MapView, cambiare il valore della Costante "RAGGIO".

A seconda del tipo di poligono da disegnare sulla mappa bisognerà sostituire le parti punteggiate in rosso e in grassetto con i pezzi coerenti di codice proposti a seguire.

Private MapView1 As MapView
Private pn As Panel
Private mmpp As New MapPoint[]
Private Const RAGGIO As Single = 50.0
Private Const .........
Private coord As Single[]
Private pol As New Single[]


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", "http://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Map.Zoom = 14
   .Map.Center = New MapPoint(41.89018, 12.49230)
 End With

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

End

Public Sub MapView1_MouseUp()

 If Not Mouse.Right Then Return 

 Dim pt As New Point(Mouse.X, Mouse.Y)

' Si usa l'Oggetto "MapPoint" per garantire la coerenza del puntamento su un punto della mappa anche nel caso di spostamento o variazione dello zoom della mappa medesima:
 mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))

 Me.Caption = "Lat. " & Format(mmpp[mmpp.Max].Lat, "0.00000") &
              "  -  Lon. " & Format(mmpp[mmpp.Max].Lon, "0.00000")

 For t As Short = 0 To 360 Step 360 / .........
   pol.Push(RAGGIO * Cos(Rad(t)))
   pol.Push(RAGGIO * Sin(Rad(t)))
 Next

 MapView1.Refresh

End

Public Sub MapView1_Draw()

 Dim i As Integer

 With Paint
   .Begin(pn.Children[0])
   .Brush = .Color(Color.Yellow)
   .LineWidth = 2.5
   For i = 0 To mmpp.Max
     coord = [MapView1.Map.MapPointToPixelRel(mmpp[i]).X, MapView1.Map.MapPointToPixelRel(mmpp[i]).Y]
     .Polygon([.........])
   Next
  .Stroke
  .End
End With

End


Parti da inserire per disegnare un Quadrato

Le parti di codice che, per disegnare un quadrato, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:

Private Const QUADRATO As Byte = 5
In questo caso va modificato anche il valore iniziale del cislo "FOR...NEXT": 
For t As Short = 45 To 360 Step 360 / QUADRATO
.Polygon([(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7])])

Parti da inserire per disegnare un Pentagono regolare

Le parti di codice che, per disegnare un Pentagono regolare, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:

Private Const PENTAGONO As Byte = 5
For t As Short = 0 To 360 Step 360 / PENTAGONO
.Polygon([(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7]), (coord[0] + pol[8]), (coord[1] + pol[9])])

Parti da inserire per disegnare un Esagono regolare

Le parti di codice che, per disegnare un Esagono regolare, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:

Private Const ESAGONO As Byte = 6
For t As Short = 0 To 360 Step 360 / ESAGONO
.Polygon([(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7]), (coord[0] + pol[8]), (coord[1] + pol[9]), (coord[0] + pol[10]), (coord[1] + pol[11])])

Parti da inserire per disegnare un Eptagono regolare

Le parti di codice che, per disegnare un Eptagono regolare, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:

Private Const EPTAGONO As Byte = 7
For t As Short = 0 To 360 Step 360 / EPTAGONO
.Polygon([(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7]), (coord[0] + pol[8]), (coord[1] + pol[9]), (coord[0] + pol[10]), (coord[1] + pol[11]), (coord[0] + pol[12]), (coord[1] + pol[13])])

Parti da inserire per disegnare un Ottagono regolare

Le parti di codice che, per disegnare un Ottagono regolare, sostituiranno quelle punteggiate in rosso del codice generico, sopra mostrato, sono le seguenti:

Private Const OTTAGONO As Byte = 7
For t As Short = 0 To 360 Step 360 / OTTAGONO
.Polygon([(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7]), (coord[0] + pol[8]), (coord[1] + pol[9]), (coord[0] + pol[10]), (coord[1] + pol[11]), (coord[0] + pol[12]), (coord[1] + pol[13]), (coord[0] + pol[14]), (coord[1] + pol[15])])


Note

[1] Vedere anche la pagina: Disegnare in una DrawingArea un esagono regolare