Exemple #1
0
    // This finds all triangles perpendicular to the input position
    public List <P3D_Result> FindPerpendicularAll(Vector3 point, float maxDistance)
    {
        ClearResults();

        if (IsReady == true && maxDistance > 0.0f)
        {
            var maxDistanceSqr = maxDistance * maxDistance;

            BeginSearchDistance(point, maxDistanceSqr);

            // Go through all potential triangles
            for (var i = potentials.Count - 1; i >= 0; i--)
            {
                var triangle    = potentials[i];
                var weights     = default(Vector3);
                var distanceSqr = default(float);

                // See if a perpendicular triangle point can be found
                if (P3D_Helper.ClosestBarycentric(point, triangle, ref weights, ref distanceSqr) == true)
                {
                    if (distanceSqr <= maxDistanceSqr)
                    {
                        AddToResults(triangle, weights, Mathf.Sqrt(distanceSqr) / maxDistance);
                    }
                }
            }
        }

        return(results);
    }
Exemple #2
0
 public List <P3D_Result> FindPerpendicularAll(Vector3 point, float maxDistance)
 {
     this.ClearResults();
     if (this.IsReady && (maxDistance > 0f))
     {
         float maxDistanceSqr = maxDistance * maxDistance;
         this.BeginSearchDistance(point, maxDistanceSqr);
         for (int i = potentials.Count - 1; i >= 0; i--)
         {
             P3D_Triangle triangle    = potentials[i];
             Vector3      weights     = new Vector3();
             float        distanceSqr = 0f;
             if (P3D_Helper.ClosestBarycentric(point, triangle, ref weights, ref distanceSqr) && (distanceSqr <= maxDistanceSqr))
             {
                 this.AddToResults(triangle, weights, Mathf.Sqrt(distanceSqr) / maxDistance);
             }
         }
     }
     return(results);
 }
Exemple #3
0
    // This finds the nearest triangle perpendicular to the input position
    public List <P3D_Result> FindPerpendicularNearest(Vector3 point, float maxDistance)
    {
        ClearResults();

        if (IsReady == true && maxDistance > 0.0f)
        {
            var bestDistanceSqr = maxDistance * maxDistance;
            var bestTriangle    = default(P3D_Triangle);
            var bestWeights     = default(Vector3);

            BeginSearchDistance(point, bestDistanceSqr);

            // Go through all potential triangles
            for (var i = potentials.Count - 1; i >= 0; i--)
            {
                var triangle    = potentials[i];
                var weights     = default(Vector3);
                var distanceSqr = default(float);

                // See if a perpendicular triangle point can be found
                if (P3D_Helper.ClosestBarycentric(point, triangle, ref weights, ref distanceSqr) == true)
                {
                    if (distanceSqr <= bestDistanceSqr)
                    {
                        bestDistanceSqr = distanceSqr;
                        bestTriangle    = triangle;
                        bestWeights     = weights;
                    }
                }
            }

            // Add the best triangle to the results
            if (bestTriangle != null)
            {
                AddToResults(bestTriangle, bestWeights, Mathf.Sqrt(bestDistanceSqr) / maxDistance);
            }
        }

        return(results);
    }
Exemple #4
0
    // This finds the nearest triangles to the input position within maxDistance
    public P3D_Result FindNearest(Vector3 point, float maxDistance)
    {
        ClearResults();

        if (IsReady == true && maxDistance > 0.0f)
        {
            var bestDistanceSqr = maxDistance * maxDistance;
            var bestTriangle    = default(P3D_Triangle);
            var bestWeights     = default(Vector3);

            BeginSearchDistance(point, bestDistanceSqr);

            // Go through all potential triangles
            for (var i = potentials.Count - 1; i >= 0; i--)
            {
                var triangle    = potentials[i];
                var weights     = default(Vector3);
                var distanceSqr = P3D_Helper.ClosestBarycentric(point, triangle, out weights);

                if (distanceSqr <= bestDistanceSqr)
                {
                    bestDistanceSqr = distanceSqr;
                    bestTriangle    = triangle;
                    bestWeights     = weights;
                }
            }

            // Add the best triangle to the results
            if (bestTriangle != null)
            {
                return(GetResult(bestTriangle, bestWeights, Mathf.Sqrt(bestDistanceSqr) / maxDistance));
            }
        }

        return(null);
    }
Exemple #5
0
 public P3D_Result FindPerpendicularNearest(Vector3 point, float maxDistance)
 {
     this.ClearResults();
     if (this.IsReady && (maxDistance > 0f))
     {
         float        maxDistanceSqr = maxDistance * maxDistance;
         P3D_Triangle triangle       = null;
         Vector3      vector2        = new Vector3();
         Vector3      weights        = vector2;
         this.BeginSearchDistance(point, maxDistanceSqr);
         int num2 = potentials.Count - 1;
         while (true)
         {
             if (num2 < 0)
             {
                 if (triangle == null)
                 {
                     break;
                 }
                 return(this.GetResult(triangle, weights, Mathf.Sqrt(maxDistanceSqr) / maxDistance));
             }
             P3D_Triangle triangle2 = potentials[num2];
             vector2 = new Vector3();
             Vector3 vector3     = vector2;
             float   distanceSqr = 0f;
             if (P3D_Helper.ClosestBarycentric(point, triangle2, ref vector3, ref distanceSqr) && (distanceSqr <= maxDistanceSqr))
             {
                 maxDistanceSqr = distanceSqr;
                 triangle       = triangle2;
                 weights        = vector3;
             }
             num2--;
         }
     }
     return(null);
 }