Exemplo n.º 1
0
        protected override void MouseMove(MapDocument document, MapViewport vp, OrthographicCamera camera, ViewportEvent e)
        {
            var viewport = vp;

            var point = SnapIfNeeded(camera.ScreenToWorld(e.X, e.Y));
            var st    = GetStateAtPoint(e.X, e.Y, camera);

            if (_state == ClipState.Drawing)
            {
                _state           = ClipState.MovingPoint2;
                _clipPlanePoint1 = _drawingPoint;
                _clipPlanePoint2 = point;
                _clipPlanePoint3 = _clipPlanePoint1 + SnapIfNeeded(camera.GetUnusedCoordinate(new Vector3(128, 128, 128)));
            }
            else if (_state == ClipState.MovingPoint1)
            {
                // Move point 1
                var cp1 = camera.GetUnusedCoordinate(_clipPlanePoint1.Value) + point;
                if (KeyboardState.Ctrl)
                {
                    var diff = _clipPlanePoint1 - cp1;
                    _clipPlanePoint2 -= diff;
                    _clipPlanePoint3 -= diff;
                }
                _clipPlanePoint1 = cp1;
            }
            else if (_state == ClipState.MovingPoint2)
            {
                // Move point 2
                var cp2 = camera.GetUnusedCoordinate(_clipPlanePoint2.Value) + point;
                if (KeyboardState.Ctrl)
                {
                    var diff = _clipPlanePoint2 - cp2;
                    _clipPlanePoint1 -= diff;
                    _clipPlanePoint3 -= diff;
                }
                _clipPlanePoint2 = cp2;
            }
            else if (_state == ClipState.MovingPoint3)
            {
                // Move point 3
                var cp3 = camera.GetUnusedCoordinate(_clipPlanePoint3.Value) + point;
                if (KeyboardState.Ctrl)
                {
                    var diff = _clipPlanePoint3 - cp3;
                    _clipPlanePoint1 -= diff;
                    _clipPlanePoint2 -= diff;
                }
                _clipPlanePoint3 = cp3;
            }

            if (st != ClipState.None || _state != ClipState.None && _state != ClipState.Drawn)
            {
                viewport.Control.Cursor = Cursors.Cross;
            }
            else
            {
                viewport.Control.Cursor = Cursors.Default;
            }
        }
Exemplo n.º 2
0
        protected override void MouseMove(MapViewport viewport, OrthographicCamera camera, ViewportEvent e)
        {
            var vp = viewport;

            if (vp == null)
            {
                return;
            }

            var p      = SnapIfNeeded(camera.ScreenToWorld(e.X, e.Y));
            var cursor = Cursors.Default;

            switch (_state)
            {
            case State.None:
                var st = GetStateAtPoint(e.X, e.Y, camera, out _stateCamera);
                if (st != State.None)
                {
                    cursor = Cursors.SizeAll;
                }
                break;

            case State.MovingPosition:
                if (_stateCamera == null)
                {
                    break;
                }
                var newEye = camera.GetUnusedCoordinate(_stateCamera.EyePosition) + p;
                if (KeyboardState.Ctrl)
                {
                    _stateCamera.LookPosition += (newEye - _stateCamera.EyePosition);
                }
                _stateCamera.EyePosition = newEye;
                SetViewportCamera(_stateCamera.EyePosition, _stateCamera.LookPosition);
                break;

            case State.MovingLook:
                if (_stateCamera == null)
                {
                    break;
                }
                var newLook = camera.GetUnusedCoordinate(_stateCamera.LookPosition) + p;
                if (KeyboardState.Ctrl)
                {
                    _stateCamera.EyePosition += (newLook - _stateCamera.LookPosition);
                }
                _stateCamera.LookPosition = newLook;
                SetViewportCamera(_stateCamera.EyePosition, _stateCamera.LookPosition);
                break;
            }
            vp.Control.Cursor = cursor;
        }
Exemplo n.º 3
0
        public override void StartDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position)
        {
            State.Viewport  = viewport;
            State.Action    = BoxAction.Drawing;
            State.OrigStart = State.Start;
            State.OrigEnd   = State.End;
            var st  = RememberedDimensions == null ? Vector3.Zero : camera.GetUnusedCoordinate(RememberedDimensions.Start);
            var wid = RememberedDimensions == null ? Vector3.Zero : camera.GetUnusedCoordinate(RememberedDimensions.End - RememberedDimensions.Start);

            State.Start = Tool.SnapIfNeeded(camera.Expand(position) + st);
            State.End   = State.Start + wid;
            base.StartDrag(document, viewport, camera, e, position);
        }
