示例#1
0
        internal TessellatedSolid(List<PolygonalFace> facesList, Vertex[] subSolidVertices, Vertex[][] newEdgeVertices,
            double[] normal, Boolean[] loopIsPositive)
        {
            Faces = facesList.ToArray();
            Vertices = subSolidVertices;
            var numloops = newEdgeVertices.GetLength(0);
            var points2D = new Point[numloops][];
            for (int i = 0; i < numloops; i++)
                points2D[i] = MinimumEnclosure.Get2DProjectionPoints(newEdgeVertices[i], normal);
            List<PolygonalFace> patchFaces = TriangulatePolygon.Run(points2D.ToList<Point[]>(), loopIsPositive);

            //todo:
            //1. make faces from list of points
            //2. connect to existing.
            MakeEdges();
            CreateConvexHull();
            DefineBoundingBoxAndCenter();
            for (int i = 0; i < Faces.Length; i++)
            {
                var face = Faces[i];
                var centerX = face.Vertices.Average(v => v.X);
                var centerY = face.Vertices.Average(v => v.Y);
                var centerZ = face.Vertices.Average(v => v.Z);
                face.Center = new[] { centerX, centerY, centerZ };
            }
            ConnectConvexHullToObjects();
            DefineVolumeAndAreas();
            DefineFaceCurvature();
            DefineVertexCurvature();
        }