Ejemplo n.º 1
0
        private static TriangleIndexed[] GetModel_Composite_IndentedTriangles(Rhombicuboctahedron ball, double depth)
        {
            List<Point3D> points = new List<Point3D>();
            List<Tuple<int, int, int>> triangles = new List<Tuple<int, int, int>>();

            int index = 0;

            foreach (TriangleIndexed triangle in ball.Triangles)
            {
                Vector3D offset = triangle.NormalUnit * -depth;

                points.Add(triangle.Point0 + offset);
                points.Add(triangle.Point1 + offset);
                points.Add(triangle.Point2 + offset);

                //TODO: May need to wind these the other direction at times
                triangles.Add(Tuple.Create(index + 0, index + 1, index + 2));

                index += 3;
            }

            Point3D[] allPoints = points.ToArray();

            return triangles.Select(o => new TriangleIndexed(o.Item1, o.Item2, o.Item3, allPoints)).ToArray();
        }
Ejemplo n.º 2
0
        private static TriangleIndexed[] GetModel_Composite_SquareSides(Rhombicuboctahedron ball, double depth)
        {
            List<TriangleIndexed> retVal = new List<TriangleIndexed>();

            foreach (int[] square in UtilityCore.Iterate(ball.SquarePolys_Orth, ball.SquarePolys_Diag))
            {
                Point3D[] initialPoints = square.Select(o => ball.AllPoints[o]).ToArray();

                Vector3D offset = Math2D.GetPolygonNormal(initialPoints, PolygonNormalLength.Unit) * -depth;

                for (int cntr = 0; cntr < square.Length - 1; cntr++)
                {
                    retVal.AddRange(GetModel_Composite_SquareSides_Side(initialPoints[cntr], initialPoints[cntr + 1], offset, depth));
                }

                retVal.AddRange(GetModel_Composite_SquareSides_Side(initialPoints[square.Length - 1], initialPoints[0], offset, depth));
            }

            return retVal.ToArray();
        }