private static Rectangle Flip(Rectangle uv, FlipMode flipMode)
 {
     if (flipMode == FlipMode.HorizontalAndVertical)
     {
         return(new Rectangle(uv.Right, uv.Bottom, -uv.Width, -uv.Height));
     }
     if (flipMode == FlipMode.Horizontal)
     {
         return(new Rectangle(uv.Right, uv.Top, -uv.Width, uv.Height));
     }
     if (flipMode == FlipMode.Vertical)
     {
         return(new Rectangle(uv.Left, uv.Bottom, uv.Width, -uv.Height));
     }
     return(uv);
 }
예제 #2
0
        public void OnMouseDragLeftPage()
        {
            if (interactable)
            {
                //DragLeftPageToPoint(transformPoint(Input.mousePosition));

                mode = FlipMode.LeftDownToRight;

                LeftNext.gameObject.SetActive(false);
                Vector2 _pos = Vector2.one;
                RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
                                                                        Input.mousePosition, canvas.worldCamera, out _pos);
                _pos = canvas.transform.TransformPoint(_pos);
                DragLeftPageToPoint(transformPoint(_pos));
            }
        }
        /// <summary>
        /// Flips (reflects the image) either vertical or horizontal.
        /// </summary>
        /// <param name="bmp">The WriteableBitmap.</param>
        /// <param name="flipMode">The flip mode.</param>
        /// <returns>A new WriteableBitmap that is a flipped version of the input.</returns>
        public static BitmapBuffer Flip(this BitmapBuffer bmp, FlipMode flipMode)
        {
            using (var context = bmp.GetBitmapContext(ReadWriteMode.ReadOnly))
            {
                // Use refs for faster access (really important!) speeds up a lot!
                int          w      = context.Width;
                int          h      = context.Height;
                int[]        p      = context.Pixels;
                int          i      = 0;
                BitmapBuffer result = BitmapBufferFactory.New(w, h);

                if (flipMode == FlipMode.Horizontal)
                {
                    using (BitmapContext destContext = result.GetBitmapContext())
                    {
                        int[] rp = destContext.Pixels;
                        for (int y = h - 1; y >= 0; y--)
                        {
                            for (int x = 0; x < w; x++)
                            {
                                int srcInd = y * w + x;
                                rp[i] = p[srcInd];
                                i++;
                            }
                        }
                    }
                }
                else if (flipMode == FlipMode.Vertical)
                {
                    using (BitmapContext destContext = result.GetBitmapContext())
                    {
                        int[] rp = destContext.Pixels;
                        for (int y = 0; y < h; y++)
                        {
                            for (int x = w - 1; x >= 0; x--)
                            {
                                int srcInd = y * w + x;
                                rp[i] = p[srcInd];
                                i++;
                            }
                        }
                    }
                }

                return(result);
            }
        }
예제 #4
0
파일: AutoFlip.cs 프로젝트: dfengwji/unity
 public void StartFlipping(int target)
 {
     isBookInteractable         = ControledBook.interactable;
     ControledBook.interactable = false;
     flippingStarted            = true;
     elapsedTime       = 0;
     nextPageCountDown = 0;
     targetPaper       = target;
     if (target > ControledBook.CurrentPaper)
     {
         Mode = FlipMode.RightToLeft;
     }
     else if (target < ControledBook.currentPaper)
     {
         Mode = FlipMode.LeftToRight;
     }
 }
예제 #5
0
    public void UpdateBookLTRToPoint(Vector3 followLocation)
    {
        mode = FlipMode.LeftToRight;
        f    = followLocation;
        if (enableShadowEffect)
        {
            ShadowLTR.transform.SetParent(ClippingPlane.transform, true);
            ShadowLTR.transform.localPosition    = new Vector3(0, 0, 0);
            ShadowLTR.transform.localEulerAngles = new Vector3(0, 0, 0);

            Shadow.transform.SetParent(Right.transform);
            Shadow.rectTransform.anchoredPosition = new Vector3(0, 0, 0);
            Shadow.transform.localEulerAngles     = Vector3.zero;
            Shadow.gameObject.SetActive(true);
        }
        Left.transform.SetParent(ClippingPlane.transform, true);
        Right.transform.SetParent(BookPanel.transform, true);

        c = Calc_C_Position(followLocation);
        Vector3 t1;
        float   T0_T1_Angle = Calc_T0_T1_Angle(c, ebl, out t1);

        if (T0_T1_Angle < 0)
        {
            T0_T1_Angle += 180;
        }

        ClippingPlane.transform.localEulerAngles = new Vector3(0, 0, T0_T1_Angle - 90);
        ClippingPlane.transform.position         = BookPanel.TransformPoint(t1);

        LeftPageShadow.transform.localEulerAngles = new Vector3(0, 0, T0_T1_Angle - 90);
        LeftPageShadow.transform.position         = BookPanel.TransformPoint(t1);

        //page position and angle
        Left.transform.position = BookPanel.TransformPoint(c);
        float C_T1_dy    = t1.y - c.y;
        float C_T1_dx    = t1.x - c.x;
        float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;

        Left.transform.localEulerAngles = new Vector3(0, 0, C_T1_Angle - 180 - (T0_T1_Angle - 90));

        Right.transform.SetParent(ClippingPlane.transform, true);
        Right.transform.SetAsFirstSibling();

        ShadowLTR.rectTransform.SetParent(Left.rectTransform, true);
    }
예제 #6
0
파일: Book.cs 프로젝트: AMzzcc/ElementWorld
    public void DragRightPageToPoint(Vector3 point)
    {
        if (currentPage >= bookPagesCount)
        {
            return;
        }
        Debug.Log(currentPage);
        Debug.Log(bookPagesCount);
        pageDragging = true;
        mode         = FlipMode.RightToLeft;
        f            = point;


        NextPageClip.rectTransform.pivot  = new Vector2(0, 0.12f);
        ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);

        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot   = new Vector2(0, 0);
        Left.transform.position    = RightNext.transform.position;
        Left.transform.eulerAngles = new Vector3(0, 0, 0);
        //修改
        //if(BookController.Instance.isHandFlip)
        {
            //Left.sprite = (currentPage < bookPagesCount) ? bookPages[currentPage] : background;
        }
        //else
        {
            //Left.sprite = bookPages[BookController.Instance.lastPageCount];
        }
        //BookController.Instance.isHandFlip = true;
        Left.transform.SetAsFirstSibling();

        Right.gameObject.SetActive(true);
        Right.transform.position    = RightNext.transform.position;
        Right.transform.eulerAngles = new Vector3(0, 0, 0);
        Right.sprite = (currentPage < bookPagesCount - 1) ? bookPages[currentPage + 1] : background;

        RightNext.sprite = (currentPage < bookPagesCount - 2) ? bookPages[currentPage + 2] : background;

        LeftNext.transform.SetAsFirstSibling();
        if (enableShadowEffect)
        {
            Shadow.gameObject.SetActive(true);
        }
        UpdateBookRTLToPoint(f);
    }
 internal static Image FlipImage(Image myImage, FlipMode myFlipmode)
 {
     var ret = myImage;
     switch (myFlipmode)
     {
         case FlipMode.Horizontal:
             ret.RotateFlip(RotateFlipType.RotateNoneFlipX);
             break;
         case FlipMode.Vertical:
             ret.RotateFlip(RotateFlipType.RotateNoneFlipY);
             break;
         case FlipMode.Both:
             ret.RotateFlip(RotateFlipType.RotateNoneFlipXY);
             break;
     }
     return ret;
 }
