' dh42 / 12/2013

' détecter si une polyligne est contenue dans une autre
' si intersection des 2 polylignes, la polyligne sera 
' considérée comme contenue ; il faudra donc aussi
' tester si il y a intesection.

' ce code ne fonctionne qu'avec des polylignes, il faudra donc
' convertir tous les objets de dessin en polyligne au préalable.
' créer quelque polylignes pour le tests ; la zone de test est un rectangle de 100x60
' coin inférieur gauche à 0,0
' suivant que les polylignes sont contenus ou non, ou croisent cette zone
' le résultat obtenu dans la fenêtre de messages sera différent.

'-----------------------------------------------------------------------------
' detecting whether a polyline is contained in another. 
' If intersection of two polylines, the polyline will be considered contained, 
' in this case it will therefore also needed to test  if they intesect.

' This code works only with polylines
' creates some polylines the test zone is 100x60 with lowerleft corner to 0,0 
' depending if a polyline is contained or not in this zone (or cross), you obtain
' differents results in the log window.

Sub main()


    'créer une polyligne conteneur mais sans l'afficher, ce qui n'empèche pas d'utiliser
    'la polyligne créée (mais elle ne sera pas sélectionnée par SelectAll...)

    ' Create a polyline 'container' but without display it, which does not preclude the ability to use it.    
    '(but it will not be selected by SelectAll ...)

    Dim conteneur = New Polyline()

    conteneur.Add(0, 0, 0)
    conteneur.Add(100, 0, 0)
    conteneur.Add(100, 60, 0)
    conteneur.Add(0, 60, 0)
    conteneur.Closed = True


    Dim ent As Entity

    'selectionne toutes les entitées du calque courant
    'select all entities on active layer

    CamBamUI.MainUI.ActiveView.SelectAllLayerGeometry(CamBamUI.MainUI.ActiveView.CADFile.ActiveLayer())

    Dim p = New Polyline()

    Dim b1 As Boolean   ' contenu (is contained)
    Dim b2 As Boolean   ' intersection (intersect)
    Dim rep As String   ' chaine de réponse (return string)

    For Each ent In CamBamUI.MainUI.ActiveView.SelectedEntities   'scanner la sélection (scan for entities in the selection)

        p = ent ' convert 'pointer entity' -> 'pointer Polyligne'

        'retourne vrai si p est incluse dans 'conteneur' ou si intersection avec lui.
        ' return True if p is contained or intersect with the 'container'.

        b1 = conteneur.PolylineInsidePolyline(p)

        'retourne vrai si intersection entre les 2.
        'return True if p intersect with the 'container'

        b2 = conteneur.Intersects(p)

        rep = "PolyLigne: " & p.ID & " Contenue: " & b1 & " - Intersection: " & b2

        App.Log(rep)    'sortie dans fenetre de messages (output to message windows)

    Next ent

    'affiche le conteneur (qui n'a pas été sélectionné lors de la sélection
    ' du contenu du calque car il n'était pas affiché à ce moment)

    'displays the 'container' (it was not selected when selecting
    'the layer's content because it was not displayedat this time )

    doc.Add(conteneur)

End Sub