Gambas France BETA


Pas de compte ? Incription

Paint: Dessiner des lignes uniquement entre .MoveTo & .LineTo

Ce sujet est résolu.

1
AuteurMessages
tincho#1 Posté le 9/5/2022 à 19:11:34
Bonjour les amis.
S'il vous plaît, quelqu'un pourrait-il me dire comment empêcher la peinture de dessiner une ligne lorsqu'elle est positionnée sur un autre point.
Le problème apparaît entre le point 4 et 5 qui ne devrait pas être dessiné (voir l'image du lien [1]).
Dans l'exemple j'essaie de dessiner la lettre majuscule "A" mais vous voyez le résultat.
Un collègue [2] a proposé une solution mais je veux trouver une solution générale pour chaque .MoveTo.
[1] https://i.imgur.com/g0CQKjB.png
[2] https://forum.gambas.one/viewtopic.php?f=4&t=1323
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
Here IS the code.

' Gambas class file

PRIVATE afPoints AS NEW Float[][]

PUBLIC SUB Lettering_Click()

afPoints.Clear
SELECT LAST.Tag
CASE "a"
afPoints.Add([10, 100])
afPoints.Add([60, 10])

afPoints.Add([60, 10])
afPoints.Add([110, 100])

afPoints.Add([30, 50])
afPoints.Add([80, 50])
DrawingArea1.Refresh

CASE "e"
afPoints.Add([10, 100])
afPoints.Add([10, 10])

afPoints.Add([10, 10])
afPoints.Add([110, 10])

afPoints.Add([10, 50])
afPoints.Add([80, 50])

afPoints.Add([10, 100])
afPoints.Add([110, 100])

END SELECT

DrawingArea1.Refresh

END

PUBLIC SUB DrawingArea1_Draw()

DIM z AS INTEGER
DIM i AS INTEGER

IF afPoints.Count > 0 THEN
Paint.Brush = Paint.Color(Color.Red)
Paint.LineWidth = 3

FOR z = 0 TO afPoints.Max - 1
IF z = afPoints.Max - 2 THEN
Paint.NewPath()
ELSE
Paint.MoveTo(afPoints[z][0], afPoints[z][1])
Paint.LineTo(afPoints[z + 1][0], afPoints[z + 1][1])
ENDIF
Paint.Stroke
NEXT
ELSE
DrawingArea1.Children.Clear
ENDIF

END

tincho#2 Posté le 10/5/2022 à 00:32:56
FOR z = 0 TO afPoints.Max - 1 Step 2
1