示例#1
0
        }                                                    //	static LDTriangleList exec(LDPointList form,LDIndexLineList limitedLines);//TODO ,LDProgress progress

        private static void triangulationFromPoint(LDPointList form, LDPoint p, LDTriangleList triangles)
        {
            //  A2-1)   piを含む三角形ABCを発見し, この三角形をAB pi, BC pi, CA pi の3個の三角形に分割.
            //          この時, 辺AB, BC, CAをスタックSに積む (最初の一点のときには,super triangleが見つかる)
            for (int i = 0; i < triangles.length();)
            {
                LDTriangle t = triangles[i];

                if (!TriangleUtil.containsPoint(t.toPolygon(form), p))
                {
                    //対象の三角形の外側なら次へ
                    i++;
                    continue;
                }

                // 古い三角形をリストから削除して、分割した三角形を追加
                triangles.RemoveAll(item => item == t);

                int index = form.IndexOf(p);
                Debug.Assert(index >= 0);
                triangles.Add(new LDTriangle(index, t.getIndex1(), t.getIndex2()));
                triangles.Add(new LDTriangle(index, t.getIndex2(), t.getIndex3()));
                triangles.Add(new LDTriangle(index, t.getIndex3(), t.getIndex1()));

                //TODO すでにある線分で制限する機能が未移植
                //		if ( limitLineList.size() != 0 )
                //		{
                //			flipCheckWithLimit( t.p1, t.p2, t.p3 , pg );
                //		}
                //		else
                //		{
                optimizePolygonSeparate(form, t, triangles);
                //		}
            }
        }