Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media3D / AxisAngleRotation3D.cs / 1 / AxisAngleRotation3D.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using MS.Internal; namespace System.Windows.Media.Media3D { ////// A rotation in 3-space defined by an axis and an angle to rotate about that axis. /// public partial class AxisAngleRotation3D { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors ////// Default constructor that creates a rotation with Axis (0,1,0) and Angle of 0. /// public AxisAngleRotation3D() {} ////// Constructor taking axis and angle. /// public AxisAngleRotation3D(Vector3D axis, double angle) { Axis = axis; Angle = angle; } #endregion Constructors //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ //----------------------------------------------------- // // Public Events // //------------------------------------------------------ //----------------------------------------------------- // // Internal Properties // //----------------------------------------------------- #region Internal Properties // Used by animation to get a snapshot of the current rotational // configuration for interpolation in Rotation3DAnimations. internal override Quaternion InternalQuaternion { get { if (_cachedQuaternionValue == c_dirtyQuaternion) { Vector3D axis = Axis; // Quaternion's axis/angle ctor throws if the axis has zero length. // // This threshold needs to match the one we used in D3DXVec3Normalize (d3dxmath9.cpp) // and in unmanaged code. See also AxisAngleRotation3D.cpp. if (axis.LengthSquared > DoubleUtil.FLT_MIN) { _cachedQuaternionValue = new Quaternion(axis, Angle); } else { // If we have a zero-length axis we return identity (i.e., // we consider this to be no rotation.) _cachedQuaternionValue = Quaternion.Identity; } } return _cachedQuaternionValue; } } #endregion Internal Properties internal void AxisPropertyChangedHook(DependencyPropertyChangedEventArgs e) { _cachedQuaternionValue = c_dirtyQuaternion; } internal void AnglePropertyChangedHook(DependencyPropertyChangedEventArgs e) { _cachedQuaternionValue = c_dirtyQuaternion; } //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ private Quaternion _cachedQuaternionValue = c_dirtyQuaternion; // Arbitrary quaternion that will signify that our cached quat is dirty // Reasonable quaternions are normalized so it's very unlikely that this // will ever occurr in a normal application. internal static readonly Quaternion c_dirtyQuaternion = new Quaternion( Math.E, Math.PI, Math.E * Math.PI, 55.0 ); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using MS.Internal; namespace System.Windows.Media.Media3D { ////// A rotation in 3-space defined by an axis and an angle to rotate about that axis. /// public partial class AxisAngleRotation3D { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors ////// Default constructor that creates a rotation with Axis (0,1,0) and Angle of 0. /// public AxisAngleRotation3D() {} ////// Constructor taking axis and angle. /// public AxisAngleRotation3D(Vector3D axis, double angle) { Axis = axis; Angle = angle; } #endregion Constructors //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ //----------------------------------------------------- // // Public Events // //------------------------------------------------------ //----------------------------------------------------- // // Internal Properties // //----------------------------------------------------- #region Internal Properties // Used by animation to get a snapshot of the current rotational // configuration for interpolation in Rotation3DAnimations. internal override Quaternion InternalQuaternion { get { if (_cachedQuaternionValue == c_dirtyQuaternion) { Vector3D axis = Axis; // Quaternion's axis/angle ctor throws if the axis has zero length. // // This threshold needs to match the one we used in D3DXVec3Normalize (d3dxmath9.cpp) // and in unmanaged code. See also AxisAngleRotation3D.cpp. if (axis.LengthSquared > DoubleUtil.FLT_MIN) { _cachedQuaternionValue = new Quaternion(axis, Angle); } else { // If we have a zero-length axis we return identity (i.e., // we consider this to be no rotation.) _cachedQuaternionValue = Quaternion.Identity; } } return _cachedQuaternionValue; } } #endregion Internal Properties internal void AxisPropertyChangedHook(DependencyPropertyChangedEventArgs e) { _cachedQuaternionValue = c_dirtyQuaternion; } internal void AnglePropertyChangedHook(DependencyPropertyChangedEventArgs e) { _cachedQuaternionValue = c_dirtyQuaternion; } //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ private Quaternion _cachedQuaternionValue = c_dirtyQuaternion; // Arbitrary quaternion that will signify that our cached quat is dirty // Reasonable quaternions are normalized so it's very unlikely that this // will ever occurr in a normal application. internal static readonly Quaternion c_dirtyQuaternion = new Quaternion( Math.E, Math.PI, Math.E * Math.PI, 55.0 ); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SplashScreenNativeMethods.cs
- AppSettingsExpressionBuilder.cs
- ConnectionPool.cs
- Guid.cs
- DPCustomTypeDescriptor.cs
- ImmutableObjectAttribute.cs
- BrushMappingModeValidation.cs
- TreeNodeConverter.cs
- Compress.cs
- JsonStringDataContract.cs
- XmlSchemas.cs
- CodeIterationStatement.cs
- WebPartConnectionsConfigureVerb.cs
- EmbeddedMailObjectsCollection.cs
- InboundActivityHelper.cs
- FieldToken.cs
- ExpressionTextBox.xaml.cs
- IntMinMaxAggregationOperator.cs
- TextServicesPropertyRanges.cs
- ByteRangeDownloader.cs
- DataTableExtensions.cs
- SolidColorBrush.cs
- AsymmetricKeyExchangeFormatter.cs
- HtmlLink.cs
- RegularExpressionValidator.cs
- StagingAreaInputItem.cs
- PropertyValueUIItem.cs
- ReaderWriterLock.cs
- Clipboard.cs
- Group.cs
- ByteStack.cs
- RuntimeArgumentHandle.cs
- Sql8ConformanceChecker.cs
- XPathMultyIterator.cs
- ProcessHostMapPath.cs
- TitleStyle.cs
- DefaultPropertyAttribute.cs
- AssociatedControlConverter.cs
- PageCodeDomTreeGenerator.cs
- XsdDuration.cs
- CatalogZoneAutoFormat.cs
- HttpCapabilitiesEvaluator.cs
- DataGridClipboardCellContent.cs
- InitializationEventAttribute.cs
- VarRefManager.cs
- Rect3DValueSerializer.cs
- RoleManagerModule.cs
- IsolatedStoragePermission.cs
- HealthMonitoringSection.cs
- HtmlElementCollection.cs
- OutOfProcStateClientManager.cs
- FlowDecisionLabelFeature.cs
- EllipseGeometry.cs
- ModelTreeEnumerator.cs
- TableLayoutRowStyleCollection.cs
- SelectionRangeConverter.cs
- ButtonField.cs
- XamlToRtfParser.cs
- RemotingException.cs
- DataGridViewDataErrorEventArgs.cs
- CodeAttributeArgumentCollection.cs
- WebBrowserDocumentCompletedEventHandler.cs
- RenderDataDrawingContext.cs
- WorkflowInstanceUnhandledExceptionRecord.cs
- Substitution.cs
- MetadataItemSerializer.cs
- ContextMenuAutomationPeer.cs
- WsatExtendedInformation.cs
- HttpProcessUtility.cs
- New.cs
- ScrollProviderWrapper.cs
- ScopedKnownTypes.cs
- RevocationPoint.cs
- SafeUserTokenHandle.cs
- SiteMapHierarchicalDataSourceView.cs
- EncodingDataItem.cs
- PassportAuthenticationEventArgs.cs
- CounterCreationData.cs
- Int16.cs
- OdbcEnvironmentHandle.cs
- ServiceEndpointElementCollection.cs
- SchemaSetCompiler.cs
- TextServicesLoader.cs
- HandledEventArgs.cs
- AttributeAction.cs
- ApplicationId.cs
- DragStartedEventArgs.cs
- XmlAttributeCache.cs
- SafeNativeMethodsOther.cs
- ActionNotSupportedException.cs
- HebrewNumber.cs
- SynthesizerStateChangedEventArgs.cs
- TableLayoutSettings.cs
- SecurityCapabilities.cs
- CombinedGeometry.cs
- XPathAncestorIterator.cs
- FontSourceCollection.cs
- hresults.cs
- DataTableMappingCollection.cs
- ResourcePool.cs