Newsgroup: it.comp.lang.visual-basic
Titolo: Rotazioni

Ciao,
sono io che non cerco bene oppure anche sotto .NET non è presente il 
supporto per la rotazione di controlli? Volendo ad esempio ruotare una 
label, come si fa?
Oppure, ambiente Graphics: methodo DrawEllipse. Possibile che gli assi 
dell'ellisse debbano essere per forza orizzontali e verticali? Non si 
può disegnare un ellisse con qualsiasi orientazione?
Marco / iw2nzm

 ha scritto nel messaggio
news:9DAsf.102365$65.29...@twister1.libero.it...

Sì, puoi farlo.
Quando ho visto come mi sono un po' pisciato dal ridere: in pratica non devi
ruotare l'oggetto da disegnare, devi ruotare tutto il mondo intorno:
' Salvati la posizione originale dell'universo!
Dim defaultMatrix As System.Drawing.Drawing2D.Matrix = g.Transform
' Creati il tuo universo parallelo...
Dim m As Matrix = New Matrix
' Distorcilo come vuoi...
m.RotateAt(Angle, X, Y)
' E gli fai credere che sia quello reale
g.Transform = m
' Qui disegna tutto quello che vuoi...
' ... ma poi rimetti le costellazioni e le galassie al loro posto!!!
g.Transform = defaultMatrix
m.Dispose()
Ciao

 m.Dispose()
ROTFL!
Domanda d'obbligo: queste procedure così intuitive si trovano raccolte 
da qualche parte? Web, libri, ecc...?
Ho un libro (Guida alla programmazione Visual Basic .NET di Bradley e 
Millspaugh) ma si ferma alle cose elementari. Forse su MSDN si trovano 
le informazioni ma spesso è difficile rintracciarle.
Non vorrei intasare il NG con domande la cui risposta può essere 
facilmente trovata con gli strumenti giusti... per cui chiedo consiglio :)
Ciao!
Marco / iw2nzm

 da qualche parte? Web, libri, ecc...?
Qualche anno fa avevo la mania dei libri: ne prendevo in continuazione.
Poi mi resi conto che il loro unico scopo finiva per essere quello di
evitare che la polvere si posasse sulle mensole e ho smesso.
Spesso queste cose le trovi su MSDN.
A volte non sono facili da trovare, ma con un po' di pratica si riesce
piuttosto bene a intuire se iniziare da MSDN o da google e quasi sempre
qualcosa salta fuori.
E poi ci sono i NG, dove se hai cercato discretamente bene, la tua domanda
risulterà così strana che nessuno ti saprà aiutare :)
(Nota che "nessuno ti saprà aiutare" non è sinonimo di "ho cercato bene").
Ciao

 ruotare l'oggetto da disegnare, devi ruotare tutto il mondo intorno:
A prima vista sembra folle, ma č il modo corretto (e correntemente
usato nella computer graphics) di fare le cose.
Questo perché non vengono usate coordinate cartesiane ma si usa un
sistema di coordinate omogenee in modo di consentire la 
rappresentazione di punti all'infinito e di rendere le 
trasformazioni geometriche (traslazioni, rotazioni, scalature, ecc) 
semplici moltiplicazioni tra matrici.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 semplici moltiplicazioni tra matrici.
Infatti proprio in questo momento mi sto leggendo alcuni articoli sulle 
matrici di trasformazione.... molto interessanti!
Approfitto per chiederti un consiglio (non strettamente legato al thread 
in verità).
Sto realizzando una sorta di gauge, un indicatore analogico. Ho già 
disegnato la corona di punti (per intenderci le tacchette dove si legge 
la misura) e un indice mobile che in funzione del valore assegnato, 
ruota e si posiziona sulla giusta tacchetta.
Funziona bene: ho usato la modalità double buffered per evitare sfarfallii.
Ora dovrei aggiungere i numeri sotto le tacchette (0, 10, 20, ecc...). 
No problem a usare .DrawString, ma non saprei come posizionare queste 
stringhe.
Vorrei che fossero centrate rispetto alle tacchette, naturalmente 
ragionando in coordinate polari. Ma non sapendo a priori quanto spazio 
occuperà la stringa come posso fare per centrarla? Che trucco si usa in 
questo caso?
Grazie!
Marco / iw2nzm

 usato nella computer graphics) di fare le cose.
Sě, sě, non sto criticando la logica che ci sta sotto, ma solo il metodo di
implementazione.
Forse, ma č solo una mia opinione, sarebbe stato piů chiaro se la matrice di
trasformazione fosse legata all'oggetto da disegnare/alla funzione di
disegno, e non al contesto grafico.
Che poi sotto il funzionamento resti lo stesso poco importa.
Ciao

 questo caso?
In realtà io non so nulla di computer graphics, conosco solo la teoria 
matematica che c'è dietro e quindi le ragioni di certe scelte.
Per quanto riguarda il tuo problema comunque c'è il modo di misurare le
dimensioni di una stringa conoscendo il font usato:
http://www.codeproject.com/vb/net/MeasureStrings.asp


 Che poi sotto il funzionamento resti lo stesso poco importa.
Perň la matrice di trasformazione č realmente legata al sistema di
riferimento e non all'oggetto da disegnare, pertanto sarebbe stato
piuttosto complesso fare come dici tu, in quanto l'oggetto avrebbe
dovuto avere un riferimento al sistema di coordinate per poter applicare
la trasformazione e si sarebbe dovuto salvare il vecchio sistema di
riferimento ed avrebbe dovuto ripristinarlo subito dopo "essersi 
disegnato".


 Ciao.
Grazie del link!
Marco / iw2nzm