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
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++
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