예제 #8
0
    public void DragRightPageToPoint(Vector3 point)
    {
        if (currentPage >= bookPages.Length)
        {
            return;
        }
        pageDragging = true;
        mode         = FlipMode.RightToLeft;
        f            = point;


        NextPageClip.rectTransform.pivot  = new Vector2(0, 0.12f);
        ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);

        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot   = new Vector2(0, 0);
        Left.transform.position    = RightNext.transform.position;
        Left.transform.eulerAngles = new Vector3(0, 0, 0);
        Left.sprite = (currentPage < bookPages.Length) ? bookPages[currentPage] : background;
        //Left.sprite = (currentPage < 1) ? bookPages[0] : bookPages[1];
        Left.transform.SetAsFirstSibling();

        Right.gameObject.SetActive(true);
        Right.transform.position    = RightNext.transform.position;
        Right.transform.eulerAngles = new Vector3(0, 0, 0);



        Right.sprite = (currentPage < bookPages.Length - 1) ? bookPages[currentPage + 1] : background;

        RightNext.sprite = (currentPage < bookPages.Length - 2) ? bookPages[currentPage + 2] : background;
        //RightNext.sprite = (currentPage < bookPages.Length - 2) ? bookPages[currentPage + 2] : background;
        //RightNext.sprite = (currentPage < 1) ? bookPages[1] : background;

        LeftNext.transform.SetAsFirstSibling();
        if (enableShadowEffect)
        {
            Shadow.gameObject.SetActive(true);
        }

        /*
         * Hand1.gameObject.SetActive(true);
         * Hand1.transform.position= f;
         */
        UpdateBookRTLToPoint(f);
    }
예제 #9
0
        public void DragLeftPageToPoint(Vector3 point)
        {
            if (CurrentPage <= 0)
            {
                return;
            }
            pageDragging = true;
            mode         = FlipMode.LeftToRight;
            _followPoint = point;

            _nextPageClipTransform.pivot  = new Vector2(1, 0.12f);
            _clippingPanelTransform.pivot = new Vector2(0, 0.35f);

            _rightTransform.gameObject.SetActive(true);
            var leftNextPosition = _leftNextTransform.position;

            _rightTransform.position = leftNextPosition;

            var rightPage = _bookPages[CurrentPage];

            SetPage(rightPage, _rightTransform);

            _rightTransform.eulerAngles = Vector3.zero;
            _rightTransform.SetAsFirstSibling();

            _leftTransform.gameObject.SetActive(true);
            _leftTransform.pivot       = new Vector2(1, 0);
            _leftTransform.position    = leftNextPosition;
            _leftTransform.eulerAngles = Vector3.zero;

            var leftPage = _bookPages[CurrentPage - 1];

            SetPage(leftPage, _leftTransform);

            var leftNextPage = _bookPages[CurrentPage - 2];

            SetPage(leftNextPage, _leftNextTransform);

            _rightNextTransform.SetAsFirstSibling();
            if (_enableShadowEffect)
            {
                _shadowLTRTransform.gameObject.SetActive(true);
            }
            UpdateBookLTRToPoint(_followPoint);
        }
        public WindowsCapture(int index) : this()
        {
            InnerCapture = new VideoCapture(index);

            InnerCapture.Set(CaptureProperty.FourCC, (double)FourCC.MJPG);
            InnerCapture.Set(CaptureProperty.Fps, 30);

            InnerCapture.Set(CaptureProperty.FrameWidth, 2048);
            InnerCapture.Set(CaptureProperty.FrameHeight, 2048);

            double w = InnerCapture.Get(CaptureProperty.FrameWidth);
            double h = InnerCapture.Get(CaptureProperty.FrameHeight);

            Logger.Log($"Capture Size: (w:{w},h:{h})  CaptureFormat:{InnerCapture.Get(CaptureProperty.FourCC)}");

            flip     = true;
            flipMode = FlipMode.Y;
        }
예제 #11
0
        public unsafe Texture(GL gl, string path, FlipMode fm)
        {
            //Loading an image using imagesharp.
            Image <Rgba32> img = (Image <Rgba32>)Image.Load(path);

            //We need to flip our image as image sharps coordinates has origin (0, 0) in the top-left corner,
            //where as openGL has origin in the bottom-left corner.
            img.Mutate(x => x.Flip(fm));

            fixed(void *data = &MemoryMarshal.GetReference(img.GetPixelRowSpan(0)))
            {
                //Loading the actual image.
                Load(gl, data, (uint)img.Width, (uint)img.Height);
            }

            //Deleting the img from imagesharp.
            img.Dispose();
        }
예제 #12
0
        public static async void FlipDir(FlipMode mode)
        {
            int counter = 1;

            FileInfo[] files = IOUtils.GetFiles();
            Program.PreProcessing();
            foreach (FileInfo file in files)
            {
                Program.ShowProgress("Flipping Image ", counter, files.Length);
                counter++;
                Flip(file.FullName, mode);
                if (counter % 3 == 0)
                {
                    await Program.PutTaskDelay();
                }
            }
            Program.PostProcessing(files.Length);
        }
        internal static object GetColourPixelsFromBitmap(Bitmap bitmap, FlipMode flipMode, out byte[] rawBitmapBytes)
        {
            int[, ,] bitmapPixels = new int[bitmap.Width, bitmap.Height, 3];
            rawBitmapBytes        = new byte[(bitmap.Width * bitmap.Height * 3) + 40 + 14 + 1];

            IntPtr hBitmap = bitmap.GetHbitmap();

            try
            {
                GetColourPixelsFromBitmap(bitmap.Width, bitmap.Height, 8, flipMode, hBitmap, bitmapPixels, rawBitmapBytes);
            }
            finally
            {
                DeleteObject(hBitmap);
            }

            return(bitmapPixels);
        }
예제 #14
0
        public void DragRightPageToPoint(Vector3 point)
        {
            if (CurrentPage >= _bookPages.Length)
            {
                return;
            }
            pageDragging = true;
            mode         = FlipMode.RightToLeft;
            _followPoint = point;


            _nextPageClipTransform.pivot  = new Vector2(0, 0.12f);
            _clippingPanelTransform.pivot = new Vector2(1, 0.35f);

            _leftTransform.gameObject.SetActive(true);
            _leftTransform.pivot = new Vector2(0, 0);
            var rightNextPosition = _rightNextTransform.position;

            _leftTransform.position    = rightNextPosition;
            _leftTransform.eulerAngles = new Vector3(0, 0, 0);

            var leftPage = _bookPages[CurrentPage + 1];

            SetPage(leftPage, _leftTransform);
            _leftTransform.SetAsFirstSibling();

            _rightTransform.gameObject.SetActive(true);
            _rightTransform.position    = rightNextPosition;
            _rightTransform.eulerAngles = new Vector3(0, 0, 0);
            var rightPage = _bookPages[CurrentPage + 2];

            SetPage(rightPage, _rightTransform);

            var rightNextPage = _bookPages[CurrentPage + 3];

            SetPage(rightNextPage, _rightNextTransform);

            _leftNextTransform.SetAsFirstSibling();
            if (_enableShadowEffect)
            {
                _shadowTransform.gameObject.SetActive(true);
            }
            UpdateBookRTLToPoint(_followPoint);
        }
