|
6 | 6 | using System.Collections.Generic;
|
7 | 7 | using System.Linq;
|
8 | 8 | using System.Numerics;
|
9 |
| -using Microsoft.Toolkit.Uwp.UI.Animations.Expressions; |
10 | 9 | using Windows.UI;
|
11 | 10 | using Windows.UI.Composition;
|
12 | 11 | using Windows.UI.Xaml;
|
@@ -631,41 +630,48 @@ private Line CreateAnchor(UIElement element, double x, double y)
|
631 | 630 | var anchorVisual = ElementCompositionPreview.GetElementVisual(anchor);
|
632 | 631 | var elementVisual = ElementCompositionPreview.GetElementVisual(element);
|
633 | 632 | var centerVisual = ElementCompositionPreview.GetElementVisual(_centerContent);
|
634 |
| - var elementNode = elementVisual.GetReference(); |
635 |
| - var centerNode = centerVisual.GetReference(); |
636 | 633 |
|
637 |
| - ScalarNode expression; |
638 |
| - var elementY = elementNode.Offset.Y + (elementNode.Size.Y / 2); |
639 |
| - var centerY = centerNode.Offset.Y + (centerNode.Size.Y / 2); |
640 |
| - var elementX = elementNode.Offset.X + (elementNode.Size.X / 2); |
641 |
| - var centerX = centerNode.Offset.X + (centerNode.Size.X / 2); |
| 634 | + string expression = string.Empty; |
| 635 | + var elementY = "(elementVisual.Offset.Y + elementVisual.Size.Y / 2)"; |
| 636 | + var centerY = "(centerVisual.Offset.Y + centerVisual.Size.Y / 2)"; |
| 637 | + var elementX = "(elementVisual.Offset.X + elementVisual.Size.X / 2)"; |
| 638 | + var centerX = "(centerVisual.Offset.X + centerVisual.Size.X / 2)"; |
642 | 639 |
|
643 | 640 | var startingAngle = Math.Atan2(y, x);
|
644 | 641 |
|
645 | 642 | if (startingAngle > Math.PI / 4 && startingAngle < 3 * Math.PI / 4)
|
646 | 643 | {
|
647 |
| - expression = ExpressionFunctions.ATan((-1 * (elementX - centerX)) / (elementY - centerY)) - ((float)Math.PI / 2.0f); |
| 644 | + expression = $"Atan((-1 * ({elementX} - {centerX})) / ( {elementY} - {centerY})) - PI / 2"; |
648 | 645 | }
|
649 | 646 | else if (startingAngle >= 3 * Math.PI / 4 || startingAngle < -3 * Math.PI / 4)
|
650 | 647 | {
|
651 |
| - expression = ExpressionFunctions.ATan((elementY - centerY) / (elementX - centerX)) + (float)Math.PI; |
| 648 | + expression = $"Atan(({elementY} - {centerY}) / ({elementX} - {centerX})) + PI"; |
652 | 649 | }
|
653 | 650 | else if (startingAngle >= -3 * Math.PI / 4 && startingAngle < Math.PI / -4)
|
654 | 651 | {
|
655 |
| - expression = ExpressionFunctions.ATan((elementX - centerX) / (-1 * (elementY - centerY))) + ((float)Math.PI / 2.0f); |
| 652 | + expression = $"Atan(({elementX} - {centerX}) / (-1 * ({elementY} - {centerY}))) + PI / 2"; |
656 | 653 | }
|
657 | 654 | else
|
658 | 655 | {
|
659 |
| - expression = ExpressionFunctions.ATan((elementY - centerY) / (elementX - centerX)); |
| 656 | + expression = $"Atan(({elementY} - {centerY}) / ({elementX} - {centerX}))"; |
660 | 657 | }
|
661 | 658 |
|
662 | 659 | anchorVisual.CenterPoint = new Vector3(0);
|
663 |
| - anchorVisual.StartAnimation(nameof(anchorVisual.RotationAngle), expression); |
664 |
| - |
665 |
| - var offsetExpression = ExpressionFunctions.Vector3(centerNode.Offset.X + (centerNode.Size.X / 2), centerNode.Offset.Y + (centerNode.Size.Y / 2), 0); |
| 660 | + var rotationExpression = _compositor.CreateExpressionAnimation(); |
| 661 | + rotationExpression.Expression = expression; |
| 662 | + rotationExpression.SetReferenceParameter("centerVisual", centerVisual); |
| 663 | + rotationExpression.SetReferenceParameter("elementVisual", elementVisual); |
| 664 | + anchorVisual.StartAnimation(nameof(anchorVisual.RotationAngle), rotationExpression); |
| 665 | + |
| 666 | + var offsetExpression = _compositor.CreateExpressionAnimation(); |
| 667 | + offsetExpression.Expression = "Vector3(centerVisual.Offset.X + centerVisual.Size.X / 2, centerVisual.Offset.Y + centerVisual.Size.Y / 2, 0)"; |
| 668 | + offsetExpression.SetReferenceParameter("centerVisual", centerVisual); |
666 | 669 | anchorVisual.StartAnimation(nameof(anchorVisual.Offset), offsetExpression);
|
667 | 670 |
|
668 |
| - var scaleExpression = ExpressionFunctions.Vector3(ExpressionFunctions.Pow(ExpressionFunctions.Pow(elementX - centerX, 2) + ExpressionFunctions.Pow(elementY - centerY, 2), 0.5f) / 80, 1, 1); |
| 671 | + var scaleExpression = _compositor.CreateExpressionAnimation(); |
| 672 | + scaleExpression.Expression = $"Vector3(Pow(Pow({elementX} - {centerX}, 2) + Pow({elementY} - {centerY}, 2), 0.5)/80, 1, 1)"; |
| 673 | + scaleExpression.SetReferenceParameter("centerVisual", centerVisual); |
| 674 | + scaleExpression.SetReferenceParameter("elementVisual", elementVisual); |
669 | 675 | anchorVisual.StartAnimation(nameof(anchorVisual.Scale), scaleExpression);
|
670 | 676 |
|
671 | 677 | return anchor;
|
|
0 commit comments