<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Preventing Self-Intersecting Polygons in ArcPad Questions</title>
    <link>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366739#M2645</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you. Works like a charm!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 19 Aug 2015 18:25:13 GMT</pubDate>
    <dc:creator>IngridHogle</dc:creator>
    <dc:date>2015-08-19T18:25:13Z</dc:date>
    <item>
      <title>Preventing Self-Intersecting Polygons</title>
      <link>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366736#M2642</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've been testing out this code to detect self-intersecting polygons in ArcPad, but I am getting inconsistent results including a LOT of false positives and some false negatives. I cannot figure out the pattern to the problem. This is based on the code here: &lt;A href="http://gis.stackexchange.com/questions/9580/how-to-determine-if-a-polygon-is-self-intersecting-using-either-arcpad-8-0-or-ar/21972#21972" title="http://gis.stackexchange.com/questions/9580/how-to-determine-if-a-polygon-is-self-intersecting-using-either-arcpad-8-0-or-ar/21972#21972"&gt;How to determine if a polygon is self-intersecting using either ArcPad 8.0 or ArcMap 9.3.1? - Geographic Information Sys…&lt;/A&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is the issue trying to test this in the office, rather than with real GPS-collected data?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;Sub CheckSelfIntersectingPolygon(objSH)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim intJ, intI, objPart, objVertex, strVertexNo&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Initialize intJ&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intJ = 1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Display information for each part of the feature&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each objPart in objSH.Parts&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'MsgBox "Part " &amp;amp; intJ &amp;amp; " contains " &amp;amp; objPart.Count &amp;amp; " vertices.",vbOKOnly," Vertex Count"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Initialize intI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intI = 1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Display information for each vertex in the current part&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each objVertex in objPart&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strVertexNo = "vertex(" &amp;amp; intI &amp;amp; ") " &amp;amp; objSH.isPointIn(objVertex)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'console.print strVertexNo&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if objSH.isPointIn(objVertex) = "True" then&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msgbox "This is a self intersecting polygon. You will need to recollect it." &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '&amp;amp; VBCr &amp;amp; strVertexNo&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit sub&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Increment intI&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intI = intI + 1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Increment intJ&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intJ = intJ + 1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="font-size: 9.0pt; color: #1f497d;"&gt;End Sub&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Aug 2015 05:53:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366736#M2642</guid>
      <dc:creator>IngridHogle</dc:creator>
      <dc:date>2015-08-08T05:53:58Z</dc:date>
    </item>
    <item>
      <title>Re: Preventing Self-Intersecting Polygons</title>
      <link>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366737#M2643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ingrid, here is the script I sent you - posted here as requested for others to use:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Option Explicit

Sub TestIt()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (Map.SelectionLayer Is Nothing) Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim pRS
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pRS = Map.SelectionLayer.Records
&amp;nbsp;&amp;nbsp;&amp;nbsp; pRS.Bookmark = Map.SelectionBookmark

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim pPoly
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pPoly = pRS.Fields.Shape

&amp;nbsp;&amp;nbsp;&amp;nbsp; msgbox "Self intersects: " &amp;amp; IsSelfIntersectingPoly(pPoly)

End Sub

Call TestIt()