예제 #15
0
    public void DragRightPageToPoint(Vector3 point)
    {
        #region DEFAULT=bookPages.Lenth
        if (currentPage >= bookPages.Length - 1)
        {
            print(">>>Show result panel");
            BookController.Instance.ResultPanel.gameObject.SetActive(true);
            backButton.transform.TweenTranfrom(Siri.Ttype.Scale, Easing.Type.EaseOutBounce, new Vector3(1, 1, 1), new Vector3(1.1f, 1.1f, 1), 0.25f);
            return;
        }
        #endregion
        pageDragging = true;
        mode         = FlipMode.RightToLeft;
        f            = point;

        NextPageClip.rectTransform.pivot  = new Vector2(0, 0.12f);
        ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);

        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot   = new Vector2(0, 0);
        Left.transform.position    = RightNext.transform.position;
        Left.transform.eulerAngles = new Vector3(0, 0, 0);
//        Left.sprite = (currentPage < bookPages.Length) ? bookPages[currentPage] : background;
        Left.transform.SetAsFirstSibling();

        Right.gameObject.SetActive(true);
        Right.transform.position    = RightNext.transform.position;
        Right.transform.eulerAngles = new Vector3(0, 0, 0);
        #region ADD_BLANK_PAGE
//        Right.sprite = (currentPage < bookPages.Length - 1) ? bookPages[currentPage + 1] : background;
        Right.sprite = blankPage;
//        RightNext.sprite = (currentPage < bookPages.Length - 1) ? bookPages[currentPage + 1] : background;
        page.sprite    = (currentPage < bookPages.Length - 1) ? bookPages[currentPage + 1] : background;
        pageL.sprite   = (currentPage <= bookPages.Length - 1) ? bookPages[currentPage] : background;
        bookText.text  = (currentPage < bookPages.Length - 1) ? pageText[currentPage + 1] : "";
        bookTextL.text = (currentPage <= bookPages.Length - 1) ? pageText[currentPage] : "";
        #endregion
        LeftNext.transform.SetAsFirstSibling();
        if (enableShadowEffect)
        {
            Shadow.gameObject.SetActive(true);
        }
        UpdateBookRTLToPoint(f);
    }
예제 #16
0
        public void DragRightPageToPoint(Vector3 point)
        {
            if (currentPage == bookPages.Length - 1)
            {
                Debug.Log(currentPage);
                Debug.Log(bookPages.Length);
                Debug.Log("ini scroll terakhir");
            }

            if (currentPage >= bookPages.Length)
            {
                return;
            }
            pageDragging = true;
            mode         = FlipMode.RightToLeft;
            f            = point;


            NextPageClip.rectTransform.pivot  = new Vector2(0, 0.12f);
            ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);

            Left.gameObject.SetActive(true);
            Left.rectTransform.pivot   = new Vector2(0, 0);
            Left.transform.position    = RightNext.transform.position;
            Left.transform.eulerAngles = new Vector3(0, 0, 0);
            Left.sprite = (currentPage < bookPages.Length) ? bookPages[currentPage] : background;
            Left.transform.SetAsFirstSibling();

            Right.gameObject.SetActive(true);
            Right.transform.position    = RightNext.transform.position;
            Right.transform.eulerAngles = new Vector3(0, 0, 0);
            Right.sprite = (currentPage < bookPages.Length - 1) ? bookPages[currentPage + 1] : background;

            RightNext.sprite = (currentPage < bookPages.Length - 2) ? bookPages[currentPage + 2] : background;

            LeftNext.transform.SetAsFirstSibling();
            if (enableShadowEffect)
            {
                Shadow.gameObject.SetActive(true);
            }
            UpdateBookRTLToPoint(f);

            Debug.Log("Geser kiri");
        }
예제 #17
0
        public static AvgColor[] Flip(this AvgColor[] colors, int width, FlipMode flipMode)
        {
            if (colors == null || width <= 0)
            {
                return(colors);
            }

            if (flipMode.HasFlag(FlipMode.Vertical))
            {
                return(flipMode.HasFlag(FlipMode.Horizontal) ? colors.Reverse().ToArray() : colors.FlipVertical(width));
            }

            if (flipMode.HasFlag(FlipMode.Horizontal))
            {
                return(colors.FlipHorizontal(width));
            }

            return(colors);
        }
예제 #18
0
        /// <summary>
        /// 由右向左翻页时 更新位置
        /// </summary>
        /// <param name="followLocation"></param>
        public void UpdateBookRTLToPoint(Vector3 followLocation)
        {
            mode = FlipMode.RightDownToRight;
            f    = followLocation;
            Shadow.transform.SetParent(ClippingPlane.transform, true);
            Shadow.transform.localPosition    = new Vector3(0, 0, 0);
            Shadow.transform.localEulerAngles = new Vector3(0, 0, 0);
            Right.transform.SetParent(ClippingPlane.transform, true);

            Left.transform.SetParent(BookPanel.transform, true);
            RightNext.transform.SetParent(BookPanel.transform, true);
            c = Calc_C_Position(followLocation);
            Vector3 t1;
            float   T0_T1_Angle = Calc_T0_T1_Angle(c, ebr, out t1);

            if (T0_T1_Angle >= -90)
            {
                T0_T1_Angle -= 180;
            }

            ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);

            //ClippingPlane.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
            ClippingPlane.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90) + BookPanel.eulerAngles;
            ClippingPlane.transform.position    = BookPanel.TransformPoint(t1);

            //page position and angle
            Right.transform.position = BookPanel.TransformPoint(c);
            float C_T1_dy    = t1.y - c.y;
            float C_T1_dx    = t1.x - c.x;
            float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;

            Right.transform.eulerAngles = new Vector3(0, 0, C_T1_Angle) + BookPanel.eulerAngles;

            //NextPageClip.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
            NextPageClip.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90) + BookPanel.eulerAngles;
            NextPageClip.transform.position    = BookPanel.TransformPoint(t1);
            RightNext.transform.SetParent(NextPageClip.transform, true);
            Left.transform.SetParent(ClippingPlane.transform, true);
            Left.transform.SetAsFirstSibling();

            Shadow.rectTransform.SetParent(Right.rectTransform, true);
        }
예제 #19
0
    //右下角的点
    public void UpdateBookLTRToPoint(Vector3 followLocation)
    {
        mode = FlipMode.LeftToRight;
        f    = followLocation;

        ShadowLTR.transform.SetParent(NextPageClip.transform, true);
        ShadowLTR.transform.localPosition    = new Vector3(0, 0, 0);
        ShadowLTR.transform.localEulerAngles = new Vector3(0, 0, 0);


        Left.transform.SetParent(ClippingPlane.transform, true);
        Right.transform.SetParent(BookPanel.transform, true);
        //LeftNext.transform.SetParent(BookPanel.transform, true);
        c = Calc_C_Position(followLocation);

        Vector3 t1;
        float   T0_T1_Angle = Calc_T0_T1_Angle(c, ebt, out t1);

        //if (T0_T1_Angle < 0) T0_T1_Angle += 180;

        ClippingPlane.rectTransform.pivot   = new Vector2(1, 0.35f);
        ClippingPlane.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle - 90);//遮罩
        ClippingPlane.transform.position    = BookPanel.TransformPoint(t1);

        NextPageClip.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);//隐藏
        NextPageClip.transform.position    = BookPanel.TransformPoint(t1);

        //page position and angle
        float C_T1_dy    = t1.y - c.y;
        float C_T1_dx    = t1.x - c.x;
        float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;

        Left.transform.position    = BookPanel.TransformPoint(c);
        Left.transform.eulerAngles = new Vector3(0, 0, C_T1_Angle - 90);//显示的牌



        //LeftNext.transform.SetParent(NextPageClip.transform, true);
        Right.transform.SetParent(ClippingPlane.transform, true);
        Right.transform.SetAsFirstSibling();
        ShadowLTR.rectTransform.SetParent(Left.rectTransform, true);
    }
예제 #20
0
    public void DragLeftPageToPoint(Vector3 point)                 // 翻起左边页(起手)
    {
        if (currentPaper <= StartFlippingPaper)
        {
            return;
        }
        pageDragging = true;
        mode         = FlipMode.LeftToRight;
        f            = point;

        UpdatePages();

        ClippingPlane.rectTransform.pivot = new Vector2(0, 0.35f);

        Right = papers[currentPaper - 1].Back.GetComponent <Image>();
        BookUtility.ShowPage(Right.gameObject);
        Right.transform.position         = LeftPageTransform.transform.position;
        Right.transform.localEulerAngles = new Vector3(0, 0, 0);
        Right.transform.SetAsFirstSibling();

        Left = papers[currentPaper - 1].Front.GetComponent <Image>();
        BookUtility.ShowPage(Left.gameObject);
        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot        = new Vector2(1, 0);
        Left.transform.position         = LeftPageTransform.transform.position;
        Left.transform.localEulerAngles = new Vector3(0, 0, 0);


        if (enableShadowEffect)
        {
            ShadowLTR.gameObject.SetActive(true);
        }
        ClippingPlane.gameObject.SetActive(true);
        UpdateBookLTRToPoint(f);



        if (currentPaper == 1)                      // 如果是第0页,那就改下成小背景
        {
            mBgToggle.Change2One();
        }
    }
예제 #21
0
    /// <summary>
    /// 更新页面
    /// </summary>
    /// <param name="moveSpace"></param>
    /// <param name="mode"></param>
    public void UpdatePage(Vector3 moveSpace, FlipMode mode)
    {
        this.MoveSpace = moveSpace;
        this.FlipMode  = mode;
        if (IsOpened)
        {
            return;
        }
        switch (mode)
        {
        case FlipMode.Left:
            UpdateLeftMode(moveSpace);
            break;

        case FlipMode.Middle:
        default:
            UpdateMiddleMode(moveSpace);
            break;
        }
    }
예제 #22
0
        internal static Image FlipImage(Image myImage, FlipMode myFlipmode)
        {
            var ret = myImage;

            switch (myFlipmode)
            {
            case FlipMode.Horizontal:
                ret.RotateFlip(RotateFlipType.RotateNoneFlipX);
                break;

            case FlipMode.Vertical:
                ret.RotateFlip(RotateFlipType.RotateNoneFlipY);
                break;

            case FlipMode.Both:
                ret.RotateFlip(RotateFlipType.RotateNoneFlipXY);
                break;
            }
            return(ret);
        }
예제 #23
0
        public void DragLeftPageToPoint(Vector3 point)
        {
            if (IsFirstPage())
            {
                return;
            }

            if (_pageFlipping)
            {
                return;
            }

            _pageFlipping = true;
            _mode         = FlipMode.LeftToRight;
            _f            = point;

            nextPageClip.rectTransform.pivot  = new Vector2(1, 0.12f);
            clippingPlane.rectTransform.pivot = new Vector2(0, 0.35f);

            rightOnFlip.gameObject.SetActive(true);
            rightOnFlip.transform.position    = left.transform.position;
            rightOnFlip.transform.eulerAngles = new Vector3(0, 0, 0);
            rightOnFlip.transform.SetAsFirstSibling();

            leftOnFlip.gameObject.SetActive(true);
            leftOnFlip.rectTransform.pivot   = new Vector2(1, 0);
            leftOnFlip.transform.position    = left.transform.position;
            leftOnFlip.transform.eulerAngles = new Vector3(0, 0, 0);

            //Left.rectTransform.pivot = new Vector2(1, 0);

            right.transform.SetAsFirstSibling();
            UpdatePagesOnFlip();

            if (enableShadowEffect)
            {
                shadowLTR.gameObject.SetActive(true);
            }

            UpdateFlipLeft2RightToPoint(_f);
        }
예제 #24
0
        /// <summary>
        /// Flips an image along a specified axis
        /// </summary>
        /// <param name="image">Image to flip</param>
        /// <param name="mode">Axis along which to flip</param>
        /// <returns>A new flipped image</returns>
        public static Shared <Image> Flip(this Image image, FlipMode mode)
        {
            var bitmap   = new Bitmap(image.Width, image.Height);
            var graphics = Graphics.FromImage(bitmap);

            switch (mode)
            {
            case FlipMode.AlongHorizontalAxis:
                graphics.TranslateTransform(0.0f, image.Height - 1);
                graphics.ScaleTransform(1.0f, -1.0f);
                break;

            case FlipMode.AlongVerticalAxis:
                graphics.TranslateTransform(image.Width - 1, 0.0f);
                graphics.ScaleTransform(-1.0f, 1.0f);
                break;
            }

            graphics.DrawImage(image.ToManagedImage(), new Point(0, 0));
            return(ImagePool.GetOrCreate(bitmap));
        }
예제 #25
0
        public void UpdateBookRTLToPoint(Vector3 followLocation)
        {
            mode         = FlipMode.RightToLeft;
            _followPoint = followLocation;
            _shadowTransform.SetParent(_clippingPanelTransform, true);
            _shadowTransform.localPosition    = new Vector3(0, 0, 0);
            _shadowTransform.localEulerAngles = new Vector3(0, 0, 0);
            _rightTransform.SetParent(_clippingPanelTransform, true);

            _leftTransform.SetParent(_bookTransform, true);
            _rightNextTransform.SetParent(_bookTransform, true);
            _pageCorner = Calc_C_Position(followLocation);
            Vector3 t1;
            float   T0_T1_Angle = Calc_T0_T1_Angle(_pageCorner, _edgeBottomRight, out t1);

            if (T0_T1_Angle >= -90)
            {
                T0_T1_Angle -= 180;
            }

            _clippingPanelTransform.pivot       = new Vector2(1, 0.35f);
            _clippingPanelTransform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
            _clippingPanelTransform.position    = _bookTransform.TransformPoint(t1);

            //page position and angle
            _rightTransform.position = _bookTransform.TransformPoint(_pageCorner);
            float C_T1_dy    = t1.y - _pageCorner.y;
            float C_T1_dx    = t1.x - _pageCorner.x;
            float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;

            _rightTransform.eulerAngles = new Vector3(0, 0, C_T1_Angle);

            _nextPageClipTransform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
            _nextPageClipTransform.position    = _bookTransform.TransformPoint(t1);
            _rightNextTransform.SetParent(_nextPageClipTransform, true);
            _leftTransform.SetParent(_clippingPanelTransform, true);
            _leftTransform.SetAsFirstSibling();

            _shadowTransform.SetParent(_rightTransform, true);
        }
예제 #26
0
파일: Book.cs 프로젝트: xyxdasnjss/hogwarts
    public void DragLeftPageToPoint(Vector3 point)
    {
        if (currentPage <= 0)
        {
            return;
        }
        pageDragging = true;
        mode         = FlipMode.LeftToRight;
        f            = point;

        NextPageClip.rectTransform.pivot  = new Vector2(1, 0.12f);
        ClippingPlane.rectTransform.pivot = new Vector2(0, 0.12f);

        if (currentPage - 3 > 0)
        {
            currentL.text = pageText [currentPage - 3].Replace("<br>", "\n");
        }
        nextR.text = pageText [currentPage - 1].Replace("<br>", "\n");

        Right.gameObject.SetActive(true);
        Right.transform.position    = LeftNext.transform.position;
        Right.sprite                = bookPages[currentPage - 1];
        Right.transform.eulerAngles = new Vector3(0, 0, 0);
        Right.transform.SetAsFirstSibling();

        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot   = new Vector2(1, 0);
        Left.transform.position    = LeftNext.transform.position;
        Left.transform.eulerAngles = new Vector3(0, 0, 0);
        Left.sprite = (currentPage >= 2) ? bookPages[currentPage - 2] : background;

        LeftNext.sprite = (currentPage >= 3) ? bookPages[currentPage - 3] : background;

        RightNext.transform.SetAsFirstSibling();
        if (enableShadowEffect)
        {
            ShadowLTR.gameObject.SetActive(true);
        }
        UpdateBookLTRToPoint(f);
    }
예제 #27
0
        /// <summary>
        /// Flips (reflects the image) eiter vertical or horizontal.
        /// </summary>
        /// <param name="bmp">The WriteableBitmap.</param>
        /// <param name="flipMode">The flip mode.</param>
        /// <returns>A new WriteableBitmap that is a flipped version of the input.</returns>
        public static WriteableBitmap Flip(this WriteableBitmap bmp, FlipMode flipMode)
        {
            // Use refs for faster access (really important!) speeds up a lot!
            var             w      = bmp.PixelWidth;
            var             h      = bmp.PixelHeight;
            var             p      = bmp.Pixels;
            var             i      = 0;
            WriteableBitmap result = null;

            if (flipMode == FlipMode.Horizontal)
            {
                result = new WriteableBitmap(w, h);
                var rp = result.Pixels;
                for (var y = h - 1; y >= 0; y--)
                {
                    for (var x = 0; x < w; x++)
                    {
                        var srcInd = y * w + x;
                        rp[i] = p[srcInd];
                        i++;
                    }
                }
            }
            else if (flipMode == FlipMode.Vertical)
            {
                result = new WriteableBitmap(w, h);
                var rp = result.Pixels;
                for (var y = 0; y < h; y++)
                {
                    for (var x = w - 1; x >= 0; x--)
                    {
                        var srcInd = y * w + x;
                        rp[i] = p[srcInd];
                        i++;
                    }
                }
            }

            return(result);
        }
예제 #28
0
        public static Volume Flip(this Volume volume, FlipMode mode)
        {
            Volume result = volume;

            if (mode == FlipMode.LeftRight || mode == FlipMode.Both)
            {
                // flip volume horziontally
                var w = volume.CloneAndZero();
                for (var x = 0; x < volume.Width; x++)
                {
                    for (var y = 0; y < volume.Height; y++)
                    {
                        for (var depth = 0; depth < volume.Depth; depth++)
                        {
                            w.Set(x, y, depth, volume.Get(volume.Width - x - 1, y, depth)); // copy data over
                        }
                    }
                }
                result = w; //swap
            }

            if (mode == FlipMode.UpDown || mode == FlipMode.Both)
            {
                // flip volume horziontally
                var w = volume.CloneAndZero();
                for (var x = 0; x < volume.Width; x++)
                {
                    for (var y = 0; y < volume.Height; y++)
                    {
                        for (var depth = 0; depth < volume.Depth; depth++)
                        {
                            w.Set(x, y, depth, result.Get(x, volume.Height - y - 1, depth)); // copy data over
                        }
                    }
                }
                result = w; //swap
            }

            return(result);
        }
예제 #29
0
        public void UpdateFlipRight2LeftToPoint(Vector3 followLocation)
        {
            _mode = FlipMode.RightToLeft;
            _f    = followLocation;
            shadow.transform.SetParent(clippingPlane.transform, true);
            shadow.transform.localPosition    = new Vector3(0, 0, 0);
            shadow.transform.localEulerAngles = new Vector3(0, 0, 0);
            rightOnFlip.transform.SetParent(clippingPlane.transform, true);

            leftOnFlip.transform.SetParent(bookPanel.transform, true);
            right.transform.SetParent(bookPanel.transform, true);
            _c = Calc_C_Position(followLocation);
            Vector3 t1;
            float   T0_T1_Angle = Calc_T0_T1_Angle(_c, _ebr, out t1);

            if (T0_T1_Angle >= -90)
            {
                T0_T1_Angle -= 180;
            }

            clippingPlane.rectTransform.pivot   = new Vector2(1, 0.35f);
            clippingPlane.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
            clippingPlane.transform.position    = bookPanel.TransformPoint(t1);

            //page position and angle
            rightOnFlip.transform.position = bookPanel.TransformPoint(_c);
            float C_T1_dy    = t1.y - _c.y;
            float C_T1_dx    = t1.x - _c.x;
            float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;

            rightOnFlip.transform.eulerAngles = new Vector3(0, 0, C_T1_Angle);

            nextPageClip.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
            nextPageClip.transform.position    = bookPanel.TransformPoint(t1);
            right.transform.SetParent(nextPageClip.transform, true);
            leftOnFlip.transform.SetParent(clippingPlane.transform, true);
            leftOnFlip.transform.SetAsFirstSibling();

            shadow.rectTransform.SetParent(rightOnFlip.rectTransform, true);
        }
