Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

.NET applicato all'aeronautica [2]

Finalmente ho raggiunto una versione mediamente stabile del mio piccolo MedViewer.
Med sta per Mediterranea Airlines
Viewer sta per...beh, per viewer

Uno screenshot l'ho pubblicato su http://www.igordamiani.it/Immagini/med_viewer_1.jpg

L'obiettivo (raggiunto) è quello di aver creato un bel visualizzatore dei piani di volo di Mediterranea. Cos'è un piano di volo? E' un file TXT come questo che riporta aeroporto di decollo e di arrivo, i punti intermedi, più tutta una serie di dati/informazioni importanti per il volo (carburante richiesto, distanze, tempi e rotta da rispettare, note, etc.). Non mi piace leggere un TXT di questo tipo con il blocco note (troppo strutturato, troppo ricco di informazioni per essere lasciato come semplice testo), perciò mi sono costruito un software che estrapola le informazioni e le impagina sul Windows Form di prima. Inoltre, è piuttosto interattivo: permette di ricalcolare distanze e tempi di salita/discesa, tempi di percorrenza, etc. etc.
Il punto forte è la visualizzazione grafica del percorso, mostrando: partenza, arrivo, waypoint, distanze in scala. Mi sono divertito dando la possibilità di ruotare, di fare il pan della mappa, di zoomare, etc. Mi chiedo perchè non venga usato un bel XML al suo posto, sarebbe una chicca, e renderebbe il mio lavoro quasi inutile!

Qualche chicca tecnica? Sviluppato in VB.NET, senza alcun blocco Try-Catch
Mi è piaciuto come ho giocato con le proprietà Dock e Anchor della Windows Forms. Ho usato molto TimeSpan, Font, Brush, l'oggetto Graphics (GDI). La fase successiva è quella di interfacciarmi con i files di Flight Simulator (se possibile), così da poter ricavare tutta una serie di informazioni piuttosto utili e rendere ancora più fruibile il tutto.

Qui sotto riporto un po' di pezzi di codice VB.NET sul namespace System.Drawing. Non fate copy&paste, sicuramente così com'è non funziona di sicuro. Però magari può servire come spunto per qualcuno!

'Il codice non è funzionante così com'è
'Ho estrapolato le linee di codice più interessanti
'riguardanti GDI
Dim gr As Graphics
gr = 
Me.picMap.CreateGraphics
'Cancello
gr.Clear(Color.LightGoldenrodYellow)

'Zoom e rotazione sull'oggetto gr
If Me.barZoom.Value > 0 Then
    
gr.ScaleTransform(Me.barZoom.Value, Me.barZoom.Value)
End If
gr.RotateTransform(Me.barRotate.Value)
'Pan in base alla scrollbar orizzontale e verticale
If Translate Then
    
gr.TranslateTransform(Me.ClientSize.Width / 2 - Me.srcOriz.Value, Me.ClientSize.Height / 2 - Me.srcVert.Value)
End If

'esempio: in base a tutti i checkbox messi sul Windows Form,
'disegno gli elementi che vuole l'utente
'Fly è un oggetto FlyPoint (classe scritta da me)
Private myBrush As New SolidBrush(Color.Black)
Private myFontDist As New Font("Tahoma", 10, FontStyle.Italic, GraphicsUnit.Pixel)
If Me.chkDistance.Checked = True Then
    
'distanza
    
gr.DrawString(Fly.Distance.ToString & " NM", myFontDist, myBrush, (x + prec.X) / 2 - 20, (y + prec.Y) / 2 - 20)
    
'disegno un ellisse nel punto centrale
    
x2 = ((x + prec.X) / 2) - 1
    y2 = ((y + prec.Y) / 2) - 1
    gr.DrawEllipse(
New Pen(Color.Beige), x2, y2, 2, 2)
End If
'linea tra un waypoint e l'altro
'con checkbox ON/OFF
If Me.chkDrawRoute.Checked = True Then
    
'gr.DrawLine(New Pen(COLOR_ROUTE), 0, 0, x, y)
    
gr.DrawLine(New Pen(COLOR_ROUTE, WIDTH_LINE), x, y, prec.X, prec.Y)
End If

'Sub che disegna una griglia sul Windows Form
Private Sub DrawGrid()
    
Dim blackPen As New Pen(COLOR_GRID, 1)

    
Dim var As Integer
    For 
var = 10 To Me.Width Step 50
        
'Disegno le linee verticali
        
gr.DrawLine(blackPen, var, gr.RenderingOrigin.X, var, Me.Height)
    
Next
    For 
var = 10 To Me.Height Step 50
        
'Disegno le linee orizzontali
        
gr.DrawLine(blackPen, gr.RenderingOrigin.Y, var, Me.Width, var)
    
Next
End Sub

Fra poco pubblicherò la prima release: a voi non frega nulla, ma spero che nella community di piloti virtuali venga accolto bene!

powered by IMHO 1.2

Print | posted on giovedì 16 giugno 2005 19:40 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET