Autore Topic: DrawingArea  (Letto 6773 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
DrawingArea
« il: 15 Marzo 2008, 19:37:17 »
ciao a tutti,


avrei bisogno di iserire in un form una drawingarea di dimensioni  2000  per 2000
logicamente tale dimensione non ci sta in un form 1280 x 1024.
si possono inserire delle barre di scorrimento? ed eventualmente zoomare la drawingarea?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #1 il: 16 Marzo 2008, 03:28:08 »
Certo!!!
La metti dentro una ScrollView.

Bye

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: DrawingArea
« Risposta #2 il: 16 Marzo 2008, 11:27:16 »
grazie mille! :-)

ma volendo si può zoomare la drawingarea?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #3 il: 17 Marzo 2008, 02:32:32 »
Si, anche, usando i metodi MoveScaled e ResizeScaled, se non sbaglio.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: DrawingArea
« Risposta #4 il: 17 Marzo 2008, 20:19:12 »
perfetto !! dovrebbero essere loro! :-)
chissa perchè non ho controllato nei metodi prima di chiedere!! :leggere:
grazie mille!!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #5 il: 17 Marzo 2008, 20:29:36 »
Già...  :evil:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: DrawingArea
« Risposta #6 il: 17 Marzo 2008, 21:15:44 »
certo che se tutti leggessimo tutto cesserebbe lo scopo di questo sito!
inoltre discutendo si può giungere a modi diversi di fare la stessa cosa ognuno con i suoi vantaggi e svantaggi..... o sbaglio? :amici:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #7 il: 18 Marzo 2008, 20:53:31 »
Il tuo, giustamente, è un appunto su quanto ho scritto nei "Suggerimenti", e dico "Suggerimenti" perchè quello era lo scopo; comunque ho già risposto lì.

Sono d'accordo con te per quanto riguarda la discussione in amicizia, e io sicuramente continuerò a farlo, dopotutto non volevo assolutamente criticare; io ti ho risposto tranquillamente e credo tu mi abbia travisato leggendo quel post, in cui non facevo riferimento direttamente a te, ma facevo notare semplicemente delle cose, a mio avviso, segno di qualche piccola mancanza.

Comunque, per ritornare nella discussione in amicizia, hai provato quelle funzioni ?

 :2birre:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: DrawingArea
« Risposta #8 il: 18 Marzo 2008, 21:14:08 »
:2birre:

si si le ho provate, anche se solo velocemente, sembrerebbero proprio ideali per quello che vorrei realizzare in futuro. Grazie mille del tuo aiuto

tra l' altro leggendo i vari metodi dell' "componente  DRAW mi sono saltate all' occhio alcumi metodi tipo POP e PUSH che si riferiscono ad una trasformation matrix. il concetto mi incuriosisce, tu che hai più esperienza sia in gambas che in molti altri linguaggi di programmazione sai a cosa si riferisce e se può essere utile per velocizzare le oprezioni di disegno?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #9 il: 19 Marzo 2008, 21:20:15 »
Bè, esperienza è una parola grossa, almeno per quanto riguarda Gambas...
Però ho riscontrato un certo numero di problemi riguardo la grafica, in particolare con l'interattività con gli oggetti che inserisci nel disegno.
Facendo presente che gambas è un linguaggio interpretato, la velocità a volte non è il suo forte, anche se, facendo prove ad esempio con python, ho notato che le stesse identiche cose hanno una velocità paragonabile al C.
Anche in java ho fatto delle prove, e devo dire che rispetto alle precedenti versioni, queste ultime sono migliorate parecchio, e anche in questo si sono avvicinate a linguaggi di basso livello, come è il C.
In python, una cosa che mi ha stupito, è la molteplicità e la varietà di oggetti, e la potenza del linguaggio; se agganci a questo le librerie wxpython, fai delle cose strabilianti. La cosa bella che ho notato e provato è un oggetto, simile a DrawingArea, che si mantiene in modo distinto gli oggetti grafici che ci disegni sopra. Per fare un esempio, pensa a Drawing Area, tu ci disegni un rettangolo, ma poi per muovere questo rettangolo con il mouse, ti devi gestire tutti gli eventi, tenendo conto della posizione e delle dimensioni, della presenza di altri oggetti, ecc.; in python, l'oggetto viene sì mantenuto e riprodotto sulla DrawingArea, ma ha un suo corpo ben distinto, per cui attivando opportunamente gli eventi del mouse, lo puoi muovere senza alcuna percezione di lentezza.