Function IsSelfIntersectingPoly(p_pPolygon)
&amp;nbsp;&amp;nbsp;&amp;nbsp; '++ if input shape is not a polygon, return false
&amp;nbsp;&amp;nbsp;&amp;nbsp; If (TypeName(p_pPolygon) &amp;lt;&amp;gt; "ISPolygon") Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsSelfIntersecting = False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; '++ build segments
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim pLineSeg, pPts, pPt
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim arrSegments()
&amp;nbsp;&amp;nbsp;&amp;nbsp; ReDim arrSegments(p_pPolygon.Parts(1).Count - 2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim iSegCt
&amp;nbsp;&amp;nbsp;&amp;nbsp; For iSegCt = 1 To UBound(arrSegments)+1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pLineSeg = Application.CreateAppObject("Line")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pPts = Application.CreateAppObject("Points")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pPt = p_pPolygon.Parts(1)(iSegCt)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pPts.Add pPt
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pPt = p_pPolygon.Parts(1)(iSegCt+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pPts.Add pPt
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pLineSeg.Parts.Add pPts
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set arrSegments(iSegCt-1) = pLineSeg
&amp;nbsp;&amp;nbsp;&amp;nbsp; Next

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim i,j
&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 0 To UBound(arrSegments) - 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For j = (i+1) To UBound(arrSegments)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (DoLineSegmentsCross(arrSegments(i),arrSegments(j))) Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsSelfIntersectingPoly = True
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next
&amp;nbsp;&amp;nbsp;&amp;nbsp; Next
&amp;nbsp;&amp;nbsp;&amp;nbsp; IsSelfIntersectingPoly = False
End Function

'++ Routines below adapted from Peter Kelley's solution posted at:
'++ &lt;A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=https://github.com/pgkelley4/line-segments-intersect/blob/master/js/line-segments-intersect.js" target="_blank"&gt;https://github.com/pgkelley4/line-segments-intersect/blob/master/js/line-segments-intersect.js&lt;/A&gt;
Function DoLineSegmentsCross(p_Seg1, p_Seg2)

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim pSeg1Pt1, pSeg1Pt2, pSeg2Pt1, pSeg2Pt2
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pSeg1Pt1 = p_Seg1.Parts(1)(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pSeg1Pt2 = p_Seg1.Parts(1)(2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pSeg2Pt1 = p_Seg2.Parts(1)(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pSeg2Pt2 = p_Seg2.Parts(1)(2)

&amp;nbsp;&amp;nbsp;&amp;nbsp; '++ intersection at nodes is ok
&amp;nbsp;&amp;nbsp;&amp;nbsp; If (EqualPoints(pSeg1Pt1, pSeg2Pt1) Or EqualPoints(pSeg1Pt1, pSeg2Pt2) Or EqualPoints(pSeg1Pt2, pSeg2Pt1) Or EqualPoints(pSeg1Pt2, pSeg2Pt2)) Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DoLineSegmentsCross = False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim r,s
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set r = SubtractPoints(pSeg1Pt2, pSeg1Pt1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set s = SubtractPoints(pSeg2Pt2, pSeg2Pt1)

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim uNumerator,denominator
&amp;nbsp;&amp;nbsp;&amp;nbsp; uNumerator = CrossProduct(SubtractPoints(pSeg2Pt1, pSeg1Pt1), r)
&amp;nbsp;&amp;nbsp;&amp;nbsp; denominator = CrossProduct(r, s)

&amp;nbsp;&amp;nbsp;&amp;nbsp; If (uNumerator = 0 And denominator = 0) Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '++ they are colinear
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '++ do they overlap? (are all the point differences in either direction the same sign?)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim bOverlapTest
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bOverlapTest = ((pSeg2Pt1.x - pSeg1Pt1.x &amp;lt; 0) XOr (pSeg2Pt1.x - pSeg1Pt2.x &amp;lt; 0) Xor (pSeg2Pt2.x - pSeg1Pt1.x &amp;lt; 0) Xor (pSeg2Pt2.x - pSeg1Pt2.x &amp;lt; 0)) Or _
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((pSeg2Pt1.y - pSeg1Pt1.y &amp;lt; 0) XOr (pSeg2Pt1.y - pSeg1Pt2.y &amp;lt; 0) XOr (pSeg2Pt2.y - pSeg1Pt1.y &amp;lt; 0) XOr (pSeg2Pt2.y - pSeg1Pt2.y &amp;lt; 0))

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DoLineSegmentsCross = bOverlapTest
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; If (denominator = 0) Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '++ lines are parallel
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DoLineSegmentsCross = False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim u,t
&amp;nbsp;&amp;nbsp;&amp;nbsp; u = uNumerator / denominator
&amp;nbsp;&amp;nbsp;&amp;nbsp; t = CrossProduct(SubtractPoints(pSeg2Pt1, pSeg1Pt1), s) / denominator

&amp;nbsp;&amp;nbsp;&amp;nbsp; DoLineSegmentsCross = ((t &amp;gt;= 0) And (t &amp;lt;= 1) And (u &amp;gt;= 0) And (u &amp;lt;= 1))
End Function


Function CrossProduct(p_P1, p_P2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; CrossProduct = p_P1.X * p_P2.Y - p_P1.Y * p_P2.X
End Function

Function SubtractPoints(p_P1, p_P2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim pResultPt
&amp;nbsp;&amp;nbsp;&amp;nbsp; Set pResultPt = Application.CreateAppObject("Point")
&amp;nbsp;&amp;nbsp;&amp;nbsp; pResultPt.X = p_P1.X - p_P2.X
&amp;nbsp;&amp;nbsp;&amp;nbsp; pResultPt.Y = p_P1.Y - p_P2.Y

&amp;nbsp;&amp;nbsp;&amp;nbsp; Set SubtractPoints = pResultPt
End Function

Function EqualPoints(p_P1, p_P2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; EqualPoints = (p_P1.X = p_P2.X) And (p_P1.Y = p_P2.Y)
End Function&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 17:02:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366737#M2643</guid>
      <dc:creator>CraigGreenwald</dc:creator>
      <dc:date>2021-12-11T17:02:17Z</dc:date>
    </item>
    <item>
      <title>Re: Preventing Self-Intersecting Polygons</title>
      <link>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366738#M2644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Craig,&lt;/P&gt;&lt;P&gt;Thanks for posting.&amp;nbsp; But can you edit the post and try &lt;A href="https://community.esri.com/migration-blogpost/1070"&gt;Posting Code blocks in the new GeoNet&lt;/A&gt;​&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Aug 2015 18:24:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366738#M2644</guid>
      <dc:creator>RebeccaStrauch__GISP</dc:creator>
      <dc:date>2015-08-19T18:24:24Z</dc:date>
    </item>
    <item>
      <title>Re: Preventing Self-Intersecting Polygons</title>
      <link>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366739#M2645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you. Works like a charm!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Aug 2015 18:25:13 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcpad-questions/preventing-self-intersecting-polygons/m-p/366739#M2645</guid>
      <dc:creator>IngridHogle</dc:creator>
      <dc:date>2015-08-19T18:25:13Z</dc:date>
    </item>
  </channel>
</rss>

