Transform.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Transform.cs / 1305600 / Transform.cs

                            /****************************************************************************\ 
*
* File: Transform.cs
*
* Description: 
* Transform.cs defines the "Transform" object, translate, rotate and scale.
* 
* Copyright (C) 2002 by Microsoft Corporation.  All rights reserved. 
*
\***************************************************************************/ 

using MS.Internal;
using System;
using System.Collections; 
using System.ComponentModel;
using System.ComponentModel.Design.Serialization; 
using System.Diagnostics; 
using System.Globalization;
using System.Reflection; 
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Windows; 
using System.Windows.Media.Animation;
using System.Windows.Media.Composition; 
using System.Windows.Markup; 
using MS.Internal.PresentationCore;
 
namespace System.Windows.Media
{
    #region Transform
    /// 
    /// Transform provides a base for all types of transformations, including matrix and list type.
    /// 
    [Localizability(LocalizationCategory.None, Readability=Readability.Unreadable)] 
    public abstract partial class Transform : GeneralTransform
    { 
        internal Transform()
        {
        }
 
        ///
        /// Identity transformation. 
        /// 
        public static Transform Identity
        { 
            get
            {
                return s_identity;
            } 
        }
 
        private static Transform MakeIdentityTransform() 
        {
            Transform identity = new MatrixTransform(Matrix.Identity); 
            identity.Freeze();
            return identity;
        }
 
        private static Transform s_identity = MakeIdentityTransform();
 
        /// 
        /// Return the current transformation value.
        /// 
        public abstract Matrix Value { get; }

        ///
        /// Returns true if transformation if the transformation is definitely an identity.  There are cases where it will 
        /// return false because of computational error or presence of animations (And we're interpolating through a
        /// transient identity) -- this is intentional.  This property is used internally only.  If you need to check the 
        /// current matrix value for identity, use Transform.Value.Identity. 
        ///
        internal abstract bool IsIdentity {get;} 

        internal virtual bool CanSerializeToString() { return false; }

        #region Perf Helpers 

        internal virtual void TransformRect(ref Rect rect) 
        { 
            Matrix matrix = Value;
            MatrixUtil.TransformRect(ref rect, ref matrix); 
        }

        /// 
        /// MultiplyValueByMatrix - result is set equal to "this" * matrixToMultiplyBy. 
        /// 
        ///  The result is stored here.  
        ///  The multiplicand.  
        internal virtual void MultiplyValueByMatrix(ref Matrix result, ref Matrix matrixToMultiplyBy)
        { 
            result = Value;
            MatrixUtil.MultiplyMatrix(ref result, ref matrixToMultiplyBy);
        }
 
        /// 
        /// Critical -- references and writes out to memory addresses. The 
        ///             caller is safe if the pointer points to a D3DMATRIX 
        ///             value.
        ///  
        [SecurityCritical]
        internal unsafe virtual void ConvertToD3DMATRIX(/* out */ D3DMATRIX* milMatrix)
        {
            Matrix matrix = Value; 
            MILUtilities.ConvertToD3DMATRIX(&matrix, milMatrix);
        } 
 
        #endregion
 
        /// 
        /// Consolidates the common logic of obtain the value of a
        /// Transform, after checking the transform for null.
        ///  
        ///  Transform to obtain value of. 
        ///  
        ///     Current value of 'transform'.  Matrix.Identity if 
        ///     the 'transform' parameter is null.
        ///  
        internal static void GetTransformValue(
            Transform transform,
            out Matrix currentTransformValue
            ) 
        {
            if (transform != null) 
            { 
                currentTransformValue = transform.Value;
            } 
            else
            {
                currentTransformValue = Matrix.Identity;
            } 
        }
 
        ///  
        /// Transforms a point
        ///  
        /// Input point
        /// Output point
        /// True if the point was successfully transformed
        public override bool TryTransform(Point inPoint, out Point result) 
        {
            Matrix m = Value; 
            result = m.Transform(inPoint); 
            return true;
        } 

        /// 
        /// Transforms the bounding box to the smallest axis aligned bounding box
        /// that contains all the points in the original bounding box 
        /// 
        /// Bounding box 
        /// The transformed bounding box 
        public override Rect TransformBounds(Rect rect)
        { 
            TransformRect(ref rect);
            return rect;
        }
 

        ///  
        /// Returns the inverse transform if it has an inverse, null otherwise 
        /// 
        public override GeneralTransform Inverse 
        {
            get
            {
                ReadPreamble(); 

                Matrix matrix = Value; 
 
                if (!matrix.HasInverse)
                { 
                    return null;
                }

                matrix.Invert(); 
                return new MatrixTransform(matrix);
            } 
        } 

        ///  
        /// Returns a best effort affine transform
        /// 
        internal override Transform AffineTransform
        { 
            [FriendAccessAllowed] // Built into Core, also used by Framework.
            get 
            { 
                return this;
            } 
        }
    }
    #endregion
} 

 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK