Dessiner des fléches parallèle à une droite

Résolu
cs_sp62 Messages postés 14 Date d'inscription dimanche 29 août 2004 Statut Membre Dernière intervention 18 janvier 2009 - 5 avril 2006 à 18:05
cs_sp62 Messages postés 14 Date d'inscription dimanche 29 août 2004 Statut Membre Dernière intervention 18 janvier 2009 - 5 avril 2006 à 23:46
Bonjour,

je recherche un code qui pourrais me permettre de dessiner des fléches paralèles à une droite
en vb6, le dessin se faisant dans une picturebox

voici l'exemple :

droite : _______________________________________
Fleches : --> --> --> --> --> --> --> --> --> -->

quelqu'un pourrait-il m'aider

par avance merci

3 réponses

Utilisateur anonyme
5 avril 2006 à 20:07
Salut,

C'est quoi le probléme, utilise les fonction de dessin et une boucle

Const largeur As Integer = 200
Const largeurfleche As Integer = 20
Const hauteurfleche As Integer = 10

Private Sub Form_Load()
Me.TaPictureBox.ScaleMode = 3
End Sub
Private Sub TaPictureBox_Paint()
Me.TaPictureBox.Line (0, 0)-(largeur, 0)
Dim i As Integer
For i = 0 To Int(largeur / (largeurfleche * 2))
Call DrawFleche(largeurfleche * i * 2, Int(3 * hauteurfleche / 2))
Next i
End Sub
Private Sub DrawFleche(ByVal X As Integer, ByVal Y As Integer)
Me.TaPictureBox.Line (X, Y + Int(hauteurfleche / 2))-(X + largeurfleche, Y + Int(hauteurfleche / 2))
Me.TaPictureBox.Line (X + largeurfleche - 5, Y)-(X + largeurfleche, Y + Int(hauteurfleche / 2))
Me.TaPictureBox.Line -(X + largeurfleche - 5, Y + hauteurfleche)
End Sub

Kenji

<HR width="100%" SIZE=2>


Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
3
Utilisateur anonyme
5 avril 2006 à 20:49
Bon, apparament, vu tes précédents poste, t'as eu les même réponses.
Si tu veux que se sois tout le temps parraléle quelque soit l'angle de ta droite il faut travailler un peu la trigonométrie.
Un début pour te mettre sur la voie:
Mais attention, c'est loins d'être parfait, j'ai fait ca à la va-vite. Je te laisse corriger les nombreuses erreurs.

Const PI As Double = 3.14159265359
Const ArrowsWidth As Integer = 10
Const ArrowsHeaderLength As Integer = 5
Const Decal As Integer = 10

Private Sub Form_Load()
Me.TaPictureBox.AutoRedraw = True
Me.TaPictureBox.ScaleMode = 3
Call DrawLineWithArrows(10, 10, 200, 200)
End Sub

Private Sub DrawLineWithArrows(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer)
Dim Alpha As Double : Alpha = Atn((y2 - y1) / (x2 - x1))
Dim l As Double : l = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
TaPictureBox.Line (x1, y1)-(x2, y2)
Dim i As Integer
For i = 0 To (l / (ArrowsWidth * 4)) - 1
Dim PosX As Double : PosX = x1 + Cos(Alpha) * i * ArrowsWidth * 2
Dim PosY As Double : PosY = y1 + Sin(Alpha) * i * ArrowsWidth * 2
Dim dX As Double : dX = PosX + Cos(Alpha + (PI / 2)) * Decal
Dim dY As Double : dY = PosY + Sin(Alpha + (PI / 2)) * Decal
Call DrawFleche(PosX + dX, PosY + dY, Alpha)
Next i
End Sub

Private Sub DrawFleche(ByVal X As Double, ByVal Y As Double, ByVal Alpha As Double)
Dim xF As Integer : xF = X + Cos(Alpha) * ArrowsWidth
Dim yF As Integer : yF = Y + Sin(Alpha) * ArrowsWidth
TaPictureBox.Line (X, Y)-(xF, yF)
TaPictureBox.Line (xF, yF)-(xF - Cos(Alpha + (PI / 4)) * ArrowsHeaderLength, yF - Sin(Alpha + (PI / 4)) * ArrowsHeaderLength)
TaPictureBox.Line (xF, yF)-(xF - Cos(Alpha + (7 * PI / 4)) * ArrowsHeaderLength, yF - Sin(Alpha + (7 * PI / 4)) * ArrowsHeaderLength)
End Sub

Kenji

<HR width="100%" SIZE=2>


Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
3
cs_sp62 Messages postés 14 Date d'inscription dimanche 29 août 2004 Statut Membre Dernière intervention 18 janvier 2009
5 avril 2006 à 23:46
Merci beaucoup Kenji pour ce code

Laurent
0
Rejoignez-nous