Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }
Пример #4
0
        private HitTestResultBehavior resultCb(HitTestResult r)
        {
            MyModelVisual3D model = r.VisualHit as MyModelVisual3D;

            if (model != null)
            {
                touchedFaces.Add(model.Tag);
            }

            return(HitTestResultBehavior.Continue);
        }
Пример #5
0
        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;
        }
Пример #6
0
        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);
        }
Пример #7
0
        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;
        }
Пример #8
0
        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;
        }
Пример #9
0
 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;
 }