Exemplo n.º 1
0
 void IResizingTarget.OnResizingStarted(ResizingDirection direction)
 {
     // Makes sure the point is synchronized with the underlying key/value pair.
     SynchronizePoint();
     // Remember the starting point
     startingPoint = ActualPoint;
 }
Exemplo n.º 2
0
        private void Click(WindowsPoint point)
        {
            var editableCurve = SelectedCurve as IEditableCurveViewModel;

            if (editableCurve == null)
            {
                IsControlPointHovered = false;
                return;
            }
            // TODO: move this to the curve (especially hit testing)
            var radius       = editableCurve.ControlPointRadius;
            var clickedPoint = editableCurve.GetClosestPoint(point, 2 * radius);

            if (clickedPoint == null)
            {
                if (Keyboard.Modifiers == ModifierKeys.None)
                {
                    ClearPointSelection();
                }
                IsControlPointHovered = false;
                return;
            }

            if (!clickedPoint.IsSelected)
            {
                // FIXME: do this atomically in the curve
                Select(new WindowsRect(point.X - 2 * radius, point.Y - 2 * radius, 4 * radius, 4 * radius), true);
            }

            IsControlPointHovered = true;
        }
Exemplo n.º 3
0
        private void AddPoint(WindowsPoint point)
        {
            using (var transaction = UndoRedoService.CreateTransaction())
            {
                var editableCurve = selectedCurve as IEditableCurveViewModel;
                editableCurve?.AddPoint(point);

                UndoRedoService.SetName(transaction, "Add control point");
            }
        }
Exemplo n.º 4
0
        public override void AddPoint(WindowsPoint point)
        {
            var realPoint = InverseTransformPoint(point);
            var keyFrame  = new AnimationKeyFrame <float>
            {
                Key   = realPoint.X,
                Value = realPoint.Y,
            };
            var index = GetInsertIndex(realPoint);

            KeyFramesNode.Add(keyFrame, index);
        }
Exemplo n.º 5
0
        /// <inheritdoc/>
        public sealed override void AddPoint(WindowsPoint point)
        {
            var realPoint = InverseTransformPoint(point);

            // Make sure the curve is sampled
            UnderlyingCurve.UpdateChanges();
            // Evaluate the current value
            var value = UnderlyingCurve.Evaluate(realPoint.X);

            UpdateComponent(ref value, realPoint);
            var keyFrame = new AnimationKeyFrame <TValue>
            {
                Key   = realPoint.X,
                Value = value,
            };
            var index = GetInsertIndex(realPoint);

            KeyFramesNode.Add(keyFrame, index);
        }
Exemplo n.º 6
0
        private void Select(WindowsRect selectionRect, bool isSingleSelection)
        {
            var editableCurve = SelectedCurve as IEditableCurveViewModel;

            if (editableCurve == null)
            {
                return;
            }

            // TODO: move this to the curve (especially hit testing)
            IList <ControlPointViewModelBase> selectedPoints = editableCurve.ControlPoints.Where(c => selectionRect.Contains(c.ActualPoint)).ToList();

            if (selectedPoints.Count > 1 && isSingleSelection)
            {
                var rectCenter = new WindowsPoint(selectionRect.Left + selectionRect.Width * 0.5, selectionRect.Top + selectionRect.Height * 0.5);
                var closest    = CurveHelper.GetClosestPoint(selectedPoints, rectCenter);
                selectedPoints = new[] { closest };
            }
            switch (Keyboard.Modifiers)
            {
            case ModifierKeys.None:
                ClearPointSelection();
                goto case ModifierKeys.Shift;

            case ModifierKeys.Shift:
                // FIXME: do this atomically in the curve
                foreach (var p in selectedPoints.Where(p => !p.IsSelected))
                {
                    SelectedControlPoints.Add(p);
                    p.IsSelected = true;
                }
                break;

            case ModifierKeys.Control:
                // FIXME: do this atomically in the curve
                foreach (var p in selectedPoints.Where(p => p.IsSelected))
                {
                    SelectedControlPoints.Remove(p);
                    p.IsSelected = false;
                }
                break;
            }
        }
        /// <inheritdoc/>
        public override void AddPoint(WindowsPoint point)
        {
            var realPoint = InverseTransformPoint(point);

            // Make sure the curve is sampled
            UnderlyingCurve.UpdateChanges();
            // Evaluate the current value
            var value = UnderlyingCurve.Evaluate(realPoint.X);

            // Update the component that is handled by this curve
            switch (Component)
            {
            case VectorComponent.X:
                value.X = realPoint.Y;
                break;

            case VectorComponent.Y:
                value.Y = realPoint.Y;
                break;

            case VectorComponent.Z:
                value.Z = realPoint.Y;
                break;

            case VectorComponent.W:
                value.Z = realPoint.Y;
                break;

            default:
                throw new NotSupportedException();     // This should never happen
            }
            // Create a new keyframe
            var keyFrame = new AnimationKeyFrame <Quaternion>
            {
                Key   = realPoint.X,
                Value = value,
            };
            var index = GetInsertIndex(realPoint);

            KeyFramesNode.Add(keyFrame, index);
        }
Exemplo n.º 8
0
        public static ControlPointViewModelBase GetClosestPoint([ItemNotNull, NotNull]  IEnumerable <ControlPointViewModelBase> points, WindowsPoint position, double maximumDistance = double.PositiveInfinity)
        {
            ControlPointViewModelBase closest = null;
            var closestDistance = double.MaxValue;

            foreach (var p in points)
            {
                var distance = (p.ActualPoint - position).LengthSquared;
                if (distance < closestDistance && distance < maximumDistance * maximumDistance)
                {
                    closest         = p;
                    closestDistance = distance;
                }
            }
            return(closest);
        }
