コード例 #1
0
        //--------------------------------------------------------------------------------------------------

        public void TouchMove(int id, Point pos)
        {
            if (ViewportController == null)
            {
                return;
            }

            if (_MultiTouch)
            {
                // Double touch, pan
                double dx = 0, dy = 0;
                if (_FirstId == id)
                {
                    dx        = pos.X - _FirstPos.X;
                    dy        = pos.Y - _FirstPos.Y;
                    _FirstPos = pos;
                }
                else if (_SecondId == id)
                {
                    dx         = pos.X - _SecondPos.X;
                    dy         = pos.Y - _SecondPos.Y;
                    _SecondPos = pos;
                }
                double scale = ViewportController.Viewport.Scale * 1.1;
                ViewportController.Pan(dx / scale, -dy / scale);
                _MoveCallCount++;

                // zoom and roll
                var newFirstToSecond = Point.Subtract(_FirstPos, _SecondPos);

                var diffDistance = newFirstToSecond.Length - _FirstToSecond.Length;
                ViewportController.Zoom(diffDistance / 100.0);

                var angle = Vector.AngleBetween(_FirstToSecond, newFirstToSecond);
                ViewportController.Rotate(0, 0, angle);

                _FirstToSecond = newFirstToSecond;
            }
            else
            {
                // Single touch, rotate
                if (_FirstId == id)
                {
                    var dx = (pos.X - _FirstPos.X) * 0.25;
                    var dy = (pos.Y - _FirstPos.Y) * 0.25;
                    ViewportController.Rotate(dy, -dx, 0.0);
                    _FirstPos = pos;
                    _MoveCallCount++;
                }
            }

            if (_MoveCallCount > 3)
            {
                // Touch events are propagated to mouse events. If we do not cancel selection,
                // the MouseUp event will select the body moved under the pointer.
                ViewportController.WorkspaceController.CancelSelection();
            }
        }
コード例 #2
0
        //--------------------------------------------------------------------------------------------------

        public void TouchMove(int id, Point pos)
        {
            if (ViewportController == null)
            {
                return;
            }

            if (_MultiTouch)
            {
                // Double touch, pan mode
                if (_FirstId == id)
                {
                    var dx = (pos.X - _FirstPos.X) / 2.0;
                    var dy = (pos.Y - _FirstPos.Y) / 2.0;
                    ViewportController.Pan(dx, -dy);
                    _FirstPos = pos;
                    _MoveCallCount++;
                }
                else if (_SecondId == id)
                {
                    var dx = (pos.X - _SecondPos.X) / 2.0;
                    var dy = (pos.Y - _SecondPos.Y) / 2.0;
                    ViewportController.Pan(dx, -dy);
                    _SecondPos = pos;
                    _MoveCallCount++;
                }
            }
            else
            {
                // Single touch, rotate mode
                if (_FirstId == id)
                {
                    var dx = (pos.X - _FirstPos.X) * 0.05;
                    var dy = (pos.Y - _FirstPos.Y) * 0.05;
                    ViewportController.Rotate(dy, -dx, 0.0);
                    _FirstPos = pos;
                    _MoveCallCount++;
                }
            }

            if (_MoveCallCount > 3)
            {
                // Touch events are propagated to mouse events. If we do not cancel selection,
                // the MouseUp event will select the body moved under the pointer.
                ViewportController.WorkspaceController.CancelSelection();
            }
        }