Gambas France BETA


Pas de compte ? Incription

Graphisme avec Cairo

1
AuteurMessages
Wawa#1 Posté le 22/1/2012 à 20:41:00
ReBonjour,

Le code ci dessous fonctionne sauf que la ligne n'apparait pas....
Il est simple et se lit facilement je pense.

' Gambas class file

Public Sub _new()

End

Public Sub Form_Open()

End

Public Sub Quit_Click()

Quit

End

Public Sub Test_Click()

Dim Tut As Image
Tut = New Image(300, 200, Color.blue)
'
Cairo.Begin(Tut)
Cairo.MoveTo(0, 0)
Cairo.Lineto(200, 200)
Cairo.end
'
Draw.Begin(DrawingArea1)
Draw.Image(Tut, 0, 0)
Draw.end

End

J'ai bien une partie de DrawingArea1 qui passe en bleu ce qui est normal mais je ne vois pas de ligne...
Je soupçonne un problème de couleur (la ligne aurait la même couleur que le fond)...
Qu'elle la propriété ou la méthode pour changer la couleur de la ligne que l'on veut tracer ?

Merci et bonne programmation !

Philippe
Prokopy#2 Posté le 22/1/2012 à 21:52:29
Kinder PinguiSalut Wawa,

Voici ce qu'il faut faire pour utiliser Cairo (ou la classe Paint en GB3, c'est le même principe) :

Tout d'abord, il faut définir un Pattern, c'est-à-dire un "pinceau", au moyen de la propriété Source :

1
Cairo.Source = Cairo.CollorPattern(Color.Red)


Ici je définis un pinceau solide simple avec ColorPattern. Ici il sera rouge.

Ensuite, il faut définir le tracé, c'est-à-dire le trajet que tu vas faire avec ton pinceau :

1
2
Cairo.MoveTo(0, 0)
Cairo.Lineto(200, 200)


Tu peux combiner des arcs de cercle, des lignes et d'autres choses pour faire des formes plus ou moins saugrenues. ;)

Ensuite, soit tu décides de tracer le contour de ta forme :

1
Cairo.Stroke()


... ou bien tu remplis ta forme :

1
Cairo.Fill()


Lorsque tu utilises l'une de ces deux méthodes, le dessin est fait mais le tracé est oublié (si tu rappelles Stroke() ou Fill() derrière, rien ne se passera tant que tu n'en auras pas défini un autre). À moins que tu passes True à l'une de ces deux méthodes :

1
2
Cairo.Stroke(TRUE)
Cairo.Fill() 'Ici je trace le contour ET je remplis


Voilà, en espérant avoir répondu à ton problème. ;)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Wawa#3 Posté le 23/1/2012 à 10:02:44
Merci pour le coup de main, je teste ce soir.

Plus généralement la méthode que j'ai choisi (travailler dans une image puis l'afficher dans la drawingarea) est elle la bonne ?

A terme je vais devoir tracer plusieurs milliers de ligne dans l'image avec nécessairement des "redraw" assez fréquent et je m'inquiète des temps de réponse...

Y a t il une meilleure façon de s'y prendre ?

Merci pour vos conseils.

Philippe
Prokopy#4 Posté le 23/1/2012 à 18:06:53
Kinder Pingui
Plus généralement la méthode que j'ai choisi (travailler dans une image puis l'afficher dans la drawingarea) est elle la bonne ?


Ça dépend des cas. Cette méthode est efficace lorsque l'on a un seul élément qui change dans la scène (déplacement avec la souris par exemple), et que le reste est fixe. Ça permet en effet d'éviter des tonnes de rendus inutiles. Par contre pour ce genre d'uitlisations utilise une Picture plutôt qu'une Image, c'est plus rapide à afficher. ;)

La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
gambix#5 Posté le 24/1/2012 à 20:53:22
Faire simple !J'ai une question bete ... mais pourquoi n'utilise tu pas la classe paint ? Cairo c'est seulement si tu n'utilise pas de composant graphique ou avec sdl. Sinon le mieux est encore d'utiliser paint.
Moins de texte dans une signature c'est agrandir son espace.
1