Déterminer si un point est contenu dans une polyligne


Pour l'explication de l'algorithme, cliquez ici.

Code V.B.A. pour AutoCAD 2000 :

Public Sub TesteSiPointEstDansLaPolyligne()

  ' Sélection d'une polyligne
  Dim PolyLigne As AcadLWPolyline
  ThisDrawing.Utility.GetEntity PolyLigne, Pt, "Sélectionnez une polyligne"
  PolyLigne.Highlight (True)
   
  ' Saisie d'un point
  Dim Pt1 As Variant
  Pt1 = Utility.GetPoint(, "Point : ")
  
  ' Création d'un rayon horizontal passant par le point
  Dim Pt2(0 To 2) As Double
  Pt2(0) = Pt1(0) + 1
  Pt2(1) = Pt1(1)
  Pt2(2) = Pt1(2)
  Dim Ray As AcadRay
  Set Ray = ModelSpace.AddRay(Pt1, Pt2)
  
  ' Calcul du nombre de points d'intersection
  Dim Points As Variant
  Points = PolyLigne.IntersectWith(Ray, acExtendNone)
  Dim NbrePoints As Integer
  NbrePoints = UBound(Points) / 3
  
  ' Détermination en fonction de la parité
  If NbrePoints Mod 2 = 0 Then
  MsgBox "Le point n'est pas dans le contour"
  Else
  MsgBox "Le point est dans le contour"
  End If
  
  ' Nettoyage
  PolyLigne.Highlight(False)
  Ray.Delete
End Sub