示例#1
0
        public void RotateImagePart(ImagePosittion position)
        {
            ImagePart imagePart = _imageParts[(int)position];

            ImagePart[] neighbours = GetNeighbours(position);

            imagePart.RotateChunks();

            for (int i = 0; i < 4; i++)
            {
                imagePart.GetImageChunk((ImagePartSide)i).SetNeighbour(neighbours[i]);
            }

            switch (imagePart.Rotation)
            {
            case ImagePartRotation.D0: imagePart.Rotation = ImagePartRotation.D90;
                break;

            case ImagePartRotation.D90:
                imagePart.Rotation = ImagePartRotation.D180;
                break;

            case ImagePartRotation.D180:
                imagePart.Rotation = ImagePartRotation.D270;
                break;

            case ImagePartRotation.D270:
                imagePart.Rotation = ImagePartRotation.D0;
                break;
            }
        }
示例#2
0
        public void MoveImagePart(ImagePosittion from, ImagePosittion to)
        {
            ImagePart[] firstImageNeighbours  = GetNeighbours(from);
            ImagePart[] secondImageNeighbours = GetNeighbours(to);
            ImagePart   firstImagePart        = _imageParts[(int)from];
            ImagePart   secondImagePart       = _imageParts[(int)to];

            void NotifySurroundingNeighbours(ImagePart[] surroundingNeighbours, ImagePart newNeighbour)
            {
                ImagePartSide[] opositeOrder =
                { ImagePartSide.Right, ImagePartSide.Bottom, ImagePartSide.Left, ImagePartSide.Top };

                for (int i = 0; i < 4; i++)
                {
                    if (surroundingNeighbours[i] != null)
                    {
                        surroundingNeighbours[i].GetImageChunk(ReversedValue((ImagePartSide)i)).SetNeighbour(newNeighbour);
                    }
                }
            }

            NotifySurroundingNeighbours(firstImageNeighbours, secondImagePart);
            NotifySurroundingNeighbours(secondImageNeighbours, firstImagePart);

            _imageParts[(int)from] = secondImagePart;
            _imageParts[(int)to]   = firstImagePart;

            InitialSetNeighbours(from);
            InitialSetNeighbours(to);
        }
示例#3
0
 private ImagePart[] GetNeighbours(ImagePosittion position)
 {
     ImagePart[] neighbours = new ImagePart[4];
     for (int i = 0; i < 4; i++)
     {
         neighbours[i] = _imageParts[(int)position].GetImageChunk((ImagePartSide)i).Neighbour;
     }
     return(neighbours);
 }
示例#4
0
        private void InitialSetNeighbours(ImagePosittion position)
        {
            int index = 0;

            ImagePart[] neighbours = new ImagePart[4];
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (index == (int)position)
                    {
                        neighbours[0] = (j == 0) ? null : _imageParts[(int)position - 1];
                        neighbours[1] = (i == 0) ? null : _imageParts[(int)position - 3];
                        neighbours[2] = (j == 2) ? null : _imageParts[(int)position + 1];
                        neighbours[3] = (i == 2) ? null : _imageParts[(int)position + 3];
                    }
                    index++;
                }
            }
            for (int i = 0; i < 4; i++)
            {
                _imageParts[(int)position].GetImageChunk((ImagePartSide)i).SetNeighbour(neighbours[i]);
            }
        }
示例#5
0
 public ImagePart GetImagePart(ImagePosittion position)
 {
     return(_imageParts[(int)position]);
 }
示例#6
0
 public BitmapImage GetImageChunkBMI(ImagePosittion pos)
 {
     return(_imageParts[((int)pos)].ChunkImage);
 }