Gambas France BETA


Pas de compte ? Incription

Encore des questions sur le graphisme

1
AuteurMessages
Wawa#1 Posté le 6/2/2012 à 17:14:38
Bonjour,
J'ai quelques questions sur le graphisme avec gambas...
1_ Quelle est la bonne méthode pour effacer une DrawingArea ?
2_ Quelle est la bonne méthode pour effacer une Image ?

En fait lorsque je retrace et j'affiche plusieurs fois la même scène il semble y avoir une dérive et des ombres apparaissent sur la drawingarea. J'ai fait plusieurs tests et les données numériques ne bougent pas lors des tracés successifs ce qui me laisse penser que l'effacement est incomplet.
Si je la resize il y a aussi pleins de traits étranges qui apparaissent lors du tracage suivant, ce qui me laisse encore une fois penser que l'effacement des opérations précédentes n'est pas bon (complet)...

Merci pour votre aide et bonne programmation !

Philippe
linuxos#2 Posté le 6/2/2012 à 17:20:54
Un peu de sel, de poivre et la crevette sera... Bonjour,

Voir peut être l'option Cached = True/False du DrawingArea

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Wawa#3 Posté le 6/2/2012 à 18:19:12
Re,

Si je mets Cached à False sur la DrawingArea, il y a une erreur qui apparait (Cannot draw outside of Draw event handler....) lors du Draw.Begin(), message que je ne comprends d'ailleurs pas du tout....
Si, à ce propos, je pouvais avoir quelques explications (exemple ?).

Merci.

Philippe
Jack#4 Posté le 6/2/2012 à 18:23:26
Il faut charger la version svn car la fonction cached = true/false générait une erreur 11
Sinon pour utiliser
DrawingArea.Cached = True
DrawingArea.clear
DrawingArea
Pour un code démocratique nationalisons Gambas.
Jack#5 Posté le 6/2/2012 à 18:23:56
Il faut charger la version svn car la fonction cached = true/false générait une erreur 11
Sinon pour utiliser
DrawingArea.Cached = True
DrawingArea.clear
DrawingArea.cached = false
Pour un code démocratique nationalisons Gambas.
Wawa#6 Posté le 6/2/2012 à 19:06:47
Re,

Bon j'essaye d'éclaircir mon problème...

Le truc semble venir du tandem image.clear() immédiatement suivi de image.resize(...). Je précise, il s'agit d'une image en mémoire programme, pas de la drawingarea.
Ce que je ne comprends pas c'est que si j'inverse les deux instructions, le paint.begin(image) qui suit donne une erreur....
Je ne vois pas pourquoi....

Pour la propriété cached de la drawing area, après un essai j'ai compris. Ce n'est pas la cause du problème.

Cette version svn, ou peut on la récupérer ?

Philippe

Flachy Joe#7 Posté le 6/2/2012 à 19:59:38
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
Pour récupérer la version de développement, regarde cette page :
http://gambasdoc.org/help/howto/svn?fr&v3

Tu peux aussi utiliser cet utilitaire pour télécharger et compiler automatiquement la dernière version :
http://gambasforge.org/code-37-mises-a-jour-gb3-svn--version-2.html

A+
;) Flachy Joe ;)
Wawa#8 Posté le 7/2/2012 à 07:59:09
Bonjour,

Après une soirée d'expérience, toujours peu de résultats probants pour l'instant.
En gros et pour résumer :

Le code suivant s'exécute mais n'afface pas "complètement" l'image

Public Graphimag as new Image(100,100)
.
.
Public sub xxxxx
.
.
Graphimag.clear()
Graphimag.resize(500,500)
.
.
Paint.begin(Graphimag)
.
.

Le code suivant provoque une erreur à l'exécution du "Paint.begin":
Public Graphimag as new Image(100,100)
.
.
Public sub xxxxx
.
.
Graphimag.resize(500,500)
Graphimag.clear()
.
.
Paint.begin(Graphimag)
.
.

Deux questions :
Pourquoi une erreur dans le deuxième cas ?
Pourquoi ne se fait il pas correctement dans les deux cas ?

Mon hypothèse :
L'enchainement trop rapide des opérations sur l'objet fait que ces dites opérations ne se finissent pas correctement !

Merci de me faire part de vos conseils et avis.

Bonne programmation à tous.

Philippe
Prokopy#9 Posté le 7/2/2012 à 11:21:15
Kinder Pingui
Le code suivant s'exécute mais n'afface pas "complètement" l'image

Public Graphimag as new Image(100,100)
.
.
Public sub xxxxx
.
.
Graphimag.clear()
Graphimag.resize(500,500)
.
.
Paint.begin(Graphimag)
.
.

Le code suivant provoque une erreur à l'exécution du "Paint.begin":
Public Graphimag as new Image(100,100)
.
.
Public sub xxxxx
.
.
Graphimag.resize(500,500)
Graphimag.clear()
.
.
Paint.begin(Graphimag)
.
.

Deux questions :
Pourquoi une erreur dans le deuxième cas ?
Pourquoi ne se fait il pas correctement dans les deux cas ?


Lorsque tu appelles image.Clear(), l'image est totalement effacée, c'est-à-dire que ses dimensions sont remises à zéro. Par conséquent, lorsque tu essaies de dessiner dessus, ça plante (on ne peut pas dessinner sur une image aux dimensions nulles).

Si tu veux effacer une image (dans le sens de la remplir de vide), utilise la fonction Fill() avec une couleur de fond (blanc par exemple) :

1
Graphimag.Fill(Color.White)


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.
1