Créer un tableau de coordonnées pour un spline ou polyligne
Lors de mes programmations, je suis souvent amené à créer des polylignes. Or après avoir calculé les coordonnées de chaque points composant la polyligne, il est fastidieux de devoir compléter le tableau des coordonnées de la polyligne.
Rappel de l'aide AutoCAD pour dessiner une polyligne :
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
' Définition des points composant la polyligne :
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
' Dessin de la polyligne dans l'espace objet
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
On voit dans l'exemple ci dessus qu'il peut devenir rapidement fastidieux de définir les points de la polyligne ! D'autant plus que les ponts sont souvent calculés séparément avant, ce qui peut donner du code de ce type :
points(0) = P1(0): points(1) = P1(1)
points(2) = P2(0): points(3) = P2(1)
points(4) = P3(0): points(5) = P3(1)
points(6) = P4(0): points(7) = P4(1)
points(8) = P5(0): points(9) = P5(1)
Pour 5 points ça devient lourd. Pour une polyligne comportant beaucoup plus de points, ce n'est même pas la peine ! C'est pourquoi j'ai écrit cette petite fonction AjtPt qui permet d'ajouter les coordonnées d'un point donné en paramètre à un tableau de coordonnées donné également en paramètre.
Pour le code précédent, ça donnerait quelque chose comme cela :
Tbl = AjtPt(P1, Tbl )
Tbl = AjtPt(P2, Tbl )
Tbl = AjtPt(P3, Tbl )
Tbl = AjtPt(P4, Tbl )
Tbl = AjtPt(P5, Tbl )
Plus simple à coder, non ? :)
Autre avantage, plus besoin de connaitre la taille de la polyligne au début, la taille du tableau est réglée dynamiquement en fonction du nombre de points.
Pour finir, un exemple concret. Dans le code suivant, la procédure principale TracerUnePolyligneDeQuatrePoints on clique 4 fois dans l'espace objet et une polyligne passant par les 4 points cliqués est tracée.
Sub TracerUnePolyligneDeQuatrePoints ()
Dim P1 As Variant
Dim tabCoordonnees
Dim i As Integer
'Saisie de 4 points
For i = 1 To 4
P1 = ThisDrawing.Utility.GetPoint(, "Cliquer un point")
tabCoordonnees = AjtPt(P1, tabCoordonnees)
Next i
'Trace la polyligne dans l'espace objet avec le tableau de coordonnées
'renseigné avec la fonction AjtPt
ThisDrawing.ModelSpace.AddLightWeightPolyline tabCoordonnees
End Sub
'Cette fonction ajoute les coordonnées (x,y) du point P1 donné
'en paramètre au tableau tabCoord donné en paramètre
'Elle renvoie un tableau de nombres type "Double" pouvant servir
'de de tableau de coordonnées pour une polyligne
'-------------------------------------------------------------------
'V.1 05/05/2012 - AutoCAD et VBA - http://autocadvba.canalblog.com/
'-------------------------------------------------------------------
Private Function AjtPt(P1 As Variant, tabCoord) As Variant
Dim tableau() As Double
Dim NbVal As Integer
If IsEmpty(tabCoord) Then
ReDim tableau(0 To 1)
tableau(0) = P1(0)
tableau(1) = P1(1)
Else
tableau = tabCoord
NbVal = UBound(tableau)
ReDim Preserve tableau(0 To NbVal + 2)
tableau(NbVal + 1) = P1(0)
tableau(NbVal + 2) = P1(1)
End If
AjtPt = tableau
End Function
A vos commentaires ! :)