GeneralTransformGroup.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 / GeneralTransformGroup.cs / 1305600 / GeneralTransformGroup.cs

                            //------------------------------------------------------------------------------ 
//  Microsoft Avalon
//  Copyright (c) Microsoft Corporation, 2001
//
//  File:       GeneralTransformGroup.cs 
//-----------------------------------------------------------------------------
 
using System; 
using System.Windows;
using System.Windows.Media; 
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using System.Collections; 
using System.Collections.Generic;
using MS.Internal; 
using System.Windows.Media.Animation; 
using System.Globalization;
using System.Text; 
using System.Runtime.InteropServices;
using System.Windows.Markup;
using System.Windows.Media.Composition;
using System.Diagnostics; 
using MS.Internal.PresentationCore;
 
using SR = MS.Internal.PresentationCore.SR; 
using SRID = MS.Internal.PresentationCore.SRID;
 
namespace System.Windows.Media
{
    /// 
    /// GeneralTrasnform group 
    /// 
    [ContentProperty("Children")] 
    [Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)] 
    public sealed partial class GeneralTransformGroup : GeneralTransform
    { 
        #region Constructors

        ///
        /// Default Constructor 
        ///
        public GeneralTransformGroup() { } 
 
        #endregion
 
        /// 
        /// Transform a point
        /// 
        /// input point 
        /// output point
        /// True if the point is transformed successfully 
        public override bool TryTransform(Point inPoint, out Point result) 
        {
            result = inPoint; 
            if ((Children == null) || (Children.Count == 0))
            {
                return false;
            } 

            Point inP = inPoint; 
            bool fPointTransformed = true; 
            // transform the point through each of the transforms
            for (int i = 0; i < Children.Count; i++) 
            {
                if (Children.Internal_GetItem(i).TryTransform(inPoint, out result) == false)
                {
                    fPointTransformed = false; 
                }
 
                inPoint = result; 
            }
 
            return fPointTransformed;
        }

        ///  
        /// Transforms the bounding box to the smallest axis aligned bounding box
        /// that contains all the points in the original bounding box 
        ///  
        /// Input bounding rect
        /// Transformed bounding rect 
        public override Rect TransformBounds(Rect rect)
        {
            if ((Children == null) || (Children.Count == 0))
            { 
                return rect;
            } 
 
            Rect result = rect;
            for (int i = 0; i < Children.Count; i++) 
            {
                result = Children.Internal_GetItem(i).TransformBounds(result);
            }
 
            return result;
        } 
 
        /// 
        /// Returns the inverse transform if it has an inverse, null otherwise 
        /// 
        public override GeneralTransform Inverse
        {
            get 
            {
                ReadPreamble(); 
 
                if ((Children == null) || (Children.Count == 0))
                { 
                    return null;
                }

                GeneralTransformGroup group = new GeneralTransformGroup(); 
                for (int i = Children.Count - 1; i >= 0; i--)
                { 
                    GeneralTransform g = Children.Internal_GetItem(i).Inverse; 

                    // if any of the transforms does not have an inverse, 
                    // then the entire group does not have one
                    if (g == null)
                        return null;
 
                    group.Children.Add(g);
                } 
 
                return group;
            } 
        }

        /// 
        /// Returns a best effort affine transform 
        /// 
        internal override Transform AffineTransform 
        { 
            [FriendAccessAllowed] // Built into Core, also used by Framework.
            get 
            {
                if ((Children == null) || (Children.Count == 0))
                {
                    return null; 
                }
 
                Matrix matrix = Matrix.Identity; 
                foreach (GeneralTransform gt in Children)
                { 
                    Transform t = gt.AffineTransform;
                    if (t != null)
                    {
                        matrix *= t.Value; 
                    }
                } 
 
                return new MatrixTransform(matrix);
            } 
        }

    }
} 

// 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