Esempio n. 1
0
 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;
 }
Esempio n. 2
0
        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);
        }