private void TryGetTranslateAnimationProperties() { if (!this.Element.IsViewObjectValid || !CanonicalTransform.IsCanonical((Transform)this.Element.GetComputedValueAsWpf(Base2DElement.RenderTransformProperty))) { return; } this.positionXAnimationProperty = this.AdornerSet.ViewModel.AnimationEditor.GetAnimationProperty((SceneNode)this.Element, this.Element.ViewModel.DefaultView.ConvertFromWpfPropertyReference(this.Element.Platform.Metadata.CommonProperties.RenderTransformTranslationX)); this.positionYAnimationProperty = this.AdornerSet.ViewModel.AnimationEditor.GetAnimationProperty((SceneNode)this.Element, this.Element.ViewModel.DefaultView.ConvertFromWpfPropertyReference(this.Element.Platform.Metadata.CommonProperties.RenderTransformTranslationY)); this.hasValidTranslateAnimationProperty = true; }
private CanonicalDecomposition CalculateSharedTransform(bool scaleByZoom, bool addParentToRoot) { bool flag = false; CanonicalDecomposition canonicalDecomposition1 = new CanonicalDecomposition(); this.hasHomogenousRotation = true; this.hasHomogenousSkew = true; foreach (SceneElement sceneElement in this.elements) { if (sceneElement is BaseFrameworkElement) { if (!sceneElement.IsAttached) { return(new CanonicalDecomposition()); } Transform identity = Transform.Identity; Transform transform = sceneElement.GetComputedValueAsWpf(sceneElement.Platform.Metadata.CommonProperties.RenderTransform) as Transform ?? Transform.Identity; CanonicalDecomposition canonicalDecomposition2 = new CanonicalDecomposition(); CanonicalDecomposition canonicalDecomposition3 = !CanonicalTransform.IsCanonical(transform) ? new CanonicalDecomposition(transform.Value) : new CanonicalTransform(transform).Decomposition; if (!double.IsNaN(canonicalDecomposition3.ScaleX) && !double.IsNaN(canonicalDecomposition3.ScaleY)) { if (!flag) { canonicalDecomposition1 = canonicalDecomposition3; canonicalDecomposition1.ScaleX = (double)Math.Sign(canonicalDecomposition1.ScaleX); canonicalDecomposition1.ScaleY = (double)Math.Sign(canonicalDecomposition1.ScaleY); flag = true; } else { if (Math.Sign(canonicalDecomposition3.ScaleX) != Math.Sign(canonicalDecomposition1.ScaleX)) { canonicalDecomposition1.ScaleX = 1.0; } if (Math.Sign(canonicalDecomposition3.ScaleY) != Math.Sign(canonicalDecomposition1.ScaleY)) { canonicalDecomposition1.ScaleY = 1.0; } if (!Tolerances.AreClose(canonicalDecomposition3.RotationAngle, canonicalDecomposition1.RotationAngle) || !Tolerances.AreClose(canonicalDecomposition3.SkewX, canonicalDecomposition1.SkewX) || !Tolerances.AreClose(canonicalDecomposition3.SkewY, canonicalDecomposition1.SkewY)) { canonicalDecomposition1.RotationAngle = 0.0; canonicalDecomposition1.SkewX = 0.0; canonicalDecomposition1.SkewY = 0.0; this.hasHomogenousSkew = false; this.hasHomogenousRotation = false; } } } } } double zoom = this.DesignerContext.ActiveView.Artboard.Zoom; if (scaleByZoom) { canonicalDecomposition1.ScaleX = zoom * canonicalDecomposition1.ScaleX; canonicalDecomposition1.ScaleY = zoom * canonicalDecomposition1.ScaleY; } canonicalDecomposition1.Translation = new Vector(0.0, 0.0); if (addParentToRoot && this.PrimaryElement.VisualElementAncestor != null) { Matrix computedTransformToRoot = this.ViewModel.DefaultView.GetComputedTransformToRoot(this.PrimaryElement.VisualElementAncestor.Visual); Transform transform = this.ViewModel.DefaultView.Artboard.CalculateTransformFromContentToArtboard(); computedTransformToRoot.Append(transform.Value); computedTransformToRoot.OffsetX = 0.0; computedTransformToRoot.OffsetY = 0.0; CanonicalDecomposition canonicalDecomposition2 = new CanonicalDecomposition(computedTransformToRoot); canonicalDecomposition1.Scale = new Vector(canonicalDecomposition1.ScaleX * (canonicalDecomposition2.ScaleX / zoom), canonicalDecomposition1.ScaleY * (canonicalDecomposition2.ScaleY / zoom)); canonicalDecomposition1.Skew += canonicalDecomposition2.Skew; canonicalDecomposition1.RotationAngle *= (double)(Math.Sign(canonicalDecomposition2.ScaleX) * Math.Sign(canonicalDecomposition2.ScaleY)); canonicalDecomposition1.RotationAngle += canonicalDecomposition2.RotationAngle; canonicalDecomposition1.Translation += canonicalDecomposition2.Translation; } return(canonicalDecomposition1); }