Ejemplo n.º 1
0
        public void MouseMove(Point position)
        {
            if (_workspace == null || _workspace.InputService == null)
            {
                return;
            }

            lastPointerPosition = position;
            var delta = lastPanPoint - position;

            if (panning)
            {
                var vp    = _workspace.ActiveViewPort;
                var scale = vp.ViewHeight / Height;
                var dx    = vp.BottomLeft.X + delta.X * scale;
                var dy    = vp.BottomLeft.Y - delta.Y * scale;
                _workspace.Update(activeViewPort: vp.Update(bottomLeft: new Point(dx, dy, vp.BottomLeft.Z)));
                lastPanPoint         = position;
                firstSelectionPoint -= delta;
            }

            if (selecting)
            {
                var left   = Math.Min(position.X, firstSelectionPoint.X);
                var top    = Math.Min(position.Y, firstSelectionPoint.Y);
                var width  = Math.Abs(position.X - firstSelectionPoint.X);
                var height = Math.Abs(position.Y - firstSelectionPoint.Y);
                var rect   = new Rect(left, top, width, height);
                var mode   = position.X < firstSelectionPoint.X
                    ? SelectionMode.PartialEntity
                    : SelectionMode.WholeEntity;
                currentSelectionPoint = position;
                UpdateSelectionRectangle(new SelectionState(rect, mode));
            }

            updateSnapPointsTask.ContinueWith(_ =>
            {
                var snapPoint = GetActiveModelPoint(position, updateSnapPointsCancellationTokenSource.Token);
                CursorWorldLocationUpdated?.Invoke(this, snapPoint.WorldPoint);
                CurrentSnapPointUpdated?.Invoke(this, snapPoint);
                UpdateRubberBandLines(snapPoint.WorldPoint);
                if ((_workspace.InputService.AllowedInputTypes & InputType.Point) == InputType.Point ||
                    selectingRectangle)
                {
                    DrawSnapPoint(snapPoint, GetNextDrawSnapPointId());
                }
            }, updateSnapPointsCancellationTokenSource.Token).ConfigureAwait(false);
        }
Ejemplo n.º 2
0
 private void DrawSnapPoint(TransformedSnapPoint snapPoint, long drawId)
 {
     lock (lastDrawnSnapPointIdGate)
     {
         if (drawId > lastDrawnSnapPointId)
         {
             lastDrawnSnapPointId = drawId;
             var snapDistance = _workspace.SettingsService.GetValue <double>(DisplaySettingsNames.SnapPointDistance);
             snapDistance *= snapDistance;
             var distSquared = (snapPoint.ControlPoint - lastPointerPosition).LengthSquared;
             if (distSquared <= snapDistance && snapPoint.Kind != SnapPointKind.None)
             {
                 CurrentSnapPointUpdated?.Invoke(this, snapPoint);
             }
             else
             {
                 CurrentSnapPointUpdated?.Invoke(this, null);
             }
         }
     }
 }