Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: nello79 - 16 Febbraio 2012, 00:15:09

Titolo: Dimensioni drawing area
Inserito da: nello79 - 16 Febbraio 2012, 00:15:09
Salve, nel mio progetto ho inserito una drawing area di dimensioni 600x200. Quello che non capisco è perchè disegnando una linea da x300 y0 a x300 y200, la linea non raggiunge l'estremità della drawing area ed anche la posizione della x non corrisponde.
In pratica è come se disegnassi una linea che parte da circa x200 y0 fino a x200 y150.
Che corrispondenza ha la dimensione della drawing area con la posizione della linea disegnata?

Inoltre in che modo si posso disegnare gli archi? ho provato la funzione draw.circle ma non capisco il significato dei parametri start - end. Qualcuno sa come funzionano?
Titolo: Re: Dimensioni drawing area
Inserito da: vuott - 16 Febbraio 2012, 05:31:03
Inoltre in che modo si posso disegnare gli archi? ho provato la funzione draw.circle ma non capisco il significato dei parametri start - end. Qualcuno sa come funzionano?

Immagina un cerchio avente come centro della sua circonferenza il punto di origine delle ascisse e delle ordinate.
I parametri "start angle" e "end angle" sono misurati in radianti. Un angolo pari a 0 pone il parametro sull'asse X positivo. Invece un angolo di radianti π/2.0 (cioè 90 gradi) porrà il parametro sull'asse Y positivo......

...ti faccio un esempio esplicativo, non con la DrawingArea, disegnando all'interno di una Picture vuota (appositamente realizzata nella cartella Dati) da 304 x 304 pixel:
Codice: [Seleziona]
Public Sub Button1_Click()

 Dim p As Picture
 Dim a As Integer

  p = Picture.Load("mia_immagine_vuota.png")
  
 For a = 1 To 360
 
  With Draw
    .Begin(p)
' viene disegnato piano-piano un arco iniziando dall'asse X nel 1° quadrante,
' che va incrementando in senso antiorario, ed alla fine si chiude a formare un cerchio:
    .Arc(100, 100, 100, 100, Rad(0), Rad(a))
  End With

  PictureBox1.Picture = p

  Wait 0.1
Next

End

...prova (con la tua drawingArea) a vedere quello che succede  :coder: , e capirai quello che volevi capire.



Prova anche questa soluzione più specifica per creare un semicerchio:
Codice: [Seleziona]
Public Sub Button1_Click()

Dim p As Picture
Dim a As Integer

  p = Picture.Load("mia_immagine_vuota.png")
  
  With Draw
    .Begin(p)
' viene disegnato un semicerchio:
    .Circle(100, 100, 100, Rad(0), Rad(180))
  End With

  PictureBox1.Picture = p

End
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 16 Febbraio 2012, 19:44:15
Citazione
Salve, nel mio progetto ho inserito una drawing area di dimensioni 600x200. Quello che non capisco è perchè disegnando una linea da x300 y0 a x300 y200, la linea non raggiunge l'estremità della drawing area ed anche la posizione della x non corrisponde.
In pratica è come se disegnassi una linea che parte da circa x200 y0 fino a x200 y150.
Che corrispondenza ha la dimensione della drawing area con la posizione della linea disegnata?

ricontrolla il tuo codice , se dai un punto con x 300 y 0 il punto sulla drawing area sarà l' angolo destro superiore , controlla inoltre se hai posizionato la drawing in un contenitore che la ridimensiona , percui le sue dimensioni non sono quelle che ti apetti tu.

in linea di massima se aggiungi una drawingarea su un form senza variare alcun parametro deve funzionare correttamente .


Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 16 Febbraio 2012, 21:52:54
Niente non riesco proprio a capire... Allora in un form ho inserito una drawArea di dimensioni 400*200. Ho inserito questo codice:

Codice: [Seleziona]
PUBLIC SUB Form_Open()
Draw.Begin(DrawingArea1)
Draw.LineWidth = 1
Draw.Line(100, 0, 100, 200)
DrawingArea1.Refresh
END
La linea me la disegna da circa x80 y0 fino a x80 y130 all'incirca.. ma dove sbaglio? Di quale contenitore parli?
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 16 Febbraio 2012, 22:01:19
allega i sorgenti della tua prova cosi vediamo di venirne a capo :) ,

il codice è corretto , ed in effetti a me da il risultato qui sotto che è quello che ci si deve aspettare
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 16 Febbraio 2012, 22:03:21
ps togli il DrawingArea1.Refresh  e meTti draw.end

