<?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>idea Revit API request: EdgeArrayArray should have an Outerloop property en Revit Ideas</title>
    <link>https://forums.autodesk.com/t5/revit-ideas/revit-api-request-edgearrayarray-should-have-an-outerloop/idi-p/13011170</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is an issue creating a headache and unexpected results for Revit API users:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please refer to the following for some background. Mr Jeremy&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;Tammik&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/824630" target="_self"&gt;&lt;SPAN class=""&gt;jeremy_tammik recommended that an idea be created for this.&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/13011048/highlight/true#M81376" target="_blank" rel="noopener"&gt;https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/13011048/highlight/true#M81376&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What is happening?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The API ought to implement a new functionality that would be very handy for API users.&lt;/LI&gt;&lt;LI&gt;Right now, API users have to do a lot of work that is uncessessary, and that should be (in my opinion) a core part of the library.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to be able to do this, for example:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;EdgeArray edgeArray =&amp;nbsp;edgeArrayArrays.OuterLoop;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;One single line of code. Instead, I have to implement all of this - and the only reason we have this code is because&amp;nbsp;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/909070"&gt;@stefanome&lt;/a&gt; very generously provided it to the community.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;A href="https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/10242847/highlight/true#M55285" target="_blank" rel="noopener"&gt;https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/10242847/highlight/true#M55285&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;public static &lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;SortCurveLoops&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;Face &lt;/SPAN&gt;&lt;SPAN&gt;face)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;allLoops = face.&lt;/SPAN&gt;&lt;SPAN&gt;GetEdgesAsCurveLoops&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;Select&lt;/SPAN&gt;&lt;SPAN&gt;(loop &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;(loop, face)).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;outerLoops = allLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Where&lt;/SPAN&gt;&lt;SPAN&gt;(loop &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;loop.&lt;/SPAN&gt;&lt;SPAN&gt;IsCounterclockwise&lt;/SPAN&gt;&lt;SPAN&gt;).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;innerLoops = allLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Where&lt;/SPAN&gt;&lt;SPAN&gt;(loop &lt;/SPAN&gt;=&amp;gt; !&lt;SPAN&gt;outerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Contains&lt;/SPAN&gt;&lt;SPAN&gt;(loop)).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;// sort outerLoops putting last the ones that are outside all the preceding loops&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;bool &lt;/SPAN&gt;&lt;SPAN&gt;somethingHasChanged;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;do&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        somethingHasChanged = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;i = &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;; i &amp;lt; outerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;()&lt;/SPAN&gt;&lt;SPAN&gt;; i++)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        {&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;point = outerLoops[i].&lt;/SPAN&gt;&lt;SPAN&gt;StartPointUV&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;loop = outerLoops[i - &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(loop.&lt;/SPAN&gt;&lt;SPAN&gt;IsPointInside&lt;/SPAN&gt;&lt;SPAN&gt;(point) &lt;/SPAN&gt;&lt;SPAN&gt;is &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Inside&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            {&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;tmp = outerLoops[i];&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                outerLoops[i] = outerLoops[i - &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;];&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                outerLoops[i - &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;] = tmp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                somethingHasChanged = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    } &lt;/SPAN&gt;&lt;SPAN&gt;while &lt;/SPAN&gt;&lt;SPAN&gt;(somethingHasChanged);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;result = &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;();&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;foreach &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;outerLoop &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;outerLoops)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    {&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;list = &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; {outerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;Loop3d&lt;/SPAN&gt;&lt;SPAN&gt;};&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;i = innerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Count &lt;/SPAN&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;; i &amp;gt;= &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;; i--)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        {&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;innerLoop = innerLoops[i];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(outerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;() &lt;/SPAN&gt;&lt;SPAN&gt;== &lt;/SPAN&gt;&lt;SPAN&gt;1 &lt;/SPAN&gt;&lt;SPAN&gt;// skip testing whether the inner loop is inside the outer loop&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;|| outerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;IsPointInside&lt;/SPAN&gt;&lt;SPAN&gt;(innerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;StartPointUV&lt;/SPAN&gt;&lt;SPAN&gt;) == &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Inside&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            {&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                list.&lt;/SPAN&gt;&lt;SPAN&gt;Add&lt;/SPAN&gt;&lt;SPAN&gt;(innerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;Loop3d&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                innerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;RemoveAt&lt;/SPAN&gt;&lt;SPAN&gt;(i);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        result.&lt;/SPAN&gt;&lt;SPAN&gt;Add&lt;/SPAN&gt;&lt;SPAN&gt;(list);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;result;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;class &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV &lt;/SPAN&gt;: &lt;SPAN&gt;IEnumerable&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Curve&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public enum &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;Outside&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;OnTheEdge&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;Inside&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;}&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop &lt;/SPAN&gt;&lt;SPAN&gt;Loop3d &lt;/SPAN&gt;&lt;SPAN&gt;{ &lt;/SPAN&gt;&lt;SPAN&gt;get&lt;/SPAN&gt;&lt;SPAN&gt;; }&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;private readonly &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop &lt;/SPAN&gt;&lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public readonly double &lt;/SPAN&gt;&lt;SPAN&gt;MinX&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;MaxX&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;MinY&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;MaxY&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop &lt;/SPAN&gt;&lt;SPAN&gt;curveLoop, &lt;/SPAN&gt;&lt;SPAN&gt;Face &lt;/SPAN&gt;&lt;SPAN&gt;face)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    {&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;Loop3d &lt;/SPAN&gt;&lt;SPAN&gt;= curveLoop;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;_loop2d &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;points3d = &lt;/SPAN&gt;&lt;SPAN&gt;Loop3d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;SelectMany&lt;/SPAN&gt;&lt;SPAN&gt;(curve &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;curve.&lt;/SPAN&gt;&lt;SPAN&gt;Tessellate&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;Skip&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;pointsUv = points3d.&lt;/SPAN&gt;&lt;SPAN&gt;Select&lt;/SPAN&gt;&lt;SPAN&gt;(point3d &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;face.&lt;/SPAN&gt;&lt;SPAN&gt;Project&lt;/SPAN&gt;&lt;SPAN&gt;(point3d).&lt;/SPAN&gt;&lt;SPAN&gt;UVPoint&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;points2d = pointsUv.&lt;/SPAN&gt;&lt;SPAN&gt;Select&lt;/SPAN&gt;&lt;SPAN&gt;(pointUv &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;&lt;SPAN&gt;(pointUv.&lt;/SPAN&gt;&lt;SPAN&gt;U&lt;/SPAN&gt;&lt;SPAN&gt;, pointUv.&lt;/SPAN&gt;&lt;SPAN&gt;V&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;)).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;MinX &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;MinY &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;1.0e100&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;MaxX &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;MaxY &lt;/SPAN&gt;&lt;SPAN&gt;= -&lt;/SPAN&gt;&lt;SPAN&gt;1.0e100&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;nPoints = points2d.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;()&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;i = &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;; i &amp;lt; nPoints; i++)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        {&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;p1 = points2d[i];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;p2 = points2d[(i + &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;) % nPoints];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Append&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;Line&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;CreateBound&lt;/SPAN&gt;&lt;SPAN&gt;(p1, p2));&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;X &lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;MinX&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MinX &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;X&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;MinY&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MinY &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;X &lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;MaxX&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MaxX &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;X&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;MaxY&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MaxY &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation &lt;/SPAN&gt;&lt;SPAN&gt;IsPointInside&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;XYZ &lt;/SPAN&gt;&lt;SPAN&gt;point)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    {&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(point.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;+ &lt;/SPAN&gt;&lt;SPAN&gt;Eps &lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;MinY &lt;/SPAN&gt;&lt;SPAN&gt;|| point.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;+ &lt;/SPAN&gt;&lt;SPAN&gt;Eps &lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;MaxY&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Outside&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Any&lt;/SPAN&gt;&lt;SPAN&gt;(curve &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;curve.&lt;/SPAN&gt;&lt;SPAN&gt;Distance&lt;/SPAN&gt;&lt;SPAN&gt;(point) &amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;Eps&lt;/SPAN&gt;&lt;SPAN&gt;))&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;OnTheEdge&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;line = &lt;/SPAN&gt;&lt;SPAN&gt;Line&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;CreateBound&lt;/SPAN&gt;&lt;SPAN&gt;(point, &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;1.0e100&lt;/SPAN&gt;&lt;SPAN&gt;, point.&lt;/SPAN&gt;&lt;SPAN&gt;Y&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;nIntersections = &lt;/SPAN&gt;&lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;(edge &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;edge.&lt;/SPAN&gt;&lt;SPAN&gt;Intersect&lt;/SPAN&gt;&lt;SPAN&gt;(line) == &lt;/SPAN&gt;&lt;SPAN&gt;SetComparisonResult&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Overlap&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;nIntersections % &lt;/SPAN&gt;&lt;SPAN&gt;2 &lt;/SPAN&gt;&lt;SPAN&gt;== &lt;/SPAN&gt;&lt;SPAN&gt;1 &lt;/SPAN&gt;? &lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Inside &lt;/SPAN&gt;: &lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Outside&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public bool &lt;/SPAN&gt;&lt;SPAN&gt;IsCounterclockwise &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;IsCounterclockwise&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;BasisZ&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;XYZ &lt;/SPAN&gt;&lt;SPAN&gt;StartPointUV &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;First&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;GetEndPoint&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;IEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Curve&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;() &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;IEnumerator IEnumerable&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;() &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 10 Sep 2024 09:03:15 GMT</pubDate>
    <dc:creator>BKSpurgeon</dc:creator>
    <dc:date>2024-09-10T09:03:15Z</dc:date>
    <item>
      <title>Revit API request: EdgeArrayArray should have an Outerloop property</title>
      <link>https://forums.autodesk.com/t5/revit-ideas/revit-api-request-edgearrayarray-should-have-an-outerloop/idi-p/13011170</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is an issue creating a headache and unexpected results for Revit API users:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please refer to the following for some background. Mr Jeremy&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;Tammik&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/824630" target="_self"&gt;&lt;SPAN class=""&gt;jeremy_tammik recommended that an idea be created for this.&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/13011048/highlight/true#M81376" target="_blank" rel="noopener"&gt;https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/13011048/highlight/true#M81376&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What is happening?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The API ought to implement a new functionality that would be very handy for API users.&lt;/LI&gt;&lt;LI&gt;Right now, API users have to do a lot of work that is uncessessary, and that should be (in my opinion) a core part of the library.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to be able to do this, for example:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;EdgeArray edgeArray =&amp;nbsp;edgeArrayArrays.OuterLoop;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;One single line of code. Instead, I have to implement all of this - and the only reason we have this code is because&amp;nbsp;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/909070"&gt;@stefanome&lt;/a&gt; very generously provided it to the community.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;A href="https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/10242847/highlight/true#M55285" target="_blank" rel="noopener"&gt;https://forums.autodesk.com/t5/revit-api-forum/is-the-first-edgeloop-still-the-outer-loop/m-p/10242847/highlight/true#M55285&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;public static &lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;SortCurveLoops&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;Face &lt;/SPAN&gt;&lt;SPAN&gt;face)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;allLoops = face.&lt;/SPAN&gt;&lt;SPAN&gt;GetEdgesAsCurveLoops&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;Select&lt;/SPAN&gt;&lt;SPAN&gt;(loop &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;(loop, face)).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;outerLoops = allLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Where&lt;/SPAN&gt;&lt;SPAN&gt;(loop &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;loop.&lt;/SPAN&gt;&lt;SPAN&gt;IsCounterclockwise&lt;/SPAN&gt;&lt;SPAN&gt;).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;innerLoops = allLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Where&lt;/SPAN&gt;&lt;SPAN&gt;(loop &lt;/SPAN&gt;=&amp;gt; !&lt;SPAN&gt;outerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Contains&lt;/SPAN&gt;&lt;SPAN&gt;(loop)).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;// sort outerLoops putting last the ones that are outside all the preceding loops&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;bool &lt;/SPAN&gt;&lt;SPAN&gt;somethingHasChanged;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;do&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        somethingHasChanged = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;i = &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;; i &amp;lt; outerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;()&lt;/SPAN&gt;&lt;SPAN&gt;; i++)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        {&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;point = outerLoops[i].&lt;/SPAN&gt;&lt;SPAN&gt;StartPointUV&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;loop = outerLoops[i - &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(loop.&lt;/SPAN&gt;&lt;SPAN&gt;IsPointInside&lt;/SPAN&gt;&lt;SPAN&gt;(point) &lt;/SPAN&gt;&lt;SPAN&gt;is &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Inside&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            {&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;tmp = outerLoops[i];&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                outerLoops[i] = outerLoops[i - &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;];&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                outerLoops[i - &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;] = tmp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                somethingHasChanged = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    } &lt;/SPAN&gt;&lt;SPAN&gt;while &lt;/SPAN&gt;&lt;SPAN&gt;(somethingHasChanged);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;result = &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&amp;gt;();&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;foreach &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;outerLoop &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;&lt;SPAN&gt;outerLoops)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    {&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;list = &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; {outerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;Loop3d&lt;/SPAN&gt;&lt;SPAN&gt;};&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;i = innerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Count &lt;/SPAN&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;; i &amp;gt;= &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;; i--)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        {&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;innerLoop = innerLoops[i];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(outerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;() &lt;/SPAN&gt;&lt;SPAN&gt;== &lt;/SPAN&gt;&lt;SPAN&gt;1 &lt;/SPAN&gt;&lt;SPAN&gt;// skip testing whether the inner loop is inside the outer loop&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;|| outerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;IsPointInside&lt;/SPAN&gt;&lt;SPAN&gt;(innerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;StartPointUV&lt;/SPAN&gt;&lt;SPAN&gt;) == &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Inside&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            {&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                list.&lt;/SPAN&gt;&lt;SPAN&gt;Add&lt;/SPAN&gt;&lt;SPAN&gt;(innerLoop.&lt;/SPAN&gt;&lt;SPAN&gt;Loop3d&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                innerLoops.&lt;/SPAN&gt;&lt;SPAN&gt;RemoveAt&lt;/SPAN&gt;&lt;SPAN&gt;(i);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        result.&lt;/SPAN&gt;&lt;SPAN&gt;Add&lt;/SPAN&gt;&lt;SPAN&gt;(list);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;result;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN&gt;class &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV &lt;/SPAN&gt;: &lt;SPAN&gt;IEnumerable&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Curve&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public enum &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;{&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;Outside&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;OnTheEdge&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;Inside&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;}&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop &lt;/SPAN&gt;&lt;SPAN&gt;Loop3d &lt;/SPAN&gt;&lt;SPAN&gt;{ &lt;/SPAN&gt;&lt;SPAN&gt;get&lt;/SPAN&gt;&lt;SPAN&gt;; }&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;private readonly &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop &lt;/SPAN&gt;&lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public readonly double &lt;/SPAN&gt;&lt;SPAN&gt;MinX&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;MaxX&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;MinY&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;MaxY&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoopUV&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop &lt;/SPAN&gt;&lt;SPAN&gt;curveLoop, &lt;/SPAN&gt;&lt;SPAN&gt;Face &lt;/SPAN&gt;&lt;SPAN&gt;face)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    {&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;Loop3d &lt;/SPAN&gt;&lt;SPAN&gt;= curveLoop;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;_loop2d &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;CurveLoop&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        &lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;points3d = &lt;/SPAN&gt;&lt;SPAN&gt;Loop3d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;SelectMany&lt;/SPAN&gt;&lt;SPAN&gt;(curve &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;curve.&lt;/SPAN&gt;&lt;SPAN&gt;Tessellate&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;Skip&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;pointsUv = points3d.&lt;/SPAN&gt;&lt;SPAN&gt;Select&lt;/SPAN&gt;&lt;SPAN&gt;(point3d &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;face.&lt;/SPAN&gt;&lt;SPAN&gt;Project&lt;/SPAN&gt;&lt;SPAN&gt;(point3d).&lt;/SPAN&gt;&lt;SPAN&gt;UVPoint&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;points2d = pointsUv.&lt;/SPAN&gt;&lt;SPAN&gt;Select&lt;/SPAN&gt;&lt;SPAN&gt;(pointUv &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;&lt;SPAN&gt;(pointUv.&lt;/SPAN&gt;&lt;SPAN&gt;U&lt;/SPAN&gt;&lt;SPAN&gt;, pointUv.&lt;/SPAN&gt;&lt;SPAN&gt;V&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;)).&lt;/SPAN&gt;&lt;SPAN&gt;ToList&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;MinX &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;MinY &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;1.0e100&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;MaxX &lt;/SPAN&gt;&lt;SPAN&gt;= &lt;/SPAN&gt;&lt;SPAN&gt;MaxY &lt;/SPAN&gt;&lt;SPAN&gt;= -&lt;/SPAN&gt;&lt;SPAN&gt;1.0e100&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;nPoints = points2d.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;()&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;i = &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;; i &amp;lt; nPoints; i++)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        {&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;p1 = points2d[i];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;p2 = points2d[(i + &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;) % nPoints];&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Append&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;Line&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;CreateBound&lt;/SPAN&gt;&lt;SPAN&gt;(p1, p2));&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;X &lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;MinX&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MinX &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;X&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;MinY&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MinY &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;X &lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;MaxX&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MaxX &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;X&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;MaxY&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN&gt;MaxY &lt;/SPAN&gt;&lt;SPAN&gt;= p1.&lt;/SPAN&gt;&lt;SPAN&gt;Y&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation &lt;/SPAN&gt;&lt;SPAN&gt;IsPointInside&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;XYZ &lt;/SPAN&gt;&lt;SPAN&gt;point)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    {&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(point.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;+ &lt;/SPAN&gt;&lt;SPAN&gt;Eps &lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;MinY &lt;/SPAN&gt;&lt;SPAN&gt;|| point.&lt;/SPAN&gt;&lt;SPAN&gt;Y &lt;/SPAN&gt;&lt;SPAN&gt;+ &lt;/SPAN&gt;&lt;SPAN&gt;Eps &lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;MaxY&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Outside&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Any&lt;/SPAN&gt;&lt;SPAN&gt;(curve &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;curve.&lt;/SPAN&gt;&lt;SPAN&gt;Distance&lt;/SPAN&gt;&lt;SPAN&gt;(point) &amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;Eps&lt;/SPAN&gt;&lt;SPAN&gt;))&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;OnTheEdge&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;line = &lt;/SPAN&gt;&lt;SPAN&gt;Line&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;CreateBound&lt;/SPAN&gt;&lt;SPAN&gt;(point, &lt;/SPAN&gt;&lt;SPAN&gt;new &lt;/SPAN&gt;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;1.0e100&lt;/SPAN&gt;&lt;SPAN&gt;, point.&lt;/SPAN&gt;&lt;SPAN&gt;Y&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;var &lt;/SPAN&gt;&lt;SPAN&gt;nIntersections = &lt;/SPAN&gt;&lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Count&lt;/SPAN&gt;&lt;SPAN&gt;(edge &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;edge.&lt;/SPAN&gt;&lt;SPAN&gt;Intersect&lt;/SPAN&gt;&lt;SPAN&gt;(line) == &lt;/SPAN&gt;&lt;SPAN&gt;SetComparisonResult&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Overlap&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;nIntersections % &lt;/SPAN&gt;&lt;SPAN&gt;2 &lt;/SPAN&gt;&lt;SPAN&gt;== &lt;/SPAN&gt;&lt;SPAN&gt;1 &lt;/SPAN&gt;? &lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Inside &lt;/SPAN&gt;: &lt;SPAN&gt;PointLocation&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;Outside&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    }&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public bool &lt;/SPAN&gt;&lt;SPAN&gt;IsCounterclockwise &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;IsCounterclockwise&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;XYZ&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;BasisZ&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;XYZ &lt;/SPAN&gt;&lt;SPAN&gt;StartPointUV &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;First&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;GetEndPoint&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;public &lt;/SPAN&gt;&lt;SPAN&gt;IEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN&gt;Curve&lt;/SPAN&gt;&lt;SPAN&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;() &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;_loop2d&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;IEnumerator IEnumerable&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;() &lt;/SPAN&gt;=&amp;gt; &lt;SPAN&gt;GetEnumerator&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 10 Sep 2024 09:03:15 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-ideas/revit-api-request-edgearrayarray-should-have-an-outerloop/idi-p/13011170</guid>
      <dc:creator>BKSpurgeon</dc:creator>
      <dc:date>2024-09-10T09:03:15Z</dc:date>
    </item>
  </channel>
</rss>

