VBA pour AutoCAD
Fermé
akram-ing
Messages postés
8
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
28 novembre 2010
-
18 mars 2009 à 11:39
JM - 5 mai 2009 à 23:13
JM - 5 mai 2009 à 23:13
A voir également:
- VBA pour AutoCAD
- Ancienne version autocad gratuite - Télécharger - CAO-DAO
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
1 réponse
Voilà un exemple vite fait sur le gaz qui répond en partie à ta question. Je n'ai pas fait la routine qui parcourt toutes les entités d'un dessin, mais l'idée est là.
Tu sélectionnes une entité sur ton dessin et la macro vba extrait les coordonnées des point (qui sont affichés dans la fenêtre de débogage).
Ca fonctionne pour une polyligne, une spline, un trait simple et un cercle. Pour les autres élements, ça répond "Inconnu" et c'est à toi de compléter suivant tes besoins.
Conseil pour la polyligne (et autres éléments ACAD) :
Les coordonnées sont toujours rangées dans une variable Variant de type tableau. Par exemple, les points composant la polyligne sont rangé dans le tableau coordinates et commence toujours par 0. Par exemple, le premier point de la polyligne sera :
P1:
x1= coordinates(0)
y1= coordinates(1)
P2:
x2= coordinates(2)
y2= coordinates(3)
etc.
(non, il n'y a pas de valeur en z car une polyligne est toujours en 2D)
C'est identique pour les splines, sauf que là, il y a les valeurs en x,y,z et que le tableau où sont rangés s'appelle FitPoints
P1:
x1= FitPoints(0)
y1= FitPoints(1)
z1= FitPoints(2)
etc.
Quand tu ne sais pas trop comment le tableau s'appelle, je te conseille de regarder la fenêtre des variables quand tu fais tourner la macro en pas à pas.
Ceci fait en préliminaire, voici le code :
Bonne chance,
Jean-Marc @ http://autocadvba.canalblog.com/
Tu sélectionnes une entité sur ton dessin et la macro vba extrait les coordonnées des point (qui sont affichés dans la fenêtre de débogage).
Ca fonctionne pour une polyligne, une spline, un trait simple et un cercle. Pour les autres élements, ça répond "Inconnu" et c'est à toi de compléter suivant tes besoins.
Conseil pour la polyligne (et autres éléments ACAD) :
Les coordonnées sont toujours rangées dans une variable Variant de type tableau. Par exemple, les points composant la polyligne sont rangé dans le tableau coordinates et commence toujours par 0. Par exemple, le premier point de la polyligne sera :
P1:
x1= coordinates(0)
y1= coordinates(1)
P2:
x2= coordinates(2)
y2= coordinates(3)
etc.
(non, il n'y a pas de valeur en z car une polyligne est toujours en 2D)
C'est identique pour les splines, sauf que là, il y a les valeurs en x,y,z et que le tableau où sont rangés s'appelle FitPoints
P1:
x1= FitPoints(0)
y1= FitPoints(1)
z1= FitPoints(2)
etc.
Quand tu ne sais pas trop comment le tableau s'appelle, je te conseille de regarder la fenêtre des variables quand tu fais tourner la macro en pas à pas.
Ceci fait en préliminaire, voici le code :
Sub ExtrairePoints() Dim objSelectionne As AcadObject Dim pntPoint As Variant Dim i As Integer On Error GoTo GestErrCdG 'Si la touche Echap est appuyée Do 'mise en boucle de la fonction 'Sélection de la région ThisDrawing.Utility.GetEntity objSelectionne, pntPoint, "Selectionner une polyligne ou cliquer dans le vide pour quitter " 'Vérification de l'objet sélectionné Select Case objSelectionne.ObjectName Case "AcDbPolyline" 'Cas d'une polyligne Dim objPoly As AcadLWPolyline Set objPoly = objSelectionne Debug.Print "Polyligne :" For i = 0 To UBound(objPoly.Coordinates) Step 2 Debug.Print "x=" & objPoly.Coordinates(i) & " , " & "y = " & objPoly.Coordinates(i + 1); "" Next Case "AcDbSpline" 'cas d'une spline Dim objSpline As AcadSpline Set objSpline = objSelectionne Debug.Print "Spline :" For i = 0 To UBound(objSpline.FitPoints) Step 3 Debug.Print "x=" & objSpline.FitPoints(i) & " , " & "y = " & objSpline.FitPoints(i + 1) _ & ", z = " & objSpline.FitPoints(i + 2) Next Case "AcDbLine" 'Cas d'une ligne simple Dim objligne As AcadLine Set objligne = objSelectionne Debug.Print "Ligne simple :" Debug.Print "x=" & objligne.StartPoint(0) & " , " & "y = " & objligne.StartPoint(1) _ & ", z = " & objligne.StartPoint(2) Debug.Print "x=" & objligne.EndPoint(0) & " , " & "y = " & objligne.EndPoint(1) _ & ", z = " & objligne.EndPoint(2) Case "AcDbCircle" 'Cas d'un cercle Dim objCercle As AcadCircle Set objCercle = objSelectionne Debug.Print "Cercle :" Debug.Print "Centre x=" & objCercle.Center(0) & " , " & "y = " & objCercle.Center(1) _ & ", z = " & objCercle.Center(2) Debug.Print "Rayon= " & objCercle.Radius Case Else 'Autre cas MsgBox "Element non reconnu !" 'End If End Select Loop GestErrCdG: 'Gestionnaire d'erreur : sort de la macro quand ECHAP est actionné Exit Sub End Sub
Bonne chance,
Jean-Marc @ http://autocadvba.canalblog.com/