e nelle proprietà della drawing metti a true la proprieta chached
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 16 Febbraio 2012, 22:10:51
Ma per la miseria ma allora cosa può essere? Il codice che ho messo è quello che ho già scritto prima. Ho creato un progetto nuovo con solo quel codice per capire come funziona. Ho corretto come mi hai detto ma il risultato non cambia, guarda quì ho solo cambiato lo sfondo e il colore delle linee.
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 16 Febbraio 2012, 22:25:47
Ma potrà essere la versione di gambas che uso che ha qualche bug? io ho la 2.21 potrebbe essere questo il problema?
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 16 Febbraio 2012, 22:52:02
io ho la 2.22  dai repo di mint ( e quindi ubuntu 11.10)
tu l a2.21 l' hai scaricata dai repo  o compilata?

mi servivano  i sorgenti per vedere i file frm che creava la tua versione :)
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 16 Febbraio 2012, 22:54:05
per curiosità apri i mie sorgenti ed eseguili , così vediamo subito se è la tua versione di gambas
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 16 Febbraio 2012, 23:14:32
allora la tua funziona correttamente però ho notato che è la dimensione della drawingarea che è cambiata. La tua è visualizzata più piccola rispetto alla mia pur rimanendo la dimensione 400*200.
Comunque ora sto compilando gambas3 chissà che non migliorano le cose. Comunque ecco i sorgenti. L'avevo installata dai repo
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 17 Febbraio 2012, 08:35:03
il problema è dovuto alle librerie che utilizzavi, con lke gtk si verifica il tuo problema, se invece il progetto lo realizzi con le qt va tutto benissimo
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 17 Febbraio 2012, 20:28:18
Ok ho provato a creare un nuovo progetto selezionando Applicazione Grafica QT nel tipo di progetto e funziona correttamente. Ma il progetto completo l'ho creato selezionando solo Applicazione Grafica ora come faccio a convertirlo? Devo per forza crearne uno nuovo e copiare il vecchio?
Titolo: Re: Dimensioni drawing area
Inserito da: vuott - 17 Febbraio 2012, 21:17:01
ora come faccio a convertirlo? Devo per forza crearne uno nuovo e copiare il vecchio?

Carica il vecchio progetto originale poi:
1) clicca in alto a sinistra su: "Progetto";
2) poi scegli "Proprietà";
3) nella finestra di dialogo che appare, clicca su "Componenti";
4) disattiva gb.gtk e gb.gui;
5) attiva (metti la vergatura  :check: su) "gb.qt4" e "gb.qt4.ext" .
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 18 Febbraio 2012, 00:02:57
Ma io non ho attivo gb.gtk e gb.gui. Ho attivo solo: gb, gb.form, gb.qt, gb.qt.ext ma le gb.qt4 e gb.qt4.ext non ci sono proprio.  :mad:
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 18 Febbraio 2012, 08:26:35
calma calma :) le qt4 sono su gambas3, per il 2 va bene gb.qt, gb.qt.ext
Titolo: Re: Dimensioni drawing area
Inserito da: vuott - 18 Febbraio 2012, 13:06:58
Ma io non ho attivo gb.gtk e gb.gui. Ho attivo solo: gb, gb.form, gb.qt, gb.qt.ext ma le gb.qt4 e gb.qt4.ext non ci sono proprio.  :mad:

calma calma :) le qt4 sono su gambas3, per il 2 va bene gb.qt, gb.qt.ext

