Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / System / Windows / Media3D / RayHitTestParameters.cs / 3 / RayHitTestParameters.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// History:
// 03/16/2004 : [....] - Created
//
//---------------------------------------------------------------------------
using System;
using System.IO;
using System.Diagnostics;
using System.Collections.Generic;
using MS.Internal.Media3D;
using CultureInfo = System.Globalization.CultureInfo;
namespace System.Windows.Media.Media3D
{
///
/// Encapsulates a set parameters for performing a 3D hit test agaist
/// a ray.
///
public sealed class RayHitTestParameters : HitTestParameters3D
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Creates a RayHitTestParameters where the ray is described
/// by an origin and a direction.
///
public RayHitTestParameters(Point3D origin, Vector3D direction)
{
_origin = origin;
_direction = direction;
_isRay = true;
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
//------------------------------------------------------
//
// Public Properties
//
//------------------------------------------------------
#region Public Properties
///
/// The origin of the ray to be used for hit testing.
///
public Point3D Origin
{
get { return _origin; }
}
///
/// The direction of the ray to be used for hit testing.
///
public Vector3D Direction
{
get { return _direction; }
}
#endregion Public Properties
//-----------------------------------------------------
//
// Public Events
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
internal void ReportResult(
MeshGeometry3D meshHit,
Point3D pointHit,
double distanceToRayOrigin,
int vertexIndex1,
int vertexIndex2,
int vertexIndex3,
Point barycentric)
{
results.Add(new RayMeshGeometry3DHitTestResult(
CurrentVisual,
CurrentModel,
meshHit,
pointHit,
distanceToRayOrigin,
vertexIndex1,
vertexIndex2,
vertexIndex3,
barycentric));
}
internal HitTestResultBehavior RaiseCallback(HitTestResultCallback resultCallback,
HitTestFilterCallback filterCallback,
HitTestResultBehavior lastResult)
{
return RaiseCallback(resultCallback, filterCallback, lastResult, 0.0 /* distance adjustment */);
}
internal HitTestResultBehavior RaiseCallback(HitTestResultCallback resultCallback,
HitTestFilterCallback filterCallback,
HitTestResultBehavior lastResult,
double distanceAdjustment)
{
results.Sort(RayHitTestResult.CompareByDistanceToRayOrigin);
for(int i = 0, count = results.Count; i < count; i++)
{
RayHitTestResult result = results[i];
result.SetDistanceToRayOrigin(result.DistanceToRayOrigin + distanceAdjustment);
Viewport2DVisual3D viewport2DVisual3D = result.VisualHit as Viewport2DVisual3D;
if (viewport2DVisual3D != null)
{
Point intersectionPoint;
Visual viewport2DVisual3DChild = viewport2DVisual3D.Visual;
if (viewport2DVisual3DChild != null)
{
if (Viewport2DVisual3D.GetIntersectionInfo(result, out intersectionPoint))
{
// convert the resulting point to visual coordinates
Point visualPoint = Viewport2DVisual3D.TextureCoordsToVisualCoords(intersectionPoint, viewport2DVisual3DChild);
GeneralTransform gt = viewport2DVisual3DChild.TransformToOuterSpace().Inverse;
Point pointOnChild;
if (gt != null && gt.TryTransform(visualPoint, out pointOnChild))
{
HitTestResultBehavior behavior2D = viewport2DVisual3DChild.HitTestPoint(filterCallback,
resultCallback,
new PointHitTestParameters(pointOnChild));
if (behavior2D == HitTestResultBehavior.Stop)
{
return HitTestResultBehavior.Stop;
}
}
}
}
}
HitTestResultBehavior behavior = resultCallback(results[i]);
if (behavior == HitTestResultBehavior.Stop)
{
return HitTestResultBehavior.Stop;
}
}
return lastResult;
}
// Gets the hit testing line/ray specified as an origin and direction in
// the current local space.
internal void GetLocalLine(out Point3D origin, out Vector3D direction)
{
origin = _origin;
direction = _direction;
bool isRay = true;
if (HasWorldTransformMatrix)
{
LineUtil.Transform(WorldTransformMatrix, ref origin, ref direction, out isRay);
}
// At any point along the tree walk we may encounter a transform that turns the ray into
// a line and if so we must stay a line
_isRay &= isRay;
}
internal void ClearResults()
{
if (results != null)
{
results.Clear();
}
}
#endregion Internal Methods
internal bool IsRay
{
get
{
return _isRay;
}
}
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private readonly Point3D _origin;
private readonly Vector3D _direction;
private readonly List results = new List();
// 'true' if this is a ray hit test, 'false' if the ray has become a line
private bool _isRay;
#endregion Private Fields
}
}
// 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
- SimpleWebHandlerParser.cs
- DataContractSet.cs
- ValidatedControlConverter.cs
- TimeStampChecker.cs
- ContentControl.cs
- TextDpi.cs
- LookupNode.cs
- Button.cs
- TypedLocationWrapper.cs
- DecoderReplacementFallback.cs
- XmlSchemaSubstitutionGroup.cs
- XamlTemplateSerializer.cs
- DataGridViewSortCompareEventArgs.cs
- HtmlInputButton.cs
- HttpCapabilitiesSectionHandler.cs
- C14NUtil.cs
- UnitySerializationHolder.cs
- DBSchemaTable.cs
- FlowDocument.cs
- storepermission.cs
- DataServiceQueryException.cs
- FileStream.cs
- XmlDocumentType.cs
- DataTemplateKey.cs
- UIElementParagraph.cs
- ColorTransformHelper.cs
- EdgeModeValidation.cs
- XmlKeywords.cs
- BoundsDrawingContextWalker.cs
- ProfilePropertySettingsCollection.cs
- FormsAuthentication.cs
- XPathNavigator.cs
- RoutedUICommand.cs
- StorageScalarPropertyMapping.cs
- DataControlFieldCollection.cs
- arclist.cs
- HtmlElementCollection.cs
- TabControlDesigner.cs
- DateTimeOffsetConverter.cs
- DataFormat.cs
- SchemaObjectWriter.cs
- TableColumnCollectionInternal.cs
- ComNativeDescriptor.cs
- WebPartConnection.cs
- DesigntimeLicenseContextSerializer.cs
- PrimarySelectionGlyph.cs
- XmlWriter.cs
- ObjectDataSourceEventArgs.cs
- RSATokenProvider.cs
- TextEditorCharacters.cs
- NetworkAddressChange.cs
- ResourcePool.cs
- BaseTypeViewSchema.cs
- XmlValidatingReaderImpl.cs
- IdentityValidationException.cs
- CollectionViewGroupInternal.cs
- DataGridSortingEventArgs.cs
- RequestBringIntoViewEventArgs.cs
- StatusBar.cs
- BamlCollectionHolder.cs
- RegexTree.cs
- DllNotFoundException.cs
- ObfuscationAttribute.cs
- X509Certificate.cs
- ToolboxControl.cs
- Size.cs
- WebPartConnection.cs
- MethodExpr.cs
- ImportCatalogPart.cs
- ListComponentEditor.cs
- Font.cs
- DetailsViewUpdatedEventArgs.cs
- CustomAttribute.cs
- PermissionSetTriple.cs
- ProfileManager.cs
- TraceHwndHost.cs
- SchemaImporter.cs
- PeerDuplexChannel.cs
- SelectionUIHandler.cs
- DataKey.cs
- NumberAction.cs
- DataMisalignedException.cs
- GroupByQueryOperator.cs
- ToolStripItemTextRenderEventArgs.cs
- sortedlist.cs
- AnimationClockResource.cs
- ClientConfigurationSystem.cs
- AssemblyHelper.cs
- CryptoApi.cs
- TagPrefixAttribute.cs
- WindowsToolbarItemAsMenuItem.cs
- serverconfig.cs
- PrintPreviewControl.cs
- SizeLimitedCache.cs
- DataDesignUtil.cs
- FtpWebResponse.cs
- ping.cs
- ToolTip.cs
- ToolStripRenderEventArgs.cs
- PrintDialogException.cs