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(); }
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(); }