Example #1
0
 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;
 }
Example #2
0
 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]);
        }
    }
Example #5
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);
    }
Example #6
0
 /// <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);
 }
Example #7
0
 /// <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);
 }
Example #8
0
 /// <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);
 }