예제 #30
0
    public void DragRightPageToPoint(Vector3 point)                 // 翻起右边页(起手)
    {
        if (currentPaper > EndFlippingPaper)
        {
            return;
        }
        pageDragging = true;
        mode         = FlipMode.RightToLeft;
        f            = point;

        ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);
        currentPaper += 1;

        UpdatePages();

        Left = papers[currentPaper - 1].Front.GetComponent <Image>();
        BookUtility.ShowPage(Left.gameObject);
        Left.rectTransform.pivot        = new Vector2(0, 0);
        Left.transform.position         = RightPageTransform.transform.position;
        Left.transform.localEulerAngles = new Vector3(0, 0, 0);

        Right = papers[currentPaper - 1].Back.GetComponent <Image>();
        BookUtility.ShowPage(Right.gameObject);
        Right.transform.position         = RightPageTransform.transform.position;
        Right.transform.localEulerAngles = new Vector3(0, 0, 0);

        if (enableShadowEffect)
        {
            Shadow.gameObject.SetActive(true);
        }
        ClippingPlane.gameObject.SetActive(true);

        UpdateBookRTLToPoint(f);

        if (currentPaper == papers.Length)            // 最后一页的情况
        {
            mBgToggle.Change2Three();
        }
    }
예제 #31
0
    public void UpdateBookLTRToPoint(Vector3 followLocation)
    {
        mode = FlipMode.LeftToRight;
        f    = followLocation;
        ShadowLTR.transform.SetParent(ClippingPlane.transform, true);
        ShadowLTR.transform.localPosition    = new Vector3(0, 0, 0);
        ShadowLTR.transform.localEulerAngles = new Vector3(0, 0, 0);
        Left.transform.SetParent(ClippingPlane.transform, true);

        Right.transform.SetParent(BookPanel.transform, true);
        Right.transform.localEulerAngles = Vector3.zero;
        LeftNext.transform.SetParent(BookPanel.transform, true);

        c = Calc_C_Position(followLocation);
        Vector3 t1;
        float   clipAngle = CalcClipAngle(c, ebl, out t1);

        //0 < T0_T1_Angle < 180
        clipAngle = (clipAngle + 180) % 180;

        ClippingPlane.transform.localEulerAngles = new Vector3(0, 0, clipAngle - 90);
        ClippingPlane.transform.position         = BookPanel.TransformPoint(t1);

        //page position and angle
        Left.transform.position = BookPanel.TransformPoint(c);
        float C_T1_dy    = t1.y - c.y;
        float C_T1_dx    = t1.x - c.x;
        float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;

        Left.transform.localEulerAngles = new Vector3(0, 0, C_T1_Angle - 90 - clipAngle);

        NextPageClip.transform.localEulerAngles = new Vector3(0, 0, clipAngle - 90);
        NextPageClip.transform.position         = BookPanel.TransformPoint(t1);
        LeftNext.transform.SetParent(NextPageClip.transform, true);
        Right.transform.SetParent(ClippingPlane.transform, true);
        Right.transform.SetAsFirstSibling();

        ShadowLTR.rectTransform.SetParent(Left.rectTransform, true);
    }
예제 #32
0
파일: Shape.cs 프로젝트: physalis/MeeGen
 internal Shape()
 {
     this.position = new Point(0, 0);
     this.svgHandle = new Handle();
     this.size = new Size();
     this.size.Width = 0;
     this.size.Height = 0;
     this.zoom = 0;
     this.rotation = 0;
     this.selected = false;
     this.flipMode = FlipMode.None;
     this.svgContent = null;
     this.svgDoc = new XmlDocument();
 }
예제 #33
0
        /// <summary>
        /// Perform the requested flip
        /// </summary>
        /// <param name="pbOutData">Pointer to the output buffer</param>
        /// <param name="cbInData">Size of input buffer</param>
        /// <param name="pbInData">Pointer to input buffer</param>
        /// <param name="BPP">Bytes (not bits) per pixel</param>
        /// <param name="mode">What type of flip to do</param>
        private void DoFlip(IntPtr pbOutData, int cbInData, IntPtr pbInData, int BPP, FlipMode mode)
        {
            switch (mode)
            {
                // No flip, just copy the data
                case FlipMode.None:
                    CopyMemory(pbOutData, pbInData, cbInData);
                    break;

                // Flip along the y axis
                case FlipMode.FlipY:

                    // Point to the last row of the dest and walk backwards
                    pbOutData = (IntPtr)(pbOutData.ToInt32() + cbInData - m_Stride);
                    for (int x=0; x < m_Height; x++)
                    {
                        // Copy a row
                        CopyMemory(pbOutData, pbInData, m_Stride);

                        // Walk forward thru the src, and backward thru the src
                        pbInData = (IntPtr)(pbInData.ToInt32() + m_Stride);
                        pbOutData = (IntPtr)(pbOutData.ToInt32() - m_Stride);
                    }
                    break;

                // Flip along the X axis
                case FlipMode.FlipX:
                    // For each row
                    for (int x=0; x < m_Height; x++)
                    {
                        // Calculate the read/write positions
                        int s = (x * m_Stride);
                        int src = s;
                        int dst = (m_Stride - BPP) + s;

                        // For each pixel in the row
                        for (int y=0; y < m_Width; y ++)
                        {
                            if (BPP == 4)
                            {
                                // Read the pixel, write the pixel
                                int i1 = Marshal.ReadInt32(pbInData, src);
                                Marshal.WriteInt32(pbOutData, dst, i1);
                            }
                            else
                            {
                                // Read the pixel
                                short s1 = Marshal.ReadInt16(pbInData, 0 + src);
                                byte i3 = Marshal.ReadByte(pbInData, 2 + src);

                                // Write the pixel (if you mess up the order here,
                                // you can get very strange looking output!)
                                Marshal.WriteInt16(pbOutData, 0 + dst, s1);
                                Marshal.WriteByte(pbOutData, 2 + dst, i3);
                            }

                            src += BPP;
                            dst -= BPP;
                        }
                    }
                    break;

                // Flip along both the X & Y axis
                case FlipMode.FlipY | FlipMode.FlipX:

                    // For each row
                    for (int x=0; x < m_Height; x++)
                    {
                        // Calculate the read/write positions
                        int src = (x * m_Stride);
                        int dst = (m_Stride - BPP) + (cbInData - ((x+1) * m_Stride));

                        // For each pixel in the row
                        for (int y=0; y < m_Width; y ++)
                        {

                            if (BPP == 4)
                            {
                                int i1 = Marshal.ReadInt32(pbInData, 0 + src);
                                Marshal.WriteInt32(pbOutData, 0 + dst, i1);
                            }
                            else
                            {
                                short s1 = Marshal.ReadInt16(pbInData, 0 + src);
                                byte i3 = Marshal.ReadByte(pbInData, 2 + src);

                                Marshal.WriteInt16(pbOutData, 0 + dst, s1);
                                Marshal.WriteByte(pbOutData, 2 + dst, i3);
                            }

                            src += BPP;
                            dst -= BPP;
                        }
                    }
                    break;
            }
        }
