Oppure

Loading
04/03 23:45
nightwolf
grazie mille x il codice, però rimane sempre il problema dei 2 punti cardinali invertiti, non so è un problema di visual basic ma a me risultano invertiti, allego le foto
aaa
04/03 23:46
nightwolf
aaa
04/03 23:48
nightwolf
questa è l immagine con l errore
aaa
05/03 0:11
nightwolf
un altra domanda, qual'è il centro della bussola, perchè se metto una picturebox, 600;600 di dimensioni, la bussola dovrebbe stare al centro della picturebox, ma non avviene, se ne sta nel suo angolo a in alto a sinistra come l immagine che posto. anche perche la bussola nel mio progetto dovrebbe stare in un posto ben stabilito che è quello dove metto la picturebox.
aaa
05/03 0:27
nightwolf
questa è la mia schermata del mio progetto, e la bussola dovrebbe andare dove è contasseganta
Ultima modifica effettuata da nightwolf 05/03 13:02
aaa
05/03 17:31
Carlo
L'immagine che hai postato dove clicchi EST ed in alto al centro trovi W, è esatta se interpreti che quando clicchi EST vuoi che N vada ad EST, inaftti così è la N sta a 90° EST.
Se vuoi che quando clicchi EST al centro in alto vada la E, devi invertire i testi negli if come ti ho scritto sul rem (riga 1 e riga 13):

ElseIf Label1.Text = "EST" Then ' oppure WEST
            If avanzamento = 90 Then Exit Sub
            destinazione = 90
            ' sceglie la direzione di rotazione
            If avanzamento > 90 Then direzione = -vel Else direzione = vel
            timer1.Enabled = True
        ElseIf Label1.Text = "SUD" Then
            If avanzamento = 180 Then Exit Sub
            destinazione = 180
            ' sceglie la direzione di rotazione
            If avanzamento > 180 Then direzione = -vel Else direzione = vel
            timer1.Enabled = True
        ElseIf Label1.Text = "WEST" Then ' oppure EST
            If avanzamento = 270 Then Exit Sub
            destinazione = 270
            ' normalizza
            If avanzamento = 0 Then avanzamento = 360 ' forza la rotazione antioraria se si è a nord
            ' sceglie la direzione di rotazione
            If avanzamento > 180 Then direzione = -vel Else direzione = vel
            timer1.Enabled = True
        End If


Postato originariamente da nightwolf:

un altra domanda, qual'è il centro della bussola, perchè se metto una picturebox, 600;600 di dimensioni, la bussola dovrebbe stare al centro della picturebox, ma non avviene, se ne sta nel suo angolo a in alto a sinistra come l immagine che posto. anche perche la bussola nel mio progetto dovrebbe stare in un posto ben stabilito che è quello dove metto la picturebox.


La dimensione della picturebox è ininfluente l'immagine viene sempre disegnata a partire dallo spigolo in alto a sinistra senza ridimensionamento.
Per procedere correttamente con il codice proposto, devi decidere la dimensione della picturebox e poi creare l'immagine bussola.png di conseguenza.

Il codice è anche modificabile per fare in modo che l'immagine sia disegnata al centro della picturebox.
Bisogna usare il size della picturebox per modificare le coordinate di disegno su e.Graphics.TranslateTransform.

Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
        e.Graphics.TranslateTransform(cX + PictureBox1.Width / 2 - cX, cY + PictureBox1.Height / 2 - cY) ' posizione centro
        e.Graphics.RotateTransform(avanzamento) ' rotazione in gradi
        e.Graphics.DrawImage(bussola, -cX, -cY, dX, dY) ' dimensione 100%
End Sub


la picturebox deve avere una larghezza altezza pari, se non vuoi che translate trasform posizioni l'mmagine a mezzo pixel, degradandola
Ultima modifica effettuata da Carlo 05/03 18:14
in programmazione tutto è permesso
05/03 21:09
Thejuster
se può interessarti ho fatto proprio un controllo " A Gratis" :rotfl:

Normalmente chiederei soldi per sviluppare controlli come questi ma dettagli.


youtu.be/…

lo sfarfallio della lancetta quando muovo il quadrante completo (gli ultimi pulsanti in basso ) è voluta apposta.
Non sò, mi piaceva così :rotfl:

ovviamente e ridimensionabile in modo perfetto.
ovvero che mantiene le proporzioni.



/// <summary>
/// Ridimensiona mantenendo proporzione pari
/// </summary>
/// <param name="value">Dimensione attuale</param>
/// <returns>Restituisce dimensione corretta</returns>
private int FixSize(int value)
{
    if(value % 2 == 0) { return value; }
    else { if ((value + 1) % 2 == 0) { return value + 1; } return value - 1; }
}



mentre un enumeratore per le posizioni.
infatti basta fare tipo


 private void button6_Click(object sender, EventArgs e)
 {
     bussola1.Direzione = CtrBussola.Bussola.Direction.Sud;
 }



che il quadrante ruota a sud. (Seconda fila dei pulsanti nel video)
Mentre per la 3° fila

semplicemente

bussola1.SetSud();



o meglio ancora modificabile direttamente dalle proprietà
Ultima modifica effettuata da Thejuster 05/03 21:17
mire.forumfree.it/ - Mire Engine
C# UI Designer
05/03 22:55
nightwolf
grazie mille, lo terrò in considerazione

Postato originariamente da Thejuster:

se può interessarti ho fatto proprio un controllo " A Gratis" :rotfl:

Normalmente chiederei soldi per sviluppare controlli come questi ma dettagli.


youtu.be/…

lo sfarfallio della lancetta quando muovo il quadrante completo (gli ultimi pulsanti in basso ) è voluta apposta.
Non sò, mi piaceva così :rotfl:

ovviamente e ridimensionabile in modo perfetto.
ovvero che mantiene le proporzioni.



/// <summary>
/// Ridimensiona mantenendo proporzione pari
/// </summary>
/// <param name="value">Dimensione attuale</param>
/// <returns>Restituisce dimensione corretta</returns>
private int FixSize(int value)
{
    if(value % 2 == 0) { return value; }
    else { if ((value + 1) % 2 == 0) { return value + 1; } return value - 1; }
}



mentre un enumeratore per le posizioni.
infatti basta fare tipo


 private void button6_Click(object sender, EventArgs e)
 {
     bussola1.Direzione = CtrBussola.Bussola.Direction.Sud;
 }



che il quadrante ruota a sud. (Seconda fila dei pulsanti nel video)
Mentre per la 3° fila

semplicemente

bussola1.SetSud();



o meglio ancora modificabile direttamente dalle proprietà
Ultima modifica effettuata da nightwolf 05/03 22:56
aaa