public static Vector3 ClosestPointToPolyLine(params Vector3[] vertices) { float num1 = DistanceToLine(vertices[0], vertices[1]); int index1 = 0; for (int index2 = 2; index2 < vertices.Length; ++index2) { float num2 = DistanceToLine(vertices[index2 - 1], vertices[index2]); if ((double)num2 < (double)num1) { num1 = num2; index1 = index2 - 1; } } Vector3 vector3_1 = vertices[index1]; Vector3 vector3_2 = vertices[index1 + 1]; Vector2 vector2_1 = Event.current.mousePosition - MyHandleUtility.WorldToGUIPoint(vector3_1); Vector2 vector2_2 = MyHandleUtility.WorldToGUIPoint(vector3_2) - MyHandleUtility.WorldToGUIPoint(vector3_1); float magnitude = vector2_2.magnitude; float num3 = Vector3.Dot((Vector3)vector2_2, (Vector3)vector2_1); if ((double)magnitude > 9.99999997475243E-07) { num3 /= magnitude * magnitude; } float t = Mathf.Clamp01(num3); return(Vector3.Lerp(vector3_1, vector3_2, t)); }
public static float DistanceToLine(Vector3 p1, Vector3 p2) { p1 = (Vector3)MyHandleUtility.WorldToGUIPoint(p1); p2 = (Vector3)MyHandleUtility.WorldToGUIPoint(p2); float num = MyHandleUtility.DistancePointLine((Vector3)Event.current.mousePosition, p1, p2); if ((double)num < 0.0) { num = 0.0f; } return(num); }
public static float DistanceToCircle(Vector3 position, float radius) { Vector2 vector2_1 = MyHandleUtility.WorldToGUIPoint(position); Camera current = Camera.current; Vector2 zero = Vector2.zero; if ((bool)((Object)current)) { Vector2 vector2_2 = MyHandleUtility.WorldToGUIPoint(position + current.transform.right * radius); radius = (vector2_1 - vector2_2).magnitude; } float magnitude = (vector2_1 - Event.current.mousePosition).magnitude; if ((double)magnitude < (double)radius) { return(0.0f); } return(magnitude - radius); }
public static void DebugD(Vector3 p1) { Debug.Log(MyHandleUtility.WorldToGUIPoint(p1)); Debug.Log((Vector3)Event.current.mousePosition); Debug.Log("***"); }