public RayCast(Double3 startPos, Double3 endPos, HitCollectionPolicy hitCollection = HitCollectionPolicy.ClosestHits, int maxHits = MaxNumRayCastHits, uint collisionMask = 0xFFFFFFFF) { this.StartPos = startPos; this.EndPos = endPos; this.HitCollection = hitCollection; this.MaxHits = maxHits; this.CollisionMask = collisionMask; }
public RayCast(Double3 startPos, Double3 dir, double maxDistance, HitCollectionPolicy hitCollection = HitCollectionPolicy.ClosestHits, int maxHits = MaxNumRayCastHits, uint collisionMask = 0xFFFFFFFF) { this.StartPos = startPos; this.EndPos = new Double3(startPos.X + dir.X * maxDistance, startPos.Y + dir.Y * maxDistance, startPos.Z + dir.Z * maxDistance); this.HitCollection = hitCollection; this.MaxHits = maxHits; this.CollisionMask = collisionMask; }
public static async Task <Entity[]> RemoteRayCastEntities(Vector3 origin, Vector3 dir, HitCollectionPolicy hitPolicy = HitCollectionPolicy.ClosestHit) { var hits = await RemoteRayCast(origin, dir, hitPolicy); return(hits.Select(hit => hit.HitEntity).Where(entity => entity != null).ToArray()); }
public static async Task <RayCastHit[]> RemoteRayCast(Vector3 origin, Vector3 dir, HitCollectionPolicy hitPolicy = HitCollectionPolicy.ClosestHit) { if (RemoteRenderingCoordinator.instance.CurrentCoordinatorState == RemoteRenderingCoordinator.RemoteRenderingState.RuntimeConnected) { var rayCast = new RayCast(origin.toRemotePos(), dir.toRemoteDir(), maxDistance, hitPolicy); var result = await RemoteRenderingCoordinator.CurrentSession.Connection.RayCastQueryAsync(rayCast); return(result.Hits); } else { return(new RayCastHit[0]); } }
private async Task <(bool success, RayCastHit hit)> PointerDataToRemoteRayCast(IMixedRealityPointer pointer, HitCollectionPolicy hitPolicy = HitCollectionPolicy.ClosestHit) { RayCastHit hit; var result = pointer.Result; if (result != null) { var endPoint = result.Details.Point; var direction = pointer.Rays[pointer.Result.RayStepIndex].Direction; Debug.DrawRay(endPoint, direction, Color.green, 0); hit = (await RemoteRayCaster.RemoteRayCast(endPoint, direction, hitPolicy)).FirstOrDefault(); } else { hit = new RayCastHit(); } return(hit.HitEntity != null, hit); }
/// <summary> /// Converts a <see cref="Ray"/> into a remote <see cref="RayCast"/>. /// </summary> /// <param name="input">The ray to be converted.</param> /// <param name="distance">The distance used to calculate the end position on the converted ray cast.</param> /// <param name="hitCollection">The hit collection mode to set on the converted ray cast.</param> /// <param name="maxHits">The maximum collected hits to set on the converted ray cast.</param> /// <param name="collisionMask">The collision mask to set on the converted ray cast.</param> /// <returns>The converted ray cast.</returns> public static RayCast ToRemote(this Ray input, float distance, HitCollectionPolicy hitCollection = HitCollectionPolicy.ClosestHits, int maxHits = 1024, uint collisionMask = 0xFFFFFFFF) { input.ToRemote(out var output, distance, hitCollection, maxHits, collisionMask); return(output); }
/// <summary> /// Converts a <see cref="Ray"/> into a remote <see cref="RayCast"/>. /// </summary> /// <param name="input">The ray to be converted.</param> /// <param name="output">The converted ray cast.</param> /// <param name="distance">The distance used to calculate the end position on the converted ray cast.</param> /// <param name="hitCollection">The hit collection mode to set on the converted ray cast.</param> /// <param name="maxHits">The maximum collected hits to set on the converted ray cast.</param> /// <param name="collisionMask">The collision mask to set on the converted ray cast.</param> public static void ToRemote(this Ray input, out RayCast output, float distance, HitCollectionPolicy hitCollection = HitCollectionPolicy.ClosestHits, int maxHits = 1024, uint collisionMask = 0xFFFFFFFF) { input.Position.ToRemote(out Double3 starPos); input.GetPoint(distance, out var terminus); terminus.ToRemote(out Double3 endPos); output = new RayCast(starPos, endPos, distance, hitCollection, maxHits, collisionMask); }
/// <summary> /// Converts a <see cref="RayStep"/> into a remote <see cref="RayCast"/>. /// </summary> /// <param name="input">The ray step to be converted.</param> /// <param name="output">The converted ray cast.</param> /// <param name="maxDistance">The ray max distance.</param> /// <param name="hitCollection">The hit collection mode to set on the converted ray cast.</param> /// <param name="maxHits">The maximum collected hits to set on the converted ray cast.</param> /// <param name="collisionMask">The collision mask to set on the converted ray cast.</param> public static void ToRemote(this RayStep input, out RayCast output, double maxDistance, HitCollectionPolicy hitCollection = HitCollectionPolicy.ClosestHits, int maxHits = 1024, uint collisionMask = 0xFFFFFFFF) { input.Origin.ToRemote(out Double3 starPos); input.Terminus.ToRemote(out Double3 endPos); output = new RayCast(starPos, endPos, maxDistance, hitCollection, maxHits, collisionMask); }