Scusami, nello79, mi era sfuggito che usavi Gambas 2.
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 18 Febbraio 2012, 15:18:35
Ma allora dov'è l'inghippo? che differenza c'è nello scegliere tra una Applicazione Grafica e una Applicazione Grafica QT?
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 18 Febbraio 2012, 18:11:38
il programmatore che ha creato gambas usa mandriva e quindi kde e di conseguenza è stato sviluppato principalmente con qt, poi si è integrato gtk che però per un motivo o per un altro  spesso e volentieri fanno girare un po le scatole , quindi  io qualsiasi cosa faccio uso le qt , senza contare che con gambas3 e qt4 l' integrazione con gnome è perfetta :)
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 19 Febbraio 2012, 01:51:44
Ok e fino quì ci siamo. Ma quando creo un nuovo progetto io posso scegliere tra Applicazione Grafica, Applicazione Grafica QT e Applicazione Grafica GTK. Tra QT e GTK ho capito le differenze ma se scelgo solo Applicazione Grafica quali librerie utilizza?
Scusate l'insistenza ma sono all'inizio e vorrei capire ancora tante cose... :)
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 19 Febbraio 2012, 13:46:12
in quel caso su sistemi che usano kde gambas utilizzerà le qt in automatico , su sistemi che usano gnome utilizzerà le gtk, tutto questo sarebbe un gran figata se le gtk funzionassero a dovere! :)
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 19 Febbraio 2012, 16:00:08
Ok ora cominciano a quadrare un pò di cose  :ok: . Ma ritorniamo a noi :)
Con la funzione draw.circle riesco a disegnare un arco ma mi viene visualizzato anche l'angolo, riporto un esempio:
Codice: [Seleziona]
Draw.Begin(DrawingArea1)
Draw.LineWidth = 1
Draw.Circle(100, 100, 50, 0, Pi / 1.5)
DrawingArea1.Refresh
Quello che visualizzo lo si vede in figura. Come faccio a non far visualizzare anche le linee dell' angolo?
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 19 Febbraio 2012, 16:41:11
controlla se esiste draw.arc

altrimenti mi sa che devi usare g3
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 19 Febbraio 2012, 18:52:32
Ho l'impressione che è arrivato il momento di passare a gambas3 :) . Ho notato solo una cosa, quando disegno un arco mi ritrovo con il verso dell'angolo invertito rispetto alla precedente versione ma anche rispetto a quanto spiega l'help. Qualcuno può darmi conferma di questo o sono ancora io che ho toppato qualcosa?  :hatecomputer:
Allego il codice ovviamente ora lo sto provando con gambas3.
Codice: [Seleziona]
Public Sub Button1_Click()
  
  Paint.Begin(DrawingArea1)
  Paint.LineWidth = 2
  Paint.MoveTo(0, 0)
  Paint.LineTo(400, 200)
  Paint.Arc(100, 100, 50, 0, Pi / 2)
  Paint.Stroke
  Paint.End
  
End
e immagine
Titolo: Re: Dimensioni drawing area
Inserito da: alcresio - 19 Febbraio 2012, 19:43:04
Quello che visualizzo lo si vede in figura. Come faccio a non far visualizzare anche le linee dell' angolo?

mi era successo anche a me, ricordo di aver risolto in modo poco elegante ma efficace ridisegnado due linee del colore dello sfondo esattamente sopra a quelle dell'angolo residuo... era davvero una cosa "brutta", però funzionava... se non sei un tipo da guanti bianchi allora prova così! ;)
Titolo: Re: Dimensioni drawing area
Inserito da: fsurfing - 19 Febbraio 2012, 19:50:36
si in effetti gira in senso orario, a meno che tu non dia dei valori negativi
Titolo: Re: Dimensioni drawing area
Inserito da: nello79 - 19 Febbraio 2012, 21:41:19
Citazione
mi era successo anche a me, ricordo di aver risolto in modo poco elegante ma efficace ridisegnado due linee del colore dello sfondo esattamente sopra a quelle dell'angolo residuo... era davvero una cosa "brutta", però funzionava... se non sei un tipo da guanti bianchi allora prova così!
purtroppo gli archi sono tanti  sarebbe un pò un casino...
Citazione
si in effetti gira in senso orario, a meno che tu non dia dei valori negativi
Vabè l'importante è che non sono io che sto toppando ancora qualcosa  :). Allora andiamo avanti..
Titolo: Re: Dimensioni drawing area
Inserito da: alcresio - 20 Febbraio 2012, 01:13:42
potresti fare una subroutine a cui passare i parametri dell'arco e questa in pensa a ridisegnare lo sfondo... il guaio (a me succedeva) è che se pensi di mettere un arco la dove poi ci finiranno i raggi da cancellare rischi di eliminare parti del disegno buono...  :'(
Titolo: Re: Dimensioni drawing area
Inserito da: vuott - 25 Febbraio 2012, 16:01:35
.... quando disegno un arco mi ritrovo con il verso dell'angolo invertito rispetto alla precedente versione ma anche rispetto a quanto spiega l'help.

Ho sottoposto la questione a Minisini, mi ha risposto così:

" I may be wrong, but it follows the mathematical standard, i.e. positive
angles process counter-clockwise with X axis going from left to right
and Y axis going from bottom to top.

As the Y axis goes from top to bottom by default with computer, positive
angles proceed clockwise!

Regards,
--
Benoît Minisini
"