Exemplo n.º 1
0
        /// <summary>
        /// get screen position
        /// </summary>
        /// <param name="pane"></param>
        /// <returns></returns>
        public virtual ScreenPos GetScreenPos(IDrawArea pane, CodePos <TCX, TCY> codepos)
        {
            var lpos = new LayoutPos
            {
                X = PositionerX(codepos.X, codepos.Y),
                Y = PositionerY(codepos.X, codepos.Y),
            };

            return(ScreenPos.From(pane, lpos));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Calc Layout position
        /// </summary>
        /// <param name="codepos"></param>
        /// <returns></returns>
        public virtual LayoutPos GetLayoutPos(CodePos <TCX, TCY> codepos)
        {
            var lpos = new LayoutPos
            {
                X = PositionerX(codepos.X, codepos.Y),
                Y = PositionerY(codepos.X, codepos.Y),
            };

            return(lpos);
        }
Exemplo n.º 3
0
        public void Move(IDrawArea pane, ScreenSize offset)
        {
            var s0 = GetScreenPos(pane, PositionBackup);
            var s1 = s0 + offset;
            var l1 = LayoutPos.From(pane, s1);
            var cl = CoderX(l1.X, l1.Y);
            var ca = CoderY(l1.X, l1.Y);

            Location = CodePos <Distance, Angle> .From(cl, ca);
        }
Exemplo n.º 4
0
 public void OnPointerPressed(PointerState po)
 {
     //Debug.WriteLine($"★OnPointerPressed {po.Position} finger={po.FingerCount} Scale={po.Scale}");
     if (getTrigger(po) == PointerState.DeviceTypes.Mouse)
     {
         if (isZooming == false)
         {
             _sPosDown    = po.Position;
             _lPosDown    = LayoutPos.From(Pane.Target, po.Position);
             _sZoomDown   = ScreenPos.From(Pane.Target.ZoomX, Pane.Target.ZoomY);
             _lScrollDown = LayoutPos.From(Pane.Target.ScrollX, Pane.Target.ScrollY);
             isZooming    = true;
         }
     }
 }
Exemplo n.º 5
0
        public LayoutPos GetLayoutPos(Angle A)
        {
            var lw   = TargetProcess.PositionerX(CodeX <Distance> .From(TargetProcess.Width / 2 + Width / 2), CodeY <Distance> .From(TargetProcess.Height / 2 + Height / 2));
            var lh   = TargetProcess.PositionerY(CodeX <Distance> .From(TargetProcess.Width / 2 + Width / 2), CodeY <Distance> .From(TargetProcess.Height / 2 + Height / 2));
            var lpos = TargetProcess.GetLayoutPos();                  // Parts Location
            var lois = GeoEu.GetLocationOfInscribedSquareInCircle(A); // Connector Location Unit (0.7 times)

            return(LayoutPos.From(
                       lpos.X                // Parts Location
                       + lw * MathUtil.Root2 // R (Circle of the four vertices)
                       * lois.X,             // Location of inscribed square in circle
                       lpos.Y                // Parts Location
                       + lh * MathUtil.Root2 // R (Circle of the four vertices)
                       * lois.Y              // Location of inscribed square in circle
                       ));
        }
Exemplo n.º 6
0
        public Angle GetAngle(LayoutPos lpos)
        {
            var lpos0 = TargetProcess.GetLayoutPos(); // Parts Location

            return(GeoEu.Angle(0.0, 0.0, lpos.X.Lx - lpos0.X.Lx, -(lpos.Y.Ly - lpos0.Y.Ly)));
        }
Exemplo n.º 7
0
        /// <summary>
        /// Get code position Y
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="spos"></param>
        /// <returns></returns>
        public CodeY <TCY> GetCodeY(IDrawArea pane, ScreenPos spos)
        {
            var lpos = LayoutPos.From(pane, spos);

            return(CoderY(lpos.X, lpos.Y));
        }
Exemplo n.º 8
0
        /// <summary>
        /// Get code position X
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="spos"></param>
        /// <returns></returns>
        public CodeX <TCX> GetCodeX(IDrawArea pane, ScreenPos spos)
        {
            var lpos = LayoutPos.From(pane, spos);

            return(CoderX(lpos.X, lpos.Y));
        }
Exemplo n.º 9
0
        /// <summary>
        /// Get code position from screen position
        /// </summary>
        /// <param name="pane"></param>
        /// <param name="spos">screen position</param>
        /// <returns></returns>
        public CodePos <TCX, TCY> GetCodePos(IDrawArea pane, ScreenPos spos)
        {
            var lpos = LayoutPos.From(pane, spos);

            return(CodePos <TCX, TCY> .From(CoderX(lpos.X, lpos.Y), CoderY(lpos.X, lpos.Y)));
        }
Exemplo n.º 10
0
        public void OnPointerMoved(PointerState po)
        {
            //Debug.WriteLine($"★OnPointerMoved {po.Position} finger={po.FingerCount} Scale={po.Scale}");
            if (po.Scale != 1.0f || isZooming)
            {
                if (isZooming == false)
                {
                    _sPosDown    = po.Position;
                    _lPosDown    = LayoutPos.From(Pane.Target, po.Position);
                    _sZoomDown   = ScreenPos.From(Pane.Target.ZoomX, Pane.Target.ZoomY);
                    _lScrollDown = LayoutPos.From(Pane.Target.ScrollX, Pane.Target.ScrollY);
                    isZooming    = true;
                }
                ScreenPos sZoom;
                var       lScroll = _lScrollDown;
                var       sMove   = po.Position - _sPosDown; // pointer move distance
                switch (getTrigger(po))
                {
                case PointerState.DeviceTypes.Mouse:
                    sZoom = _sZoomDown + sMove * (0.003 * SpeedX, 0.003 * SpeedY);     // ズーム値の算出  速度変更(高解像度に伴い) 2016.11.15 Tono 2→3
                    break;

                case PointerState.DeviceTypes.Touch:
                    sZoom = _sZoomDown * po.Scale;
                    break;

                default:
                    OnPointerReleased(po);
                    return;
                }

                // sZoom.TrimMinimum(ScreenX.From(500), ScreenY.From(500));
                sZoom.TrimMinimum(ScreenX.From(0.2), ScreenY.From(0.2));  // 小さい値に対応
                sZoom.TrimMaximum(ScreenX.From(100000), ScreenY.From(100000));
                var isChanged = false;

                if (Pane.Target.ZoomX != sZoom.X || Pane.Target.ZoomY != sZoom.Y)
                {
                    Pane.Target.ZoomX = sZoom.X;
                    Pane.Target.ZoomY = sZoom.Y;
                    Token.Link(po, new EventTokenPaneChanged
                    {
                        TokenID    = TokensGeneral.Zoomed,
                        Sender     = this,
                        Remarks    = "drag zoom",
                        TargetPane = Pane.Target,
                    });
                    isChanged = true;
                }
                //if (Pane.Target.ScrollX != lScroll.X.Lx || Pane.Target.ScrollY != lScroll.Y.Ly)
                //{
                //    Pane.Target.ScrollX = lScroll.X.Lx;
                //    Pane.Target.ScrollY = lScroll.Y.Ly;
                //    Token.Link(po, new EventTokenPaneChanged
                //    {
                //        TokenID = TokensGeneral.Scrolled,
                //        Sender = this,
                //        Remarks = "auto scroll when drag zoom",
                //        TargetPane = Pane.Target,
                //    });
                //    isChanged = true;
                //}
                if (isChanged)
                {
                    onZoomed();
                    Redraw();
                }
            }
        }