public void Subdivide(out MengerCube[] cubes) { cubes = new MengerCube[20]; // 8 + 4 + 8 double NewLength = this.SideLength / 3.0; double six = this.SideLength * 2.0 / 3.0; // we got 3x3x3 cubes. All center cubes who touch the XYZ-Axis are removed. // front cubes[0] = new MengerCube(new Vector3d(Center.X - six, Center.Y + six, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Left, eSides.Top }, this.VisibilityToInherit); cubes[1] = new MengerCube(new Vector3d(Center.X + 0.0, Center.Y + six, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Bottom, eSides.Back, eSides.Top }, this.VisibilityToInherit); cubes[2] = new MengerCube(new Vector3d(Center.X + six, Center.Y + six, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Top }, this.VisibilityToInherit); cubes[3] = new MengerCube(new Vector3d(Center.X - six, Center.Y + 0.0, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left }, this.VisibilityToInherit); cubes[4] = new MengerCube(new Vector3d(Center.X + six, Center.Y + 0.0, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left }, this.VisibilityToInherit); cubes[5] = new MengerCube(new Vector3d(Center.X - six, Center.Y - six, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Left, eSides.Bottom }, this.VisibilityToInherit); cubes[6] = new MengerCube(new Vector3d(Center.X + 0.0, Center.Y - six, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Top, eSides.Back, eSides.Bottom }, this.VisibilityToInherit); cubes[7] = new MengerCube(new Vector3d(Center.X + six, Center.Y - six, Center.Z + six), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Bottom }, this.VisibilityToInherit); // center cubes[8] = new MengerCube(new Vector3d(Center.X - six, Center.Y + six, Center.Z + 0.0), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit); cubes[9] = new MengerCube(new Vector3d(Center.X + six, Center.Y + six, Center.Z + 0.0), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit); cubes[10] = new MengerCube(new Vector3d(Center.X - six, Center.Y - six, Center.Z + 0.0), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit); cubes[11] = new MengerCube(new Vector3d(Center.X + six, Center.Y - six, Center.Z + 0.0), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit); // back cubes[12] = new MengerCube(new Vector3d(Center.X - six, Center.Y + six, Center.Z - six), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Left }, this.VisibilityToInherit); cubes[13] = new MengerCube(new Vector3d(Center.X + 0.0, Center.Y + six, Center.Z - six), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Bottom, eSides.Front }, this.VisibilityToInherit); cubes[14] = new MengerCube(new Vector3d(Center.X + six, Center.Y + six, Center.Z - six), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Right }, this.VisibilityToInherit); cubes[15] = new MengerCube(new Vector3d(Center.X - six, Center.Y + 0.0, Center.Z - six), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left }, this.VisibilityToInherit); cubes[16] = new MengerCube(new Vector3d(Center.X + six, Center.Y + 0.0, Center.Z - six), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left }, this.VisibilityToInherit); cubes[17] = new MengerCube(new Vector3d(Center.X - six, Center.Y - six, Center.Z - six), NewLength, new eSides[] { eSides.Back, eSides.Bottom, eSides.Left }, this.VisibilityToInherit); cubes[18] = new MengerCube(new Vector3d(Center.X + 0.0, Center.Y - six, Center.Z - six), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Bottom, eSides.Front }, this.VisibilityToInherit); cubes[19] = new MengerCube(new Vector3d(Center.X + six, Center.Y - six, Center.Z - six), NewLength, new eSides[] { eSides.Back, eSides.Bottom, eSides.Right }, this.VisibilityToInherit); }
public void Subdivide( out MengerCube[] cubes ) { cubes = new MengerCube[20]; // 8 + 4 + 8 double NewLength = this.SideLength / 3.0; double six = this.SideLength * 2.0 / 3.0; // we got 3x3x3 cubes. All center cubes who touch the XYZ-Axis are removed. // front cubes[0] = new MengerCube( new Vector3d( Center.X - six, Center.Y + six, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Left, eSides.Top }, this.VisibilityToInherit ); cubes[1] = new MengerCube( new Vector3d( Center.X + 0.0, Center.Y + six, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Bottom, eSides.Back, eSides.Top }, this.VisibilityToInherit ); cubes[2] = new MengerCube( new Vector3d( Center.X + six, Center.Y + six, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Top }, this.VisibilityToInherit ); cubes[3] = new MengerCube( new Vector3d( Center.X - six, Center.Y + 0.0, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left }, this.VisibilityToInherit ); cubes[4] = new MengerCube( new Vector3d( Center.X + six, Center.Y + 0.0, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left }, this.VisibilityToInherit ); cubes[5] = new MengerCube( new Vector3d( Center.X - six, Center.Y - six, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Left, eSides.Bottom } , this.VisibilityToInherit ); cubes[6] = new MengerCube( new Vector3d( Center.X + 0.0, Center.Y - six, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Top, eSides.Back, eSides.Bottom }, this.VisibilityToInherit ); cubes[7] = new MengerCube( new Vector3d( Center.X + six, Center.Y - six, Center.Z + six ), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Bottom }, this.VisibilityToInherit ); // center cubes[8] = new MengerCube( new Vector3d( Center.X - six, Center.Y + six, Center.Z + 0.0 ), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit ); cubes[9] = new MengerCube( new Vector3d( Center.X + six, Center.Y + six, Center.Z + 0.0 ), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit ); cubes[10] = new MengerCube( new Vector3d( Center.X - six, Center.Y - six, Center.Z + 0.0 ), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit ); cubes[11] = new MengerCube( new Vector3d( Center.X + six, Center.Y - six, Center.Z + 0.0 ), NewLength, new eSides[] { eSides.Top, eSides.Right, eSides.Bottom, eSides.Left }, this.VisibilityToInherit ); // back cubes[12] = new MengerCube( new Vector3d( Center.X - six, Center.Y + six, Center.Z - six ), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Left }, this.VisibilityToInherit ); cubes[13] = new MengerCube( new Vector3d( Center.X + 0.0, Center.Y + six, Center.Z - six ), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Bottom, eSides.Front }, this.VisibilityToInherit ); cubes[14] = new MengerCube( new Vector3d( Center.X + six, Center.Y + six, Center.Z - six ), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Right }, this.VisibilityToInherit ); cubes[15] = new MengerCube( new Vector3d( Center.X - six, Center.Y + 0.0, Center.Z - six ), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left } , this.VisibilityToInherit ); cubes[16] = new MengerCube( new Vector3d( Center.X + six, Center.Y + 0.0, Center.Z - six ), NewLength, new eSides[] { eSides.Front, eSides.Right, eSides.Back, eSides.Left } , this.VisibilityToInherit ); cubes[17] = new MengerCube( new Vector3d( Center.X - six, Center.Y - six, Center.Z - six ), NewLength, new eSides[] { eSides.Back, eSides.Bottom, eSides.Left } , this.VisibilityToInherit ); cubes[18] = new MengerCube( new Vector3d( Center.X + 0.0, Center.Y - six, Center.Z - six ), NewLength, new eSides[] { eSides.Top, eSides.Back, eSides.Bottom, eSides.Front }, this.VisibilityToInherit ); cubes[19] = new MengerCube( new Vector3d( Center.X + six, Center.Y - six, Center.Z - six ), NewLength, new eSides[] { eSides.Back, eSides.Bottom, eSides.Right }, this.VisibilityToInherit ); }