In pgDesigner (che ho scritto in gambas) ho avuto modo di fare moltissimi esperimenti con la grafica e l'interattività con gli oggetti che vi disegnavo sopra, ma a tutt'ora non sono riuscito a risolvere il problema velocità. Quanto il numero di elementi disegnati diventa un numero considerevole, e magari le dimensioni della DrawingArea sono molto grandi, il movimento diventa lentissimo, a causa del necessario repainting del grafico.

Come avrai sicuramente notato, gambas si appoggia pesantemente a librerie esterni (vedi gtk e qt), e fà uso delle funzionalità contenute in queste librerie ma, a mio avviso, perde qualcosa per strada.
In situazioni normali non si nota alcun problema, sia per quanto riguarda la grafica, sia per il resto, ma se vuoi qualcosa di più gestibile e controllabile, sorgono i problemi.

Attualmente stò provando a riscrivere il motore grafico del mio pgDesigner ma, a parte piccolissime ottimizzazioni indipendenti dall'oggetto DrawingArea, non riesco a migliorarne la gestione.

Ad ogni modo, se tu non hai di queste necessità, và tutto bene.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: DrawingArea
« Risposta #10 il: 20 Marzo 2008, 01:38:33 »
veramente volevo farmi un piccolo cad per impianti elettrici ...
avevo già iniziato tempo fa e come dici tu in quando si raggiunge un certo numero di oggetti da disegnare il refresch diventa lunghino.
per ora risolvo disegnando tutto ciò che non devo muovere in una picture, il refresh ridisegna direttamente la picture salvata più l' oggetto da muovere

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #11 il: 20 Marzo 2008, 15:28:56 »
Infatti è quelo che avevo utilizzato io, e la cosa sarebbe stata semplice, se non fosse che nel mio grafico devo disegnare delle linee e altre cose, che dipendono dalla posizione degli altri oggetti.

Purtroppo, con tutte le prove che ho fatto e eseguo tutt'ora, non riesco a trovare un modo per risolvere.
Ma il problema maggiore è che in effetti NON C'E' MODO di risolvere, proprio per le causa che ti avevo descritto.
Anche in altri linguaggi, inizialmente, avevano lo stesso problema, ovviamente parlando di linguaggi interpretati, e l'hanno risolti piano piano. In gambas credo che tocca aspettare un pò per arrivare a quel livello.

Quindi, per farla breve, tocca accontentarsi della situazione attuale, cercando di ottimizzare il proprio codice; a meno che un esperto in C, che abbia tempo a disposizione, non si metta sotto a creare una libreria migliore.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: DrawingArea
« Risposta #12 il: 22 Marzo 2008, 11:50:23 »
Parlo da profano... ed utilizzare le OpenGL, visto che Gambas permette di gestirle nativamente con un componente ad oc?

Risolvete il problema della velocità in un secondo demandando tutto alla GPU.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: DrawingArea
« Risposta #13 il: 22 Marzo 2008, 19:23:10 »
Potrebbe essere una soluzione, ma le librerie opengl sono un pò ostiche da far funzionare, anche in altri linguaggi, oltre che pure un pò vecchiette...

Avevo pensato di farlo, probabilmente appena finito l'aggiornamento della mia Fedora ci provo.

Vi faccio sapere.

Ciao

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: DrawingArea
« Risposta #14 il: 23 Marzo 2008, 11:53:51 »
Caro Luigi, i tuoi interventi sono sempre molto stimolanti. Riflettendo sulle componenti grafiche fornite da Gambas, mi chierdevo se sara' mai possibile a questo punto costrurci un 'query builder' alla Access o alla sqlitemaestro. In questi casi, sono utilizzati gli eventi di spostamento del alcuni oggetti.