How To: Determine if a polygon intersects itself


MapObjects can work with self-intersecting polygons, such as a figure-8; however, the MapObjects 2.x geometric algebra methods (Intersect, Union, Xor, Difference) will fail if passed a self-intersecting polygon. Also, SDE layers may not store or work with self-intersecting polygons. Because of these limitations, it may be helpful to know whether a polygon is self-intersecting or not.


To determine if a polygon is self-intersecting using MapObjects, simply intersect the polygon with its own Extent. If the result is Nothing (nil), then the polygon is self-intersecting. The Visual Basic code below demonstrates this technique.

Option Explicit
Dim iPoly As MapObjects2.Polygon

Private Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)

Dim sym As New MapObjects2.Symbol
sym.SymbolType = moFillSymbol
sym.Color = moRed

If Not iPoly Is Nothing Then
Map1.DrawShape iPoly, sym
End If

End Sub

Private Sub Map1_MouseDown(Button As Integer, Shift As Integer,
X As Single, Y As Single)

Dim poly As MapObjects2.Polygon
Dim rect As MapObjects2.Rectangle

Set poly = Map1.TrackPolygon
Set rect = poly.Extent
Set iPoly = poly.Intersect(rect)
If Not iPoly Is Nothing Then
MsgBox "Poly is not valid."
End If

End Sub