VBA AutoCAD : intersection d'une entité avec une référence de bloc

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.

Etiquettes:

Add new comment