public static MyModelVisual3D createRectangleModel(Point3D[] p, Material m, string tag, bool up = true) { MyModelVisual3D rect = new MyModelVisual3D(); rect.Children.Add(createRectangleModel(p, m, tag, up)); return(rect); }
public static MyModelVisual3D createRectangleModel(Point3D[] p, Material m, string tag, bool up=true) { MyModelVisual3D rect = new MyModelVisual3D(); rect.Children.Add(createRectangleModel(p, m, tag, up)); return rect; }
public static MyModelVisual3D createTriangleModel(Point3D p0, Point3D p1, Point3D p2, Material m, string t) { MyModelVisual3D retval = new MyModelVisual3D(); retval.Content = createTriangleModel(p0, p1, p2, m); retval.Tag = t; return(retval); }
private HitTestResultBehavior resultCb(HitTestResult r) { MyModelVisual3D model = r.VisualHit as MyModelVisual3D; if (model != null) { touchedFaces.Add(model.Tag); } return(HitTestResultBehavior.Continue); }
private void init(string file = null) { this.mainViewport.Children.Remove(c); this.mainViewport.Children.Remove(touchFaces); rotations.Children.Clear(); doneMoves.Clear(); solveMenu.IsEnabled = false; if (file != null) { c = new RubikCube(IO.read(file, out doneMoves), size, new Point3D(-len / 2, -len / 2, -len / 2), TimeSpan.FromMilliseconds(370), edge_len, space); } else { c = new RubikCube(size, new Point3D(-len / 2, -len / 2, -len / 2), TimeSpan.FromMilliseconds(370), edge_len, space); } c.Transform = rotations; touchFaces = Helpers.createTouchFaces(len, size, rotations, new DiffuseMaterial(new SolidColorBrush(Colors.Transparent))); this.mainViewport.Children.Add(c); this.mainViewport.Children.Add(touchFaces); if (!enableAnimations.IsChecked) { c.animationDuration = TimeSpan.FromMilliseconds(1); } if (file == null) { scramble(25); } //gameOver = false; saveMenu.IsEnabled = true; solveMenu.IsEnabled = true; }
public static MyModelVisual3D createTouchFaces(double len, int size, Transform3D rotations, Material touchFaceMaterial) { double offset = len / size; double middle = len / 2; double small_num = Math.Pow(10, -5); MyModelVisual3D touchFaces = new MyModelVisual3D(); MyModelVisual3D touchFace; touchFaces.Transform = rotations; for (int y = 0; y < size; y++) { for (int z = 0; z < size; z++) { for (int x = 0; x < size; x++) { if (y == size - 1) //up { touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle + x * offset, middle + small_num, -middle), new Point3D(-middle + x * offset, middle + small_num, middle), new Point3D(-middle + (x + 1) * offset, middle + small_num, middle), new Point3D(-middle + (x + 1) * offset, middle + small_num, -middle), }, touchFaceMaterial); touchFace.Tag = "UV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle, middle + small_num, -middle + z * offset), new Point3D(-middle, middle + small_num, -middle + (z + 1) * offset), new Point3D(middle, middle + small_num, -middle + (z + 1) * offset), new Point3D(middle, middle + small_num, -middle + z * offset), }, touchFaceMaterial); touchFace.Tag = "UH" + z; touchFaces.Children.Add(touchFace); } if (y == 0) //down { touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle + x * offset, -middle - small_num, -middle), new Point3D(-middle + x * offset, -middle - small_num, middle), new Point3D(-middle + (x + 1) * offset, -middle - small_num, middle), new Point3D(-middle + (x + 1) * offset, -middle - small_num, -middle), }, touchFaceMaterial, false); touchFace.Tag = "DV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle, -middle - small_num, -middle + z * offset), new Point3D(-middle, -middle - small_num, -middle + (z + 1) * offset), new Point3D(middle, -middle - small_num, -middle + (z + 1) * offset), new Point3D(middle, -middle - small_num, -middle + z * offset), }, touchFaceMaterial, false); touchFace.Tag = "DH" + z; touchFaces.Children.Add(touchFace); } if (z == size - 1) //front { touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle + x * offset, middle, middle + small_num), new Point3D(-middle + x * offset, -middle, middle + small_num), new Point3D(-middle + (x + 1) * offset, -middle, middle + small_num), new Point3D(-middle + (x + 1) * offset, middle, middle + small_num), }, touchFaceMaterial); touchFace.Tag = "FV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle, middle - y * offset, middle + small_num), new Point3D(-middle, middle - (y + 1) * offset, middle + small_num), new Point3D(middle, middle - (y + 1) * offset, middle + small_num), new Point3D(middle, middle - y * offset, middle + small_num), }, touchFaceMaterial); touchFace.Tag = "FH" + y; touchFaces.Children.Add(touchFace); } if (z == 0) //back { touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle + x * offset, middle, -middle - small_num), new Point3D(-middle + x * offset, -middle, -middle - small_num), new Point3D(-middle + (x + 1) * offset, -middle, -middle - small_num), new Point3D(-middle + (x + 1) * offset, middle, -middle - small_num), }, touchFaceMaterial, false); touchFace.Tag = "BV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle, middle - y * offset, -middle - small_num), new Point3D(-middle, middle - (y + 1) * offset, -middle - small_num), new Point3D(middle, middle - (y + 1) * offset, -middle - small_num), new Point3D(middle, middle - y * offset, -middle - small_num), }, touchFaceMaterial, false); touchFace.Tag = "BH" + y; touchFaces.Children.Add(touchFace); } if (x == size - 1) //right { touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(middle + small_num, middle, -middle + (z + 1) * offset), new Point3D(middle + small_num, -middle, -middle + (z + 1) * offset), new Point3D(middle + small_num, -middle, -middle + z * offset), new Point3D(middle + small_num, middle, -middle + z * offset), }, touchFaceMaterial); touchFace.Tag = "RV" + z; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(middle + small_num, -middle + (y + 1) * offset, middle), new Point3D(middle + small_num, -middle + y * offset, middle), new Point3D(middle + small_num, -middle + y * offset, -middle), new Point3D(middle + small_num, -middle + (y + 1) * offset, -middle), }, touchFaceMaterial); touchFace.Tag = "RH" + y; touchFaces.Children.Add(touchFace); } if (x == 0) //left { touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle - small_num, middle, -middle + (z + 1) * offset), new Point3D(-middle - small_num, -middle, -middle + (z + 1) * offset), new Point3D(-middle - small_num, -middle, -middle + z * offset), new Point3D(-middle - small_num, middle, -middle + z * offset), }, touchFaceMaterial, false); touchFace.Tag = "LV" + z; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[] { new Point3D(-middle - small_num, -middle + (y + 1) * offset, middle), new Point3D(-middle - small_num, -middle + y * offset, middle), new Point3D(-middle - small_num, -middle + y * offset, -middle), new Point3D(-middle - small_num, -middle + (y + 1) * offset, -middle), }, touchFaceMaterial, false); touchFace.Tag = "LH" + y; touchFaces.Children.Add(touchFace); } } } } return(touchFaces); }
private void init(string file=null) { this.mainViewport.Children.Remove(c); this.mainViewport.Children.Remove(touchFaces); rotations.Children.Clear(); doneMoves.Clear(); solveMenu.IsEnabled = false; if (file != null) { c = new RubikCube(IO.read(file, out doneMoves), size, new Point3D(-len / 2, -len / 2, -len / 2), TimeSpan.FromMilliseconds(370), edge_len, space); } else{ c = new RubikCube(size, new Point3D(-len / 2, -len / 2, -len / 2), TimeSpan.FromMilliseconds(370), edge_len, space); } c.Transform = rotations; touchFaces = Helpers.createTouchFaces(len, size, rotations, new DiffuseMaterial(new SolidColorBrush(Colors.Transparent))); this.mainViewport.Children.Add(c); this.mainViewport.Children.Add(touchFaces); if (!enableAnimations.IsChecked) { c.animationDuration = TimeSpan.FromMilliseconds(1); } if (file == null) { scramble(25); } gameOver = false; saveMenu.IsEnabled = true; solveMenu.IsEnabled = true; }
public static MyModelVisual3D createTouchFaces(double len, int size, Transform3D rotations, Material touchFaceMaterial) { double offset = len / size; double middle = len / 2; double small_num = Math.Pow(10, -5); MyModelVisual3D touchFaces = new MyModelVisual3D(); MyModelVisual3D touchFace; touchFaces.Transform = rotations; for (int y = 0; y < size; y++) { for (int z = 0; z < size; z++) { for (int x = 0; x < size; x++) { if (y == size - 1) { //up touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle + x*offset, middle+small_num, -middle), new Point3D(-middle + x*offset, middle+small_num, middle), new Point3D(-middle + (x+1) * offset, middle+small_num, middle), new Point3D(-middle + (x+1) * offset, middle+small_num, -middle), }, touchFaceMaterial); touchFace.Tag = "UV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle, middle+small_num, -middle + z*offset), new Point3D(-middle, middle+small_num, -middle + (z+1)*offset), new Point3D(middle, middle+small_num, -middle + (z+1)*offset), new Point3D(middle, middle+small_num, -middle + z*offset), }, touchFaceMaterial); touchFace.Tag = "UH" + z; touchFaces.Children.Add(touchFace); } if (y == 0) { //down touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle + x*offset, -middle-small_num, -middle), new Point3D(-middle + x*offset, -middle-small_num, middle), new Point3D(-middle + (x+1) * offset, -middle-small_num, middle), new Point3D(-middle + (x+1) * offset, -middle-small_num, -middle), }, touchFaceMaterial, false); touchFace.Tag = "DV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle, -middle-small_num, -middle + z*offset), new Point3D(-middle, -middle-small_num, -middle + (z+1)*offset), new Point3D(middle, -middle-small_num, -middle + (z+1)*offset), new Point3D(middle, -middle-small_num, -middle + z*offset), }, touchFaceMaterial, false); touchFace.Tag = "DH" + z; touchFaces.Children.Add(touchFace); } if (z == size - 1) { //front touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle + x*offset, middle, middle+small_num), new Point3D(-middle + x*offset, -middle, middle+small_num), new Point3D(-middle + (x+1)*offset, -middle, middle+small_num), new Point3D(-middle + (x+1)*offset, middle, middle+small_num), }, touchFaceMaterial); touchFace.Tag = "FV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle, middle - y*offset, middle+small_num), new Point3D(-middle, middle - (y+1)*offset, middle+small_num), new Point3D(middle, middle - (y+1)*offset, middle+small_num), new Point3D(middle, middle - y*offset, middle+small_num), }, touchFaceMaterial); touchFace.Tag = "FH" + y; touchFaces.Children.Add(touchFace); } if (z == 0) { //back touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle + x*offset, middle, -middle-small_num), new Point3D(-middle + x*offset, -middle, -middle-small_num), new Point3D(-middle + (x+1) * offset, -middle, -middle-small_num), new Point3D(-middle + (x+1) * offset, middle, -middle-small_num), }, touchFaceMaterial, false); touchFace.Tag = "BV" + x; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle, middle - y*offset, -middle-small_num), new Point3D(-middle, middle - (y+1)*offset, -middle-small_num), new Point3D(middle, middle - (y+1)*offset, -middle-small_num), new Point3D(middle, middle - y*offset, -middle-small_num), }, touchFaceMaterial, false); touchFace.Tag = "BH" + y; touchFaces.Children.Add(touchFace); } if (x == size - 1) { //right touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(middle+small_num, middle, -middle + (z+1)*offset), new Point3D(middle+small_num, -middle, -middle + (z+1)*offset), new Point3D(middle+small_num, -middle, -middle + z*offset), new Point3D(middle+small_num, middle, -middle + z*offset), }, touchFaceMaterial); touchFace.Tag = "RV" + z; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(middle+small_num, -middle + (y+1)*offset, middle), new Point3D(middle+small_num, -middle + y*offset, middle), new Point3D(middle+small_num, -middle + y*offset, -middle), new Point3D(middle+small_num, -middle + (y+1)*offset, -middle), }, touchFaceMaterial); touchFace.Tag = "RH" + y; touchFaces.Children.Add(touchFace); } if (x == 0) { //left touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle-small_num, middle, -middle + (z+1)*offset), new Point3D(-middle-small_num, -middle, -middle + (z+1)*offset), new Point3D(-middle-small_num, -middle, -middle + z*offset), new Point3D(-middle-small_num, middle, -middle + z*offset), }, touchFaceMaterial, false); touchFace.Tag = "LV" + z; touchFaces.Children.Add(touchFace); touchFace = new MyModelVisual3D(); touchFace.Content = Helpers.createRectangleModel(new Point3D[]{ new Point3D(-middle-small_num, -middle + (y+1)*offset, middle), new Point3D(-middle-small_num, -middle + y*offset, middle), new Point3D(-middle-small_num, -middle + y*offset, -middle), new Point3D(-middle-small_num, -middle + (y+1)*offset, -middle), }, touchFaceMaterial, false); touchFace.Tag = "LH" + y; touchFaces.Children.Add(touchFace); } } } } return touchFaces; }
public static MyModelVisual3D createTriangleModel(Point3D p0, Point3D p1, Point3D p2, Material m, string t) { MyModelVisual3D retval = new MyModelVisual3D(); retval.Content = createTriangleModel(p0, p1, p2, m); retval.Tag = t; return retval; }