Autore Topic: Disegnare oggetti  (Letto 1289 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Disegnare oggetti
« il: 24 Agosto 2012, 11:52:17 »
Ecco con l'ultima discussione, forse questa più complessa.....almeno per me.
Premetto che non sto provando a creare un programma di disegno tipo paint....
Quello che dovrei creare è un programma che mi permetta di studiare alcune figure geometriche.
Dovrei prima capire come disegnare due figure geometriche una sopra l'altra e renderle indipendenti (quindi poterle modificare ecc...) credo che bisognerebbe quindi introdurre il concetto di livelli, se gambas lo consente. Ovviamente qui mi tocca studiare, però magari se qualcuno potesse indirizzarmi, gliene sarei grato ;)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #1 il: 24 Agosto 2012, 12:36:51 »
il discorso è piuttosto ampio, se cerchi nel forum l' argomento è già stato trattato.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #2 il: 24 Agosto 2012, 18:44:48 »
Tanto per informarti, gambas e l'oggetto Paint non gestisce i livelli.

In PgDesigner3 stò lavorando pesantemente sulla funzionalità Paint e sul disegno su una DrawingArea.
Quello che devi fare è creare degli oggetti non grafici, che contengano le proprietà per poter disegnare figure sulla drawingarea, e usare i metodi e gli eventi della drawingarea per disegnarli.
Il movimento devi anch'esso gestirlo manualmente, intercettando gli eventi del mouse, capire quale oggetto è selezionato, modificarne le coordinate in base ai movimenti del mouse, e quant'altro.

Se vuoi, puoi scaricarti PgDesigner3 (versione alpha), in cui è presente una classe apposita (Canvas), e una serie di oggetti predefiniti (in base all'esigenze di pgDesigner). La classe Canvas è abbastanza a sè stante, per cui puoi estrapolarla senza grossa fatica. Gli oggetti grafici e la gestione puoi prender come esempio quelli che ho creato.

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #3 il: 24 Agosto 2012, 19:14:10 »
Grazie, sicuramente scaricherò il tuo programma, però quando parli di oggetti non grafici cosa intendi? scusa ma non sono un esperto in queste cose, dall'alto della mia ignoranza, immaginavo di inserire per ogni oggetto una drawing area priva di sfondo, giocando sull'opacità se possibile, sono totalmente fuori strada vero?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #4 il: 24 Agosto 2012, 19:35:44 »
potresti anche fare una cosa del genere , milio aveva creato un esempio in proposito, secondo me comunque è meglio utilizzare un unica drawing area su cui disegni i vari oggetti.

esattamente cosa devi fare? giusto per capire quale può essere la strada migliore.

farti un esempio è molto oneroso in termini di tempo ,puoi comunque iniziare a giocherellare con le funzioni di disegno con l' esempio presente in gambas3 : "painting" in cui trovi i codici per le funzioni base., oltre a paint puoi usare draw , però per avere degli esempi dovrai usare gambas2 in quanto questo metodo di disegno è nato su g2 , paint invece è una "novita di g3" ed è molto utile se devi gestire delle trasparenze e altre cosine



Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #5 il: 24 Agosto 2012, 20:26:23 »
Visto che l'esempio presente in gambas3 è il painting, userò quello per studiare....
Mi serve per disegnare testo (no antialiasing oppure sfumature) linee, rettangoli, triangoli e circonferenze/ellissi.
Devo realizzare un programma che mi dia la possibilità di studiare grafici di borsa (ovviamente tutto a scopo didattico).

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #6 il: 24 Agosto 2012, 20:31:51 »
se devi creare dei grafici puoi usare il mio modulo linegraf http://www.tutto-opensource.org/linegraf.html che per altro utilizza draw e quindi puoi vedere le differenze tra i due metodi

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #7 il: 25 Settembre 2012, 15:25:08 »
Ok, sto giocherellando con Paint (dopo aver provato Draw, come mi è stato suggerito) sono ancora in alto mare, ma piano piano imparo...
Sto provando a disegnare delle rette in una drawing area, vorrei farle di colore differente ma non mi riesce, quando imposto i vari colori, il programma le disegna tutte dello stesso colore...
Allego il mio codice:
Codice: [Seleziona]
 Paint.Begin(DrawingArea1)
 Paint.FillRule = Paint.FillRuleEvenOdd
 Paint.Brush = Paint.Color(0)
 Paint.Fill(True)
 Paint.AntiAlias = True
 Paint.LineWidth = 2
 ''Asse y
 Paint.MoveTo(50, 10)
 Paint.RelLineTo(0, y)
 ''Asse x
 Paint.MoveTo(25, y - 10)
 Paint.RelLineTo(x, 0)
 Paint.Font.Size = 8
 Paint.Font.Name = "Liberation Sans"
 Paint.Text(0, 40, y - 10, 1, 1)

Ecco l'altra parte del codice
Codice: [Seleziona]
While e < timeframe
   Paint.LineWidth = 1
   Paint.FillRule = Paint.FillRuleEvenOdd
   Paint.Brush = Paint.Color(Color.RGB(1, 100, 0))
   Paint.Fill(True)
   Paint.MoveTo(e + 50 + f, 10)
   Paint.RelLineTo(0, y - 15)
   Paint.Stroke
   e = e + f
 Wend 
« Ultima modifica: 25 Settembre 2012, 15:34:14 da Lux »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #8 il: 25 Settembre 2012, 17:46:27 »
...vorrei farle di colore differente ma non mi riesce, quando imposto i vari colori, il programma le disegna tutte dello stesso colore...

La linea di codice per impostare il colore di ciascuna linea è forse questa ?

Codice: gambas [Seleziona]

   Paint.Brush = Paint.Color(Color.RGB(1, 100, 0))


Ma, così, come fai a impostare i diversi colori ?  :-\
« 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 Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #9 il: 25 Settembre 2012, 18:11:01 »
Si , la prima parte del codice disegna due linee di un colore mentre la seconda parte dovrebbe disegnare altre linee di un colore differente.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #10 il: 25 Settembre 2012, 18:53:17 »
....mentre la seconda parte dovrebbe disegnare altre linee di un colore differente.
Va be'... ovviamente  :-\ devi modificare i valori all'interno del comando: Color.RGB(1, 100, 0).

Potresti, se ti torna meglio, anche utilizzare un valore numerico per impostare i diversi colori, dato che la funzione Color accetta, appunto, valori di tipo intero: Color( Color As Integer )
« Ultima modifica: 25 Settembre 2012, 18:56:16 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 Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #11 il: 25 Settembre 2012, 20:47:32 »
Si ma il valore del colore che utilizza e' soltanto l'ultimo , quello messo in precedenza non viene utilizzato e non capisco il motivo....

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #12 il: 25 Settembre 2012, 21:22:03 »
quando fifinisci di usare un colore devi dare un paint.stroke o paint.fill a seconda di quello che devi fare ,

con paint infatti a differenza di draw il colore lo puoi mettere anche dopo aver disegnato tutte le righe.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #13 il: 25 Settembre 2012, 21:46:04 »
Utilizzando il tuo codice, che hai riportato sopra, modificandolo leggermente attraverso la sostituzione del While con un ciclo For...Next, ed eliminando  qualcosa, ...sino ad avere una cosa  di 'sto genere:
Codice: gambas [Seleziona]

Public Sub DrawingArea1_Draw()
 
  Dim i As Short

   With Paint
     .Begin(DrawingArea1)
       For i = 0 To 255
    .LineWidth = 1
    .FillRule = Paint.FillRuleEvenOdd
    .Brush = Paint.Color(Color.RGB(1, i, 0))
    .MoveTo(i, 50)
    .RelLineTo(0, 50)
    .Stroke
       Next
    .End
   End With

End

ho provato ad ottenere una variazione di colori. E mi ha funzionato.  :-\
« Ultima modifica: 25 Settembre 2012, 23:14:33 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 md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Disegnare oggetti
« Risposta #14 il: 02 Ottobre 2012, 12:13:52 »
quando fifinisci di usare un colore devi dare un paint.stroke o paint.fill a seconda di quello che devi fare ,

con paint infatti a differenza di draw il colore lo puoi mettere anche dopo aver disegnato tutte le righe.
Paint funziona diversamente da Draw.
La sequenza dei comandi viene elaborata dal metodo Stroke(), e non direttamente con in Draw.
Quindi, qualsiasi intervento di modifica di qualsiasi genere, all'interno di una sequenza, sovrascrive lo stesso comando precedente.