예제 #1
0
파일: P2T.cs 프로젝트: yong-ja/starodyssey
 public static void Triangulate(TriangulationContext tcx)
 {
     switch (tcx.Algorithm) {
     case TriangulationAlgorithm.DTSweep:
     default:
         DTSweep.Triangulate((DTSweepContext)tcx);
         break;
     }
 }
예제 #2
0
        /// <summary>
        /// Creates constraints and populates the context with points
        /// </summary>
        /// <param name="tcx">The context</param>
        public void Prepare(TriangulationContext tcx)
        {
            if (triangles == null)
            {
                triangles = new List<DelaunayTriangle>(points.Count);
            }
            else
            {
                triangles.Clear();
            }

            // Outer constraints
            for (int i = 0; i < points.Count - 1; i++) tcx.NewConstraint(points[i], points[i + 1]);
            tcx.NewConstraint(points[0], points[points.Count - 1]);
            tcx.Points.AddRange(points);

            // Hole constraints
            if (holes != null)
            {
                foreach (Triangulatable p in holes)
                {
                    for (int i = 0; i < p.points.Count - 1; i++) tcx.NewConstraint(p.points[i], p.points[i + 1]);
                    tcx.NewConstraint(p.points[0], p.points[p.points.Count - 1]);
                    tcx.Points.AddRange(p.points);
                }
            }

            if (steinerPoints != null)
            {
                tcx.Points.AddRange(steinerPoints);
            }
        }