Exemplo n.º 1
0
        /// <summary>
        /// 指定された値にズームする
        /// </summary>
        /// <param name="who"></param>
        public override void Start(NamedId who)
        {
            // 選択ペーンの描画領域の中心をズームのセンターの設定
            var _posDown = new ScreenPos
            {
                X = _tarRps[0].GetPaneRect().LT.X + (_tarRps[0].GetPaneRect().RB.X - _tarRps[0].GetPaneRect().LT.X) / 2, //ペーンのX座標の中心
                Y = _tarRps[0].GetPaneRect().LT.Y + (_tarRps[0].GetPaneRect().RB.Y - _tarRps[0].GetPaneRect().LT.Y) / 2  //ペーンのY座標の中心
            };
            var _scrollDown = (ScreenPos)Pane.Scroll.Clone();                                                            //ズーム前のスクロール値
            var _zoomDown   = (XyBase)Pane.Zoom.Clone();                                                                 //ズーム前のズーム値
                                                                                                                         // 画面の拡大/縮小
            var intZ = (int)(zoom * 100);                                                                                //ズーム値の取得

            Pane.Zoom = XyBase.FromInt(1000, 1000);                                                                      // ズーム値の初期化
            var zoomX   = Pane.Zoom.X * intZ / 100;
            var zoomY   = Pane.Zoom.Y * intZ / 100;
            var zoomNow = XyBase.FromInt(zoomX, zoomY);             // ズーム値の算出

            Pane.Zoom = zoomNow;                                    // ズーム値の反映

            // クリックした位置を基準にしてズームするように画面をスクロールする。
            var ZoomRatioX = (double)zoomNow.X / _zoomDown.X;                         // X方向のズーム率の算出
            var ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y;                         // Y方向のズーム率の算出

            var beforeDownPos = _posDown - _scrollDown - _tarRps[0].GetPaneRect().LT; //
            var afterDownPos  = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y));

            Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos);     //スクロール値の反映

            Pane.Invalidate(null);
        }
Exemplo n.º 2
0
 /// <summary>
 /// マウスホイールのイベントを転送する
 /// </summary>
 /// <param name="e">マウス状態</param>
 public void OnMouseWheel(MouseState e)
 {
     if (e.Attr.Equals(_trigger))
     {
         var p = XyBase.FromInt(e.Delta.Y, e.Delta.X);
         Pane.Scroll += p / 5;
         Pane.Invalidate(null);
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// マウスWheelイベント
        /// </summary>
        /// <param name="e"></param>
        public void OnMouseWheel(MouseState e)
        {
            if (e.Attr.Equals(_trigger))
            {
                // 選択ペーンの描画領域の中心をズームのセンターの設定
                var _posDown = new ScreenPos
                {
                    X = e.Pane.GetPaneRect().LT.X + e.Pos.X - e.Pane.GetPaneRect().LT.X,
                    Y = e.Pane.GetPaneRect().LT.Y + e.Pos.Y - e.Pane.GetPaneRect().LT.Y
                };
                var _scrollDown = (ScreenPos)Pane.Scroll.Clone();
                var _zoomDown   = (XyBase)Pane.Zoom.Clone();
                var vol         = (int)(GeoEu.Length(Pane.Zoom.X, Pane.Zoom.Y) / 1000 * e.Delta.Y * 0.1);

                // 画面の拡大/縮小

                XyBase zoomNow;
                if (_isX && !_isY)
                {
                    zoomNow = Pane.Zoom + XyBase.FromInt(vol, 0);          // ズーム値の算出
                }
                else if (!_isX && _isY)
                {
                    zoomNow = Pane.Zoom + XyBase.FromInt(0, vol);          // ズーム値の算出
                }
                else
                {
                    zoomNow = Pane.Zoom + vol;                          // ズーム値の算出
                }
                // ズーム値を規定範囲内に収める
                if (zoomNow.X > 4000)
                {
                    zoomNow.X = 4000;
                }

                if (zoomNow.Y > 4000)
                {
                    zoomNow.Y = 4000;
                }

                if (zoomNow.X < 5)
                {
                    zoomNow.X = 5;
                }

                if (zoomNow.Y < 5)
                {
                    zoomNow.Y = 5;
                }

                Pane.Zoom = (XyBase)zoomNow.Clone();           // ズーム値の反映

                // クリックした位置を基準にしてズームするように画面をスクロールする。
                var ZoomRatioX = (double)zoomNow.X / _zoomDown.X;                     // X方向のズーム率の算出
                var ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y;                     // Y方向のズーム率の算出

                var beforeDownPos = _posDown - _scrollDown - e.Pane.GetPaneRect().LT; //
                var afterDownPos  = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y));

                if (_noscrollmove.value == false)
                {
                    Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos);
                }
                else
                {
                    _noscrollmove.value = false;
                }
                Pane.Invalidate(null);
            }
            else
            {
                OnMouseUp(e);
            }
        }