示例#1
0
        public Model(Mesh source)
        {
            vertices       = new List <Vertex>();
            edges          = new List <Edge3>();
            this.triangles = new List <Triangle3>();

            Vector3[] points = source.vertices;
            for (int i = 0, n = points.Length; i < n; i++)
            {
                Vertex v = new Vertex(points[i], i);
                vertices.Add(v);
            }

            int[] triangles = source.triangles;
            for (int i = 0, n = triangles.Length; i < n; i += 3)
            {
                int    i0 = triangles[i], i1 = triangles[i + 1], i2 = triangles[i + 2];
                Vertex v0 = vertices[i0], v1 = vertices[i1], v2 = vertices[i2];

                Edge3     e0 = GetEdge(edges, v0, v1);
                Edge3     e1 = GetEdge(edges, v1, v2);
                Edge3     e2 = GetEdge(edges, v2, v0);
                Triangle3 f  = new Triangle3(v0, v1, v2, e0, e1, e2);

                this.triangles.Add(f);
                v0.AddTriangle(f); v1.AddTriangle(f); v2.AddTriangle(f);
                e0.AddTriangle(f); e1.AddTriangle(f); e2.AddTriangle(f);
            }
        }
示例#2
0
        public void AddTriangle(Vertex v0, Vertex v1, Vertex v2)
        {
            if (!vertices.Contains(v0))
            {
                vertices.Add(v0);
            }
            if (!vertices.Contains(v1))
            {
                vertices.Add(v1);
            }
            if (!vertices.Contains(v2))
            {
                vertices.Add(v2);
            }

            Edge3     e0 = GetEdge(v0, v1);
            Edge3     e1 = GetEdge(v1, v2);
            Edge3     e2 = GetEdge(v2, v0);
            Triangle3 f  = new Triangle3(v0, v1, v2, e0, e1, e2);

            this.triangles.Add(f);
            v0.AddTriangle(f); v1.AddTriangle(f); v2.AddTriangle(f);
            e0.AddTriangle(f); e1.AddTriangle(f); e2.AddTriangle(f);
        }