Exemplo n.º 9
0
 public static Vector2 ToVector2(this WindowsPoint point)
 {
     return(new Vector2((float)point.X, (float)point.Y));
 }
Exemplo n.º 10
0
 internal Vector2 InverseTransformPoint(WindowsPoint point)
 {
     return((CheckAxes() ? XAxis.InverseTransform(point.X, point.Y, YAxis) : point).ToVector2());
 }
        /// <summary>
        /// Parses event and builds event args.
        /// </summary>
        /// <param name="wParam">Type of event.</param>
        /// <param name="mouse">Mouse event properties.</param>
        /// <returns>Strongly typed event info.</returns>
        private MouseChangeEventArgs BuildEventArgs(WindowsMessages wParam, MouseLowLevelHookStruct mouse)
        {
            var args = new MouseChangeEventArgs()
            {
                Button          = ButtonSource.Unknown,
                ButtonDirection = ButtonChangeDirection.Unknown,
                DeltaPosition   = WindowsPoint.Invalid,
                EventType       = MouseEventType.Unknown,
                NewPosition     = WindowsPoint.Invalid,
                Scroll          = ScrollSource.Unknown,
                ScrollDirection = ScrollChangeDirection.Unknown,
            };

            if (wParam == WindowsMessages.MOUSEWHEEL)
            {
                args.EventType = MouseEventType.Scroll;
                args.Scroll    = ScrollSource.VerticalScrollWheel;
                if (mouse.mouseData > 0)
                {
                    args.ScrollDirection = ScrollChangeDirection.Up;
                }
                else
                {
                    args.ScrollDirection = ScrollChangeDirection.Down;
                }
            }
            else if (wParam == WindowsMessages.MOUSEHWHEEL)
            {
                args.EventType = MouseEventType.Scroll;
                args.Scroll    = ScrollSource.HorizontalScrollWheel;
                if (mouse.mouseData > 0)
                {
                    args.ScrollDirection = ScrollChangeDirection.Up;
                }
                else
                {
                    args.ScrollDirection = ScrollChangeDirection.Down;
                }
            }
            else if (wParam == WindowsMessages.MOUSEMOVE)
            {
                args.EventType     = MouseEventType.Move;
                args.DeltaPosition = _previousePosition.Delta(mouse.pt);
                _previousePosition = mouse.pt;
                args.NewPosition   = new WindowsPoint(mouse.pt.X, mouse.pt.Y);
            }
            else if (wParam == WindowsMessages.LBUTTONDOWN)
            {
                args.EventType       = MouseEventType.Button;
                args.Button          = ButtonSource.LeftButton;
                args.ButtonDirection = ButtonChangeDirection.Down;
            }
            else if (wParam == WindowsMessages.LBUTTONUP)
            {
                args.EventType       = MouseEventType.Button;
                args.Button          = ButtonSource.LeftButton;
                args.ButtonDirection = ButtonChangeDirection.Up;
            }
            else if (wParam == WindowsMessages.RBUTTONDOWN)
            {
                args.EventType       = MouseEventType.Button;
                args.Button          = ButtonSource.RightButton;
                args.ButtonDirection = ButtonChangeDirection.Down;
            }
            else if (wParam == WindowsMessages.RBUTTONUP)
            {
                args.EventType       = MouseEventType.Button;
                args.Button          = ButtonSource.RightButton;
                args.ButtonDirection = ButtonChangeDirection.Up;
            }
            else if (wParam == WindowsMessages.MBUTTONDOWN)
            {
                args.EventType       = MouseEventType.Button;
                args.Button          = ButtonSource.MiddleButton;
                args.ButtonDirection = ButtonChangeDirection.Down;
            }
            else if (wParam == WindowsMessages.MBUTTONUP)
            {
                args.EventType       = MouseEventType.Button;
                args.Button          = ButtonSource.MiddleButton;
                args.ButtonDirection = ButtonChangeDirection.Up;
            }
            else if (wParam == WindowsMessages.XBUTTONDOWN)
            {
                args.EventType       = MouseEventType.Button;
                args.ButtonDirection = ButtonChangeDirection.Down;

                if ((mouse.flags & 0x01) > 0 && (mouse.mouseData & 0x10000) > 0)
                {
                    args.Button = ButtonSource.Mouse4;
                }
                else if ((mouse.flags & 0x01) > 0 && (mouse.mouseData & 0x20000) > 0)
                {
                    args.Button = ButtonSource.Mouse5;
                }
            }
            else if (wParam == WindowsMessages.XBUTTONUP)
            {
                args.EventType       = MouseEventType.Button;
                args.ButtonDirection = ButtonChangeDirection.Up;

                if ((mouse.flags & 0x01) > 0 && (mouse.mouseData & 0x10000) > 0)
                {
                    args.Button = ButtonSource.Mouse4;
                }
                else if ((mouse.flags & 0x01) > 0 && (mouse.mouseData & 0x20000) > 0)
                {
                    args.Button = ButtonSource.Mouse5;
                }
            }

            return(args);
        }
Exemplo n.º 12
0
 public ControlPointViewModelBase GetClosestPoint(WindowsPoint position, double maximumDistance)
 {
     return(CurveHelper.GetClosestPoint(ControlPoints, position, maximumDistance));
 }
Exemplo n.º 13
0
 public abstract void AddPoint(WindowsPoint point);