Exemplo n.º 4
0
 public override void EndDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position)
 {
     State.Viewport = null;
     State.Action   = BoxAction.Drawn;
     State.End      = Tool.SnapIfNeeded(camera.Expand(position)) + camera.GetUnusedCoordinate(State.End);
     State.FixBounds();
     base.EndDrag(document, viewport, camera, e, position);
 }
Exemplo n.º 5
0
        protected override void MouseUp(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }
            _state = EntityState.Drawn;
            var loc = SnapIfNeeded(camera.ScreenToWorld(e.X, e.Y));

            _location = camera.GetUnusedCoordinate(_location) + loc;
        }
Exemplo n.º 6
0
        private IMapObject SelectionTest(OrthographicCamera camera, ViewportEvent e)
        {
            // Create a box to represent the click, with a tolerance level
            var unused    = camera.GetUnusedCoordinate(new Vector3(100000, 100000, 100000));
            var tolerance = 4 / camera.Zoom; // Selection tolerance of four pixels
            var used      = camera.Expand(new Vector3(tolerance, tolerance, 0));
            var add       = used + unused;
            var click     = camera.ScreenToWorld(e.X, e.Y);
            var box       = new Box(click - add, click + add);

            return(GetLineIntersections(box).FirstOrDefault());
        }
Exemplo n.º 7
0
        protected override void MouseDown(MapViewport viewport, OrthographicCamera camera, ViewportEvent e)
        {
            if (e.Button != MouseButtons.Left && e.Button != MouseButtons.Right)
            {
                return;
            }

            _state = EntityState.Moving;
            var loc = SnapIfNeeded(camera.ScreenToWorld(e.X, e.Y));

            _location = camera.GetUnusedCoordinate(_location) + loc;
            Invalidate();
        }
Exemplo n.º 8
0
        protected override void MouseMove(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e)
        {
            if (!Control.MouseButtons.HasFlag(MouseButtons.Left))
            {
                return;
            }
            if (_state != EntityState.Moving)
            {
                return;
            }
            var loc = SnapIfNeeded(camera.ScreenToWorld(e.X, e.Y));

            _location = camera.GetUnusedCoordinate(_location) + loc;
        }
Exemplo n.º 9
0
        private List <VertexPoint> GetPoints(OrthographicCamera camera, Vector3 position, bool allowMixed, bool topmostOnly, bool oneSolidOnly)
        {
            var p = camera.Flatten(position);
            var d = 5 / camera.Zoom; // Tolerance value = 5 pixels

            // Order by the unused Vector3 in the view (which is the up axis) descending to get the "closest" point
            var points = (from pp in GetVisiblePoints()
                          let c = camera.Flatten(pp.Position)
                                  where p.X >= c.X - d && p.X <= c.X + d && p.Y >= c.Y - d && p.Y <= c.Y + d
                                  let unused = camera.GetUnusedCoordinate(pp.Position)
                                               orderby unused.X + unused.Y + unused.Z descending
                                               select pp).ToList();

            if (!allowMixed && points.Any(x => !x.IsMidpoint))
            {
                points.RemoveAll(x => x.IsMidpoint);
            }
            if (points.Count <= 0)
            {
                return(points);
            }

            var first = points[0];

            if (topmostOnly)
            {
                points = new List <VertexPoint> {
                    first
                }
            }
            ;
            if (oneSolidOnly)
            {
                points.RemoveAll(x => x.Solid != first.Solid);
            }

            return(points);
        }
Exemplo n.º 10
0
 public override void Drag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 lastPosition, Vector3 position)
 {
     State.End = Tool.SnapIfNeeded(camera.Expand(position)) + camera.GetUnusedCoordinate(State.End);
     base.Drag(document, viewport, camera, e, lastPosition, position);
 }
Exemplo n.º 11
0
 public override void Drag(MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 lastPosition, Vector3 position)
 {
     Position = camera.Expand(position) + camera.GetUnusedCoordinate(Position);
     base.Drag(viewport, camera, e, lastPosition, position);
 }
Exemplo n.º 12
0
 public override void Drag(MapViewport viewport, OrthographicCamera camera, ViewportEvent e,
                           Vector3 lastPosition, Vector3 position)
 {
     Position = _vmScaleTool.SnapIfNeeded(camera.Expand(position) + camera.GetUnusedCoordinate(Position));
     OnDragMoved();
 }
Exemplo n.º 13
0
 public override void Drag(MapDocument document, MapViewport viewport, OrthographicCamera camera,
                           ViewportEvent e, Vector3 lastPosition, Vector3 position)
 {
     Position = _tool.SnapToSelection(camera.Expand(position) + camera.GetUnusedCoordinate(Position), camera);
     OnDragMoved();
 }