Triangle.Cut C# (CSharp) Méthode

Cut() public méthode

public Cut ( LineSegment2D, line ) : Triangle[],
line LineSegment2D,
Résultat Triangle[],
    public Triangle[] Cut(LineSegment2D line)
    {
        if (IsPointInside (line.first) || IsPointInside (line.second) || IsIntersecting (line)) {
            return new Triangle[]{ this };
        } else {
            return new Triangle[]{ this};
        }
    }

Usage Example

Exemple #1
0
        //************************************************************************************
        public void CutByPlane(Vector3 position, Plane plane, out Mesh rightMesh, out Mesh leftMesh)
        {
            Shape shape = new Shape();

            List <Triangle> leftTriangles  = new List <Triangle>();
            List <Triangle> rightTriangles = new List <Triangle>();

            //Get the intersection points and the lines that generate the solid
            for (int i = 0; i < m_mesh.triangles.Length; i += 3)
            {
                List <Vector3> vertices = new List <Vector3>
                {
                    m_mesh.vertices[m_mesh.triangles[i]],
                    m_mesh.vertices[m_mesh.triangles[i + 1]],
                    m_mesh.vertices[m_mesh.triangles[i + 2]]
                };
                List <Vector3> normals = new List <Vector3>
                {
                    m_mesh.normals[m_mesh.triangles[i]],
                    m_mesh.normals[m_mesh.triangles[i + 1]],
                    m_mesh.normals[m_mesh.triangles[i + 2]]
                };
                List <Vector2> uvs = new List <Vector2>
                {
                    m_mesh.uv[m_mesh.triangles[i]],
                    m_mesh.uv[m_mesh.triangles[i + 1]],
                    m_mesh.uv[m_mesh.triangles[i + 2]]
                };

                Triangle triangle = new Triangle(vertices, normals, uvs);

                var intersections = triangle.Cut(position, plane, out List <Triangle> right, out List <Triangle> left);

                if (intersections.Count == 2 && intersections[0] != intersections[1])
                {
                    shape.AddEdge(new Line(intersections[0], intersections[1]));
                }

                leftTriangles.AddRange(left);
                rightTriangles.AddRange(right);
            }

            shape.SortVertices();

            leftTriangles.AddRange(shape.CreateTriangles(-plane.normal));
            rightTriangles.AddRange(shape.CreateTriangles(plane.normal));

            rightMesh = Triangle.CreateMesh(rightTriangles);
            leftMesh  = Triangle.CreateMesh(leftTriangles);
        }