Gambas France BETA


Pas de compte ? Incription

Chapeau progressif en 3D

À propos de ce code

Bonjour à tous!
un exemple en Gambas2 permettant de visualiser un dessin en train d'être tracé en temps réel.
En GB3, je n'ai pas réussi à obtenir le même effet de visualisation progressive.
Pourtant ce serait très utile de voir avancer son grapique quand il faut dessiner une quantité très importante de donnée...(trajectoires de sattelites par exemple).

Toutes les bonnes idées seront les biens venues


Commentaires

Commentaire de gambix, Le 5/11/2014 à 17:14:14
Voici le code rectifié pour gambas3. Je pense que ça doit aussi fonctionner pour gambas2. J'utilise une image cache
dans laquelle je dessine chaque point. et durans le tracé j'envois une requête a la boucle d'évènement pour appeler l'evènement timer
(qui ne sera appeler ainsi qu'une seule fois par boucle) qui va lui rafraichir le drawingarea. Le drawing area appelle l'evènement
Draw dans lequel je dessine juste l'image.

Il y a donc deux boucles. Une de génération du dessin et une qui assure l'affichage. Ainsi l'impacte de l'affichage sur le calcul est
bien moindre dans le cas d'un calcul lourd ou dans le cadre d'un dessin nécéssitant l'aquisition de données externes.

Comment que je parle petit chinois là ... arf

A++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
' Gambas class file

' CHAPEAU 3D
' (Courbe de Bessell)

' l'effet est obtenu uniquement en modifiant la propriété de la zone de tracé
' drwarea.Cached = False -> tracé visible durant sa réalisaton
' drwarea.Cached = True -> tracé visible uniquement à la fin
'
' Mais cela ne marche plus en GB3... SI SI :-)
'
' Modifié pour Gambas3 par Fabien BODARD le 5/11/2014

PRIVATE $hImg AS Image
PRIVATE tmrDraw AS NEW Timer AS "tmrDraw"
PRIVATE $bHidden AS BOOLEAN

PUBLIC SUB Button1_Click()
' progressif

$bHidden = FALSE
chapeau

END

PUBLIC SUB Button2_Click()
' caché

$bHidden = TRUE
chapeau

END

PUBLIC SUB chapeau()
'DIM himage AS Image

DIM i AS FLOAT
DIM j AS FLOAT
DIM a AS FLOAT
DIM b AS FLOAT
DIM c AS FLOAT
DIM d AS FLOAT
DIM x AS INTEGER
DIM y AS INTEGER
DIM k AS FLOAT

$hImg = NEW Image(drwarea.Clientw, drwarea.ClientH, Color.White)
Draw.Begin($hImg)

k = Pi * 1.5 / 144
FOR i = -100 TO 99
IF i >= -64 AND i <= 64 THEN
a = i * 2.25
b = Sqr(20736 - a * a) + 0.5
FOR j = - b TO b
c = k * Sqr(j * j + a * a)
d = (Sin(c) + 0.4 * Sin(c * 3)) * 56
x = 360 - (Int(j) + Int(i) + 160)
y = 290 - (Int(d) - Int(i) + 100)
'trace un point
draw.Foreground = &hf0f0f0
draw.point(x, y)
'efface les 10 pixels en dessous
draw.Foreground = &h555555
draw.Line(x, y + 1, x, y + 10)
IF NOT $bHidden THEN
WAIT 0.001 ' juste pour freiner un peu le dessin
tmrDraw.Trigger
ENDIF
NEXT
END IF
NEXT

draw.End
tmrDraw.Trigger

END

PUBLIC SUB tmrDraw_Timer()

drwarea.Refresh

END

PUBLIC SUB Drwarea_Draw()

IF $hImg THEN Draw.Image($hImg, 0, 0)

END