En VBA, pour calculer le ou les points d'intersection entre 2 entités, on peut utiliser la méthode ÌntersectWith
. Mais elle ne fonctionne pas correctement si un des deux opérandes est une référence de bloc.
En fait il faut décomposer le bloc et tester l'intersection sur les entités provenant de la décomposition :
Dim line as AcadLine
Dim blockRef as AcadBlockReference
[..]
Dim objs As Variant
objs = blockRef.Explode()
Dim i As Integer
Dim int as Variant
For i = LBound(objs) To UBound(objs)
int = line.IntersectWith(objs(i), acExtendNone)
If UBound(int) = 2 Then
' On a trouvé une intersection, on sort de la boucle
GoTo SortieBoucle
End If
Next i
SortieBoucle:
' On efface les objets provenant de la décomposition
For i = LBound(objs) To UBound(objs)
objs(i).Erase
Next i
Quand IntersectWith
ne trouve pas d'intersection, elle renvoie un tableau de Double avec la borne supérieure à -1. On peut donc utiliser UBound
pour tester le résultat. Ici on prends la première intersection trouvée.
Besoin d'un développement spécifique pour AutoCAD ?
Développement de compléments à AutoCAD et aux autres logiciels Autodesk (AutoCAD Electrical, AutoCAD Mechanical, Inventor, Revit, Vault, Navisworks...). C#/VB/.NET, C++/ObjectARX, AutoLISP, VBA.
Migration de vos projets VBA en .NET, intégration RealDWG dans vos applications, développement sur plateforme AutoCAD OEM et Inventor OEM.
Assistance technique AutoCAD, Inventor, Revit, Vault.
Maxence DELANNOY - Tél. : 06.46.40.75.66 - maxence.delannoy@wiip.fr
|
Ajouter un commentaire