예제 #34
0
 public unsafe void FlipBuffer(FlipMode flipMode)
 {
     PixelBuffer pb = new PixelBuffer(_width, _height);
     fixed (int* src = _buffer)
     {
         fixed (int* dest = pb.InternalBuffer)
         {
             switch (flipMode)
             {
                 default:
                 case FlipMode.FlipHorizontal:
                     FlipBufferHorizontal(src, dest);
                     break;
                 case FlipMode.FlipVertical:
                     FlipBufferVertical(src, dest);
                     break;
                 case FlipMode.FlipBoth:
                     FlipBufferBoth(src, dest);
                     break;
             }
         }
     }
     fixed (int* src = pb.InternalBuffer)
     {
         fixed (int* dest = _buffer)
         {
             CopyBuffer(dest, src, _pixelsCount);
         }
     }
     pb.Dispose();
 }
예제 #35
0
파일: Shape.cs 프로젝트: physalis/MeeGen
 public void FlipHorizontally()
 {
     if((this.FlipMode & FlipMode.Horizontal) == FlipMode.Horizontal)
         this.flipMode ^= FlipMode.Horizontal;
     else
         this.flipMode |= FlipMode.Horizontal;
 }
예제 #36
0
 /// <summary>
 /// reverses the order of the rows, columns or both in a matrix
 /// </summary>
 /// <param name="src">The source array</param>
 /// <param name="dst">The destination array; will have the same size and same type as src</param>
 /// <param name="flipCode">Specifies how to flip the array: 
 /// 0 means flipping around the x-axis, positive (e.g., 1) means flipping around y-axis, 
 /// and negative (e.g., -1) means flipping around both axes. See also the discussion below for the formulas.</param>
 public static void Flip(InputArray src, OutputArray dst, FlipMode flipCode)
 {
     if (src == null)
         throw new ArgumentNullException("src");
     if (dst == null)
         throw new ArgumentNullException("dst");
     src.ThrowIfDisposed();
     dst.ThrowIfNotReady();
     NativeMethods.core_flip(src.CvPtr, dst.CvPtr, (int)flipCode);
     GC.KeepAlive(src);
     dst.Fix();
 }
예제 #37
0
 /// <summary>
 /// reverses the order of the rows, columns or both in a matrix
 /// </summary>
 /// <param name="flipCode">Specifies how to flip the array: 
 /// 0 means flipping around the x-axis, positive (e.g., 1) means flipping around y-axis, 
 /// and negative (e.g., -1) means flipping around both axes. See also the discussion below for the formulas.</param>
 /// <returns>The destination array; will have the same size and same type as src</returns>
 public Mat Flip(FlipMode flipCode)
 {
     var dst = new Mat();
     Cv2.Flip(this, dst, flipCode);
     return dst;
 }
예제 #38
0
    public void DragLeftPageToPoint(Vector3 point)
    {
        if (currentPage <= 0) return;
        pageDragging = true;
        mode = FlipMode.LeftToRight;
        f = point;

        NextPageClip.rectTransform.pivot = new Vector2(1, 0.12f);
        ClippingPlane.rectTransform.pivot = new Vector2(0, 0.35f);

        Right.gameObject.SetActive(true);
        Right.transform.position = LeftNext.transform.position;
        Right.sprite = bookPages[currentPage - 1];
        Right.transform.eulerAngles = new Vector3(0, 0, 0);
        Right.transform.SetAsFirstSibling();

        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot = new Vector2(1, 0);
        Left.transform.position = LeftNext.transform.position;
        Left.transform.eulerAngles = new Vector3(0, 0, 0);
        Left.sprite = (currentPage >= 2) ? bookPages[currentPage - 2] : background;

        LeftNext.sprite = (currentPage >= 3) ? bookPages[currentPage - 3] : background;

        RightNext.transform.SetAsFirstSibling();
        if (enableShadowEffect) ShadowLTR.gameObject.SetActive(true);
        UpdateBookLTRToPoint(f);
    }
예제 #39
0
    public void DragRightPageToPoint(Vector3 point)
    {
        if (currentPage >= bookPages.Length) return;
        pageDragging = true;
        mode = FlipMode.RightToLeft;
        f = point;


        NextPageClip.rectTransform.pivot = new Vector2(0, 0.12f);
        ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);

        Left.gameObject.SetActive(true);
        Left.rectTransform.pivot = new Vector2(0, 0);
        Left.transform.position = RightNext.transform.position;
        Left.transform.eulerAngles = new Vector3(0, 0, 0);
        Left.sprite = (currentPage < bookPages.Length) ? bookPages[currentPage] : background;
        Left.transform.SetAsFirstSibling();
        
        Right.gameObject.SetActive(true);
        Right.transform.position = RightNext.transform.position;
        Right.transform.eulerAngles = new Vector3(0, 0, 0);
        Right.sprite = (currentPage < bookPages.Length - 1) ? bookPages[currentPage + 1] : background;

        RightNext.sprite = (currentPage < bookPages.Length - 2) ? bookPages[currentPage + 2] : background;

        LeftNext.transform.SetAsFirstSibling();
        if (enableShadowEffect) Shadow.gameObject.SetActive(true);
        UpdateBookRTLToPoint(f);
    }
예제 #40
0
    public void UpdateBookRTLToPoint(Vector3 followLocation)
    {
        mode = FlipMode.RightToLeft;
        f = followLocation;
        Shadow.transform.SetParent(ClippingPlane.transform, true);
        Shadow.transform.localPosition = new Vector3(0, 0, 0);
        Shadow.transform.localEulerAngles = new Vector3(0, 0, 0);
        Right.transform.SetParent(ClippingPlane.transform, true);
        
        Left.transform.SetParent(BookPanel.transform, true);
        RightNext.transform.SetParent(BookPanel.transform, true);
        c = Calc_C_Position(followLocation);
        Vector3 t1;
        float T0_T1_Angle = Calc_T0_T1_Angle(c,ebr,out t1);
        if (T0_T1_Angle >= -90) T0_T1_Angle -= 180;

        ClippingPlane.rectTransform.pivot = new Vector2(1, 0.35f);
        ClippingPlane.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
        ClippingPlane.transform.position = BookPanel.TransformPoint(t1);

        //page position and angle
        Right.transform.position = BookPanel.TransformPoint(c);
        float C_T1_dy = t1.y - c.y;
        float C_T1_dx = t1.x - c.x;
        float C_T1_Angle = Mathf.Atan2(C_T1_dy, C_T1_dx) * Mathf.Rad2Deg;
        Right.transform.eulerAngles = new Vector3(0, 0, C_T1_Angle);

        NextPageClip.transform.eulerAngles = new Vector3(0, 0, T0_T1_Angle + 90);
        NextPageClip.transform.position = BookPanel.TransformPoint(t1);
        RightNext.transform.SetParent(NextPageClip.transform, true);
        Left.transform.SetParent(ClippingPlane.transform, true);
        Left.transform.SetAsFirstSibling();

        Shadow.rectTransform.SetParent(Right.rectTransform, true);
    }
예제 #41
0
 /// <summary>
 /// Combines the given flipping info and rotation angle into a RotateFlipType value. Rotation angle will snap to nearest 90-degree multiple
 /// </summary>
 /// <param name="flip"></param>
 /// <param name="angle"></param>
 /// <returns></returns>
 public static RotateFlipType CombineFlipAndRotate(FlipMode flip, double angle)
 {
     angle = NormalizeTo90Intervals(angle);
     if (flip == FlipMode.None) {
         return (RotateFlipType)(int)(angle / 90);
     } else if (flip == FlipMode.X) {
         return (RotateFlipType)(int)(4 + (angle / 90));
     } else if (flip == FlipMode.Y) {
         if (angle == 0) return (RotateFlipType)6;
         if (angle == 90) return (RotateFlipType)7;
         if (angle == 180) return (RotateFlipType)4;
         if (angle == 270) return (RotateFlipType)5;
     } else if (flip == FlipMode.XY) {
         if (angle == 0) return (RotateFlipType)2;
         if (angle == 90) return (RotateFlipType)3;
         if (angle == 180) return (RotateFlipType)0;
         if (angle == 270) return (RotateFlipType)1;
     } else {
         throw new ArgumentException("Invalid FlipMode value " + flip.ToString());
     }
     throw new ArgumentException("Invalid angle value " + angle.ToString());
 }
예제 #42
0
파일: Shape.cs 프로젝트: physalis/MeeGen
 public void FlipVertically()
 {
     if((this.FlipMode & FlipMode.Vertical) == FlipMode.Vertical)
         this.flipMode ^= FlipMode.Vertical;
     else
         this.flipMode |= FlipMode.Vertical;
 }
예제 #43
0
        /// <summary>
        /// 2次元配列を垂直,水平,または両軸で反転する
        /// </summary>
        /// <param name="src">入力配列</param>
        /// <param name="dst">出力配列.もしnullであれば,反転はインプレースモードで行われる</param>
        /// <param name="flipMode">配列の反転方法の指定</param>
#else
        /// <summary>
        /// Flip a 2D array around vertical, horizontal or both axises
        /// </summary>
        /// <param name="src">Source array. </param>
        /// <param name="dst">Destination array. If dst = null the flipping is done in-place. </param>
        /// <param name="flipMode">Specifies how to flip the array.</param>
#endif
        public static void Flip(CvArr src, CvArr dst, FlipMode flipMode)
        {
            if (src == null)
            {
                throw new ArgumentNullException("src");
            }
            IntPtr dstPtr = (dst == null) ? IntPtr.Zero : dst.CvPtr;
            NativeMethods.cvFlip(src.CvPtr, dstPtr, flipMode);
        }
        /// <summary>
        /// Flips (reflects the image) either vertical or horizontal.
        /// </summary>
        /// <param name="bmp">The WriteableBitmap.</param>
        /// <param name="flipMode">The flip mode.</param>
        /// <returns>A new WriteableBitmap that is a flipped version of the input.</returns>
        public static WriteableBitmap Flip(this WriteableBitmap bmp, FlipMode flipMode)
        {
            using (var context = bmp.GetBitmapContext())
            {
                // Use refs for faster access (really important!) speeds up a lot!
                var w = context.Width;
                var h = context.Height;
                var p = context.Pixels;
                var i = 0;
                WriteableBitmap result = null;

                if (flipMode == FlipMode.Horizontal)
                {
                    result = BitmapFactory.New(w, h);
                    using (var destContext = result.GetBitmapContext())
                    {
                        var rp = destContext.Pixels;
                        for (var y = h - 1; y >= 0; y--)
                        {
                            for (var x = 0; x < w; x++)
                            {
                                var srcInd = y * w + x;
                                rp[i] = p[srcInd];
                                i++;
                            }
                        }
                    }
                }
                else if (flipMode == FlipMode.Vertical)
                {
                    result = BitmapFactory.New(w, h);
                    using (var destContext = result.GetBitmapContext())
                    {
                        var rp = destContext.Pixels;
                        for (var y = 0; y < h; y++)
                        {
                            for (var x = w - 1; x >= 0; x--)
                            {
                                var srcInd = y * w + x;
                                rp[i] = p[srcInd];
                                i++;
                            }
                        }
                    }
                }

                return result;
            }
        }
예제 #45
0
        /// <summary>
        /// 2次元配列を垂直,水平,または両軸で反転する. cvFlipのエイリアス.
        /// </summary>
        /// <param name="src">入力配列</param>
        /// <param name="dst">出力配列.もしnullであれば,反転はインプレースモードで行われる</param>
        /// <param name="flipMode">配列の反転方法の指定</param>
#else
        /// <summary>
        /// Flip a 2D array around vertical, horizontal or both axises 
        /// </summary>
        /// <param name="src">Source array. </param>
        /// <param name="dst">Destination array. If dst = null the flipping is done in-place. </param>
        /// <param name="flipMode">Specifies how to flip the array.</param>
#endif
        public static void Mirror(CvArr src, CvArr dst, FlipMode flipMode)
        {
            Flip(src, dst, flipMode);
        }
        /// <summary>
        /// Flips (reflects the image) eiter vertical or horizontal.
        /// </summary>
        /// <param name="bmp">The WriteableBitmap.</param>
        /// <param name="flipMode">The flip mode.</param>
        /// <returns>A new WriteableBitmap that is a flipped version of the input.</returns>
        public static WriteableBitmap Flip(this WriteableBitmap bmp, FlipMode flipMode)
        {
            // Use refs for faster access (really important!) speeds up a lot!
             var w = bmp.PixelWidth;
             var h = bmp.PixelHeight;
             var p = bmp.Pixels;
             var i = 0;
             WriteableBitmap result = null;

             if (flipMode == FlipMode.Horizontal)
             {
            result = new WriteableBitmap(w, h);
            var rp = result.Pixels;
            for (var y = h - 1; y >= 0; y--)
            {
               for (var x = 0; x < w; x++)
               {
                  var srcInd = y * w + x;
                  rp[i] = p[srcInd];
                  i++;
               }
            }
             }
             else if (flipMode == FlipMode.Vertical)
             {
            result = new WriteableBitmap(w, h);
            var rp = result.Pixels;
            for (var y = 0; y < h; y++)
            {
               for (var x = w - 1; x >= 0; x--)
               {
                  var srcInd = y * w + x;
                  rp[i] = p[srcInd];
                  i++;
               }
            }
             }

             return result;
        }
예제 #47
0
파일: Shape.cs 프로젝트: physalis/MeeGen
        /// <summary>
        /// Creates a new instance of the MeeGen.Shape class
        /// </summary>
        /// <param name="handle">
        /// The Rsvg.Handle that contains the image data for this instance
        /// A <see cref="Handle"/>
        /// </param>
        /// <param name="pos">
        /// The starting position of the new shape
        /// A <see cref="Point"/>
        /// </param>
        public Shape(Handle handle, Point pos)
        {
            this.position = pos;

            this.svgHandle = handle;

            this.size = new Size(this.svgHandle.Dimensions.Width,
                                 this.svgHandle.Dimensions.Height);

            this.zoom = 1d;
            this.rotation = 0d;
            this.selected = false;

            this.flipMode = FlipMode.None;

            if(handle.BaseUri.Length > 0)
            {
                StreamReader reader = new StreamReader(handle.BaseUri.Substring(7));
                svgContent = reader.ReadToEnd();
                reader.Close();
            }

            this.svgDoc = new XmlDocument();
            svgDoc.LoadXml(svgContent);

            this.colorizeItems = this.ParseMetadata();
        }