UnityEditor.HandleUtility.DistancePointToLineSegment C# (CSharp) Method

DistancePointToLineSegment() public static method

Distance from a point p in 2d to a line segment defined by two points a and b.

public static DistancePointToLineSegment ( Vector2 p, Vector2 a, Vector2 b ) : float
p Vector2
a Vector2
b Vector2
return float
        public static float DistancePointToLineSegment(Vector2 p, Vector2 a, Vector2 b)
        {
            Vector2 vector = b - a;
            float sqrMagnitude = vector.sqrMagnitude;
            if (sqrMagnitude == 0.0)
            {
                Vector2 vector2 = p - a;
                return vector2.magnitude;
            }
            float num3 = Vector2.Dot(p - a, b - a) / sqrMagnitude;
            if (num3 < 0.0)
            {
                Vector2 vector3 = p - a;
                return vector3.magnitude;
            }
            if (num3 > 1.0)
            {
                Vector2 vector4 = p - b;
                return vector4.magnitude;
            }
            Vector2 vector5 = a + ((Vector2) (num3 * (b - a)));
            Vector2 vector6 = p - vector5;
            return vector6.magnitude;
        }

Usage Example

示例#1
0
        internal static float DistanceToDiamondInternal(Vector3 position, Quaternion rotation, float size, Vector2 mousePosition)
        {
            Vector3 b  = rotation * new Vector3(size, 0f, 0f);
            Vector3 b2 = rotation * new Vector3(0f, size, 0f);

            HandleUtility.points[0] = HandleUtility.WorldToGUIPoint(position + b);
            HandleUtility.points[1] = HandleUtility.WorldToGUIPoint(position - b2);
            HandleUtility.points[2] = HandleUtility.WorldToGUIPoint(position - b);
            HandleUtility.points[3] = HandleUtility.WorldToGUIPoint(position + b2);
            HandleUtility.points[4] = HandleUtility.points[0];
            Vector2 p    = mousePosition;
            bool    flag = false;
            int     num  = 4;

            for (int i = 0; i < 5; i++)
            {
                if (HandleUtility.points[i].y > p.y != HandleUtility.points[num].y > p.y)
                {
                    if (p.x < (HandleUtility.points[num].x - HandleUtility.points[i].x) * (p.y - HandleUtility.points[i].y) / (HandleUtility.points[num].y - HandleUtility.points[i].y) + HandleUtility.points[i].x)
                    {
                        flag = !flag;
                    }
                }
                num = i;
            }
            float result;

            if (!flag)
            {
                float num2 = -1f;
                num = 1;
                for (int j = 0; j < 4; j++)
                {
                    float num3 = HandleUtility.DistancePointToLineSegment(p, HandleUtility.points[j], HandleUtility.points[num++]);
                    if (num3 < num2 || num2 < 0f)
                    {
                        num2 = num3;
                    }
                }
                result = num2;
            }
            else
            {
                result = 0f;
            }
            return(result);
        }
All Usage Examples Of UnityEditor.HandleUtility::DistancePointToLineSegment