Autore Topic: Ruotare un quadrato disegnato in una DrawingArea  (Letto 542 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.303
  • Ne mors quidem nos iunget
    • Mostra profilo
« Ultima modifica: 13 Agosto 2020, 23:02:48 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #1 il: 03 Ottobre 2015, 00:58:56 »
Il discorso è sempre quello della rotazione della scritta.
Se non si comprende che rotate funziona come un vortice non si capisce come ruotare le cose disegnate.
Tutto dipende da dove posizioni il vortice nel disegno e il disegno rispetto al vortice.
L'esempio postato da Jesús Guardón non ho avuto ancora tempo di studiarlo, quindi non so se quanto qui ho detto è mera ripetizione.
Comunque se serve posto un adattamento del codice del testo che agisce su un rettangolo rispetto al centro del cerchio. Li parlo di quadrato perchè così avevo iniziato ma si capiva poco e ho optato per un rettangolo.
Devo essere impazzito è tardissimo, vado a dormire.
 :ciao:  :sleepy:
Ps: Se glielo mandi digli che è un adattamento di altro codice altrimenti pensa che sono ancora più scemo di...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.303
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #2 il: 03 Ottobre 2015, 15:11:21 »
Un membro del forum spagnolo ha voluto apportare qualche modifica al tuo codice. Puoi vederlo nella pagina sopra riportata in collegamento.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #3 il: 04 Ottobre 2015, 12:22:11 »
Un membro del forum spagnolo ha voluto apportare qualche modifica al tuo codice. Puoi vederlo nella pagina sopra riportata in collegamento.
Ciao vuott:-[
scusa tanto se rispondo con così colpevole ritardo, ma come sai il fine settimana il gran capo da tempi immemorabili mi mette di corvè.
Ti chiedo di essere così gentile di rispondere a Shell da parte mia ringraziandolo tantissimo per le dritte sul codice, in effetti ho grosse difficoltà con lo spagnolo che credo di comprendere e invece...  :rolleyes: poi era tardi e il mio cervello era già andato a dormire altrimenti avrei postato direttamente l'esempio del testo (xmuno parlava di testo e di rettangolo) e non avrei cercato di peggiorare ulteriormente il già carente codice.
Digli per favore di scusarmi che appena posso posto un esempio più valido (spero) tenendo conto dei suoi molto apprezzati suggerimenti e che siccome nessuna buona azione deve rimanere impunita  ;D finirà negli autori dell'esempio  :P
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #4 il: 04 Ottobre 2015, 16:12:54 »
Dopo aver apportato i cambiamenti suggeriti se non metto sPos = “Center” nella Sub Open la finestra mi si presenta così  :rolleyes:
Puoi chiedere se succede anche a Shell?
Attualmente uso la 3.7.1
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.303
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #5 il: 04 Ottobre 2015, 16:23:32 »
Puoi chiedere se succede anche a Shell?
Fatto.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #6 il: 04 Ottobre 2015, 16:29:10 »
Puoi chiedere se succede anche a Shell?
Fatto.
Grazie  :-*

...Però non gliel'hai detto che ho apprezzato i suoi suggerimenti  >:(
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.303
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #7 il: 04 Ottobre 2015, 18:01:41 »
...Però non gliel'hai detto che ho apprezzato i suoi suggerimenti 
...aggiunto pure questo.   
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #8 il: 05 Ottobre 2015, 15:25:53 »
Alla luce delle nuove conoscenze offerte da vuott qui, qui e qui e da Shell della comunità Spagnola posto a seguire il codice per una nuova versione di Ruota Testo.
Unica cosa, sarà la febbre, io non riesco a capire come possa il disegno partire bene se non conosce la sua posizione. Infatti Resize, che viene lanciato all'apertura, attiva il disegno

Sono d'accordo con Shell è un vero peccato non riuscire a comunicare facilmente per colpa della Babele europea, io ho già grande difficoltà a capire la programmazione in Italiano  :'(

Nota: In una Form di circa 600x600 poniamo una DrawingArea denominata da e quattro pulsanti (Button) con le seguenti proprietà:
In Group di tutti e quattro scriviamo Posizione.
In Text scriviamo rispettivamente Centro, Testa, Coda, Esterno.
In Tag scriviamo rispettivamente 0, 1, 2, 3.
Agendo sui tasti freccia vedremo la rotazione il cui fulcro è il centro del disegno.
Codice: [Seleziona]
' Gambas class file

'' Alla luce delle nuove conoscenze offerte da vuott e Shell della comunità Spagnola ecco una nuova versione
'' della rappresentazione di come agisce la rotazione del testo in un'area di disegno.
'' Dimostra che la rotazione è data dai valori presenti nei metodi Traslate relativi
'' alle misure dell'area di disegno e a quelle del testo.
'' E' come se il fulcro di Translate agisse da vortice, a seconda di dove si pone
'' nel vortice il testo ruoterà.   
'' Occorre disegnare la drawingarea denominata da e quattro button con queste proprietà:
'' Group: Posizione (per tutti e quattro i button)
'' Text: Rispettivamente Centro, Testa, Coda, Esterno
'' Tag: Rispettivamente 0, 1, 2, 3
'' NOTA: Il testo ruota agendo sulle frecce giù, su, destra, sinistra
''       Creato con Gambas3 3.7.1

Private fRaggio As Float  ' Memorizza la lunghezza del raggio del cerchio entro cui ruota la scritta.
Private xArc As Float     ' Memorizza il centro del cerchio.
Private yArc As Float     ' Idem
Private x As Float        ' Memorizza l'inizio della scritta.
Private y As Float        ' Idem
Private iAlt As Integer   ' Memorizza l'altezza della scritta.
Private iLarg As Integer  ' Memorizza la larghezza della scritta.
Private sTesto As String  ' Memorizza la scritta.
Private fAngolo As Float  ' Memorizza i gradi dell'angolo
Private sPos As String    ' Memorizza il tipo di rotazione se con perno centrale, di testa o di coda.
Private fSopra1 As Float  ' Memorizza la posizione di partenza orizzontale della rotazione.
Private fSopra2 As Float  ' Memorizza la posizione di partenza verticale della rotazione.
Private fSotto1 As Float  ' Memorizza la posizione di arrivo orizzontale della rotazione.
Private fSotto2 As Float  ' Memorizza la posizione di arrivo verticale della rotazione.
Private bOk As Boolean    ' Booleano che se vero consente il disegno sulla DrawigArea.

Public Sub Form_Open() 
 
  sTesto = "Testo di prova"
  sPos = "Center"
  Me.Center     
 
End

Public Sub Posizione_Click()
 
  Select Case Last.Tag
    Case 0
      sPos = "Center"       
    Case 1
      sPos = "Testa"       
    Case 2
      sPos = "Coda"     
    Case 3
      sPos = "Esterna"         
  End Select
  attivaDisegno()
 
End

Public Sub Form_KeyPress()
 
  Select Case Key.Code
    Case Key.Up, Key.Left
      fAngolo += 1
      If fAngolo = 361 Then fAngolo = 1
      attivaDisegno()
    Case Key.Down, Key.Right
      fAngolo -= 1
      If fAngolo = -361 Then fAngolo = -1
      attivaDisegno()
  End Select
 
End

Public Sub Form_Resize()   ' Con questo evento se cambia la dimensione del Form, il disegna non va perso. 
 
    attivaDisegno() 
 
End

Public Sub attivaDisegno()   
 
  bOk = True
  da.Clear 
  da.Refresh
 
End

Public Sub da_Draw() 
   
    ' Se booleano "bOk" vero raccoglie tutti i dati e le misure occorrenti
    ' per poter disegnare testo e cerchio nell'area di disegno:
   
    If bOk Then
   
       With Paint
        .Begin(da)
        .Font.Size = ridimensiona(22)
        iLarg = .Font.RichTextWidth(sTesto)
        iAlt = .Font.RichTextHeight(sTesto)
       
        Select Case sPos
          ' Se la rotazione è centrale, posiziona il testo al centro dell'area di
          ' disegno così come le misure di partenza e arrivo e siccome la  scritta
          ' ruota su se stessa da al raggio del cerchio mezza lunghezza del testo:
          Case "Center"
            x = CFloat((da.W / 2) - (iLarg / 2))
            y = CFloat((da.H / 2) - (iAlt / 2))
            fRaggio = CFloat(iLarg / 2)           
           
          ' Se rotazione è di testa, posiziona l'inizio del testo al centro dell'area
          ' di disegno così come le misure di partenza e arrivo e siccome la scritta
          ' ruota come un raggio da al raggio del cerchio la lunghezza del testo:         
          Case "Testa"
            x = CFloat((da.W / 2))
            y = CFloat((da.H / 2) - (iAlt / 2))
            fRaggio = CFloat(iLarg)           
           
          ' Se rotazione è di coda, posiziona la fine del testo al centro dell'area
          ' di disegno così come le misure di partenza e arrivo e siccome la scritta
          ' ruota come un raggio da al raggio del cerchio la lunghezza del testo:           
           Case "Coda"
            x = CFloat((da.W / 2) - iLarg)
            y = CFloat((da.H / 2) - (iAlt / 2))
            fRaggio = CFloat(iLarg)           
           
          ' Se rotazione è esterna, posiziona l'inizio del testo a fine raggio del cerchio,
          ' sempre al centro dell'area di disegno le misure di partenza e arrivo:     
           Case "Esterna"
            x = CFloat((da.W / 2) + (iLarg / 2))
            y = CFloat((da.H / 2) - (iAlt / 2))
            fRaggio = CFloat(iLarg / 2)
             
          End Select
          ' In questa dimostrazione il fulcro (vortice) è sempre il centro
          ' dell'area di disegno:
          xArc = CFloat((da.W / 2))
          yArc = CFloat(da.H / 2)
         
          fSopra1 = CFloat((da.W / 2))
          fSopra2 = CFloat(da.H / 2)
          fSotto1 = CFloat(- (da.W / 2))
          fSotto2 = CFloat(- (da.H / 2))                       
          ' Vortice:
          .Translate(fSopra1, fSopra2)   
          .Rotate(Rad(fAngolo))   
          .Translate(fSotto1, fSotto2)
          ' Testo:
          .DrawText(sTesto, x, y, iLarg, iAlt)         
          '.Text(sTesto, x, y, iLarg, iAlt)
          '.Fill           
          ' Arco:
          .Arc(xArc, yArc, fRaggio)
          .Stroke
          .End
               
       End With     
       bOk = False
    Endif
 
End

Public Sub ridimensiona(size As Float) As Float

  ' Proporziona il testo nell'area di disegno
   If Paint.Device = da Then
    Return (size * 0.744)
   Else
    Return size
   Endif 

End
« Ultima modifica: 05 Ottobre 2015, 15:51:44 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.303
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #9 il: 05 Ottobre 2015, 15:41:02 »
Sono d'accordo con Shell è un vero peccato non riuscire a comunicare facilmente per colpa della Babele europea, io ho già grande difficoltà a capire la programmazione in Italiano 
Imparate le lingue e/o l'uso dei traduttori on line.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Ruotare un quadrato disegnato in una DrawingArea
« Risposta #10 il: 05 Ottobre 2015, 15:45:48 »
Sono d'accordo con Shell è un vero peccato non riuscire a comunicare facilmente per colpa della Babele europea, io ho già grande difficoltà a capire la programmazione in Italiano 
Imparate le lingue e/o l'uso dei traduttori on line.

Ma io lo uso è che proprio non sono portato per le lingue e malgrado il fatto che si parla di un argomento ben specifico quindi teoricamente si è avvantaggiati, specialmente su questioni che non conosco ho molta difficoltà, del resto lo trovo anche normale...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro