Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
AutoCAD et VBA
5 mai 2012

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 ! :)

 

Publicité
Publicité
Commentaires
E
Un grand merci.<br /> <br /> Je cherchais à faire la même chose mais j'étais bloqué à l'utilisation du tableau dynamique.
AutoCAD et VBA
Publicité
Derniers commentaires
Publicité