Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media3D / RayHitTestParameters.cs / 1305600 / 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
- ControlTemplate.cs
- Italic.cs
- MarginCollapsingState.cs
- QilInvokeLateBound.cs
- RtfToXamlReader.cs
- AlternateViewCollection.cs
- ThreadAbortException.cs
- ValidatingCollection.cs
- CodeRegionDirective.cs
- WebControlAdapter.cs
- X509Utils.cs
- ExtentCqlBlock.cs
- PtsCache.cs
- OuterGlowBitmapEffect.cs
- ChannelManager.cs
- SplitContainerDesigner.cs
- CryptoProvider.cs
- MouseEvent.cs
- DBSchemaTable.cs
- CodeAttributeArgumentCollection.cs
- HttpApplicationStateBase.cs
- PersonalizableAttribute.cs
- DecoderReplacementFallback.cs
- SecurityPolicySection.cs
- SqlOuterApplyReducer.cs
- XmlSchemaObjectCollection.cs
- BmpBitmapEncoder.cs
- RepeaterCommandEventArgs.cs
- ReverseInheritProperty.cs
- RemotingConfigParser.cs
- CalendarDateRangeChangingEventArgs.cs
- SiblingIterators.cs
- MessageQueueTransaction.cs
- SqlTypeSystemProvider.cs
- BindingsSection.cs
- EdmError.cs
- ErrorFormatter.cs
- DPTypeDescriptorContext.cs
- Stroke.cs
- RegexCaptureCollection.cs
- TreeNodeStyleCollection.cs
- SymmetricKeyWrap.cs
- KeyNotFoundException.cs
- latinshape.cs
- InternalTypeHelper.cs
- GridErrorDlg.cs
- WebPartsPersonalization.cs
- PagedDataSource.cs
- EncryptedType.cs
- WebPartUserCapability.cs
- IgnoreSection.cs
- XsdBuilder.cs
- RepeaterItemCollection.cs
- SqlException.cs
- XPathBinder.cs
- PropagationProtocolsTracing.cs
- DataGridViewCell.cs
- CodePrimitiveExpression.cs
- EncoderFallback.cs
- PolicyManager.cs
- TaskCanceledException.cs
- ComponentChangedEvent.cs
- InvokePattern.cs
- AppendHelper.cs
- FileSystemWatcher.cs
- AvtEvent.cs
- AdRotator.cs
- Window.cs
- TableStyle.cs
- Matrix3DStack.cs
- DescendantBaseQuery.cs
- ClientSession.cs
- CodeMemberMethod.cs
- _Events.cs
- SafeBitVector32.cs
- METAHEADER.cs
- XmlIgnoreAttribute.cs
- Timer.cs
- ProgressBarRenderer.cs
- xmlfixedPageInfo.cs
- StringResourceManager.cs
- WindowsScrollBar.cs
- CharacterMetrics.cs
- ClientRolePrincipal.cs
- Query.cs
- UniqueIdentifierService.cs
- InputBindingCollection.cs
- SqlInternalConnectionTds.cs
- HtmlControlAdapter.cs
- BaseTemplateBuildProvider.cs
- TypeBinaryExpression.cs
- ComplusEndpointConfigContainer.cs
- XpsS0ValidatingLoader.cs
- FacetChecker.cs
- FontStyle.cs
- ListItemCollection.cs
- OneWayChannelFactory.cs
- Util.cs
- SortedList.cs
- Ray3DHitTestResult.cs