TriangleNet.Mesh.Triangulate C# (CSharp) Method

Triangulate() public method

Triangulate given input data.
public Triangulate ( InputGeometry input ) : void
input TriangleNet.Geometry.InputGeometry
return void
        public void Triangulate(InputGeometry input)
        {
            ResetData();

            behavior.Poly = input.HasSegments;
            //behavior.useSegments = input.HasSegments;

            //if (input.EdgeMarkers != null)
            //{
            //    behavior.UseBoundaryMarkers = true;
            //}

            // TODO: remove
            if (!behavior.Poly)
            {
                // Be careful not to allocate space for element area constraints that
                // will never be assigned any value (other than the default -1.0).
                behavior.VarArea = false;

                // Be careful not to add an extra attribute to each element unless the
                // input supports it (PSLG in, but not refining a preexisting mesh).
                behavior.useRegions = false;
            }

            behavior.useRegions = input.Regions.Count > 0;

            steinerleft = behavior.SteinerPoints;

            TransferNodes(input);

            hullsize = Delaunay(); // Triangulate the vertices.

            // Ensure that no vertex can be mistaken for a triangular bounding
            // box vertex in insertvertex().
            infvertex1 = null;
            infvertex2 = null;
            infvertex3 = null;

            if (behavior.useSegments)
            {
                // Segments will be introduced next.
                checksegments = true;

                // Insert PSLG segments and/or convex hull segments.
                FormSkeleton(input);
            }

            if (behavior.Poly && (triangles.Count > 0))
            {
                // Copy holes
                foreach (var item in input.holes)
                {
                    holes.Add(item);
                }

                // Copy regions
                foreach (var item in input.regions)
                {
                    regions.Add(item);
                }

                //dummytri.neighbors[2].triangle = dummytri;

                // Carve out holes and concavities.
                Carver c = new Carver(this);
                c.CarveHoles();
            }
            else
            {
                // Without a PSLG, there can be no holes or regional attributes
                // or area constraints. The following are set to zero to avoid
                // an accidental free() later.
                //
                // TODO: -
                holes.Clear();
                regions.Clear();
            }

            if (behavior.Quality && (triangles.Count > 0))
            {
                quality.EnforceQuality(); // Enforce angle and area constraints.
            }

            // Calculate the number of edges.
            edges = (3 * triangles.Count + hullsize) / 2;
        }

Same methods

Mesh::Triangulate ( string inputFile ) : void

Usage Example

Ejemplo n.º 1
1
    public Mesh CreateMeshFromPoints(bool combine)
    {
        if (spriteRenderer != null && points.Length > 2) {

            int pointNum = points.Length;
            if (combine && combineMesh != null) {
                pointNum = points.Length + combineMesh.vertices.Length;
            }

            //Create triangle.NET geometry
            TriangleNet.Geometry.InputGeometry geometry = new TriangleNet.Geometry.InputGeometry(pointNum);

            geometry.AddPolygon(points);

            if (combine && combineMesh != null) {
                geometry.AddPolygon(combineMesh.vertices.Select(x => (Vector2)x).ToArray());
            }

            //Triangulate
            TriangleNet.Mesh triangleMesh = new TriangleNet.Mesh();

            triangleMesh.Triangulate(geometry);

            //transform vertices
            points = new Vector2[triangleMesh.Vertices.Count];
            Vector3[] vertices = new Vector3[triangleMesh.Vertices.Count];
            Vector3[] normals = new Vector3[triangleMesh.Vertices.Count];

            int n = 0;
            foreach(TriangleNet.Data.Vertex v in triangleMesh.Vertices)
            {

                points[n] = new Vector2((float)v.X, (float)v.Y);
                vertices[n] = new Vector3((float)v.X, (float)v.Y, 0);
                normals[n]=new Vector3(0,0,-1);

                n++;
            }

            //transform triangles
            int[] triangles = triangleMesh.Triangles.ToUnityMeshTriangleIndices();

            mesh.Clear();
            mesh = new Mesh();
            mesh.vertices = vertices;
            mesh.triangles = triangles;
            mesh.uv = genUV(mesh.vertices);
            mesh.normals = normals;

            return mesh;
        }
        else {
            return null;
        }
    }
All Usage Examples Of TriangleNet.Mesh::Triangulate