UnityEditor.PolygonEditor.GetNearestEdge C# (CSharp) Method

GetNearestEdge() public static method

public static GetNearestEdge ( Vector2 point, int &pathIndex, int &pointIndex0, int &pointIndex1, float &distance, bool loop ) : bool
point Vector2
pathIndex int
pointIndex0 int
pointIndex1 int
distance float
loop bool
return bool
        public static bool GetNearestEdge(Vector2 point, out int pathIndex, out int pointIndex0, out int pointIndex1, out float distance, bool loop)
        {
            return INTERNAL_CALL_GetNearestEdge(ref point, out pathIndex, out pointIndex0, out pointIndex1, out distance, loop);
        }

Usage Example

 public void OnSceneGUI()
 {
     if ((this.m_ActiveCollider != null) && !Tools.viewToolActive)
     {
         float   num;
         Vector2 offset  = this.m_ActiveCollider.offset;
         Event   current = Event.current;
         this.m_DeleteMode = current.command || current.control;
         Transform transform = this.m_ActiveCollider.transform;
         GUIUtility.keyboardControl         = 0;
         HandleUtility.s_CustomPickDistance = 50f;
         Plane plane = new Plane(-transform.forward, Vector3.zero);
         Ray   ray   = HandleUtility.GUIPointToWorldRay(current.mousePosition);
         plane.Raycast(ray, out num);
         Vector3 point   = ray.GetPoint(num);
         Vector2 vector3 = transform.InverseTransformPoint(point);
         if ((current.type == EventType.MouseMove) || this.m_FirstOnSceneGUIAfterReset)
         {
             int   num2;
             int   num3;
             int   num4;
             float num5;
             if (PolygonEditor.GetNearestPoint(vector3 - offset, out num2, out num3, out num5))
             {
                 this.m_SelectedPath     = num2;
                 this.m_SelectedVertex   = num3;
                 this.m_SelectedDistance = num5;
             }
             else
             {
                 this.m_SelectedPath = -1;
             }
             if (PolygonEditor.GetNearestEdge(vector3 - offset, out num2, out num3, out num4, out num5, this.m_LoopingCollider))
             {
                 this.m_SelectedEdgePath     = num2;
                 this.m_SelectedEdgeVertex0  = num3;
                 this.m_SelectedEdgeVertex1  = num4;
                 this.m_SelectedEdgeDistance = num5;
             }
             else
             {
                 this.m_SelectedEdgePath = -1;
             }
             if (current.type == EventType.MouseMove)
             {
                 current.Use();
             }
         }
         else if (current.type == EventType.MouseUp)
         {
             this.m_LeftIntersect  = false;
             this.m_RightIntersect = false;
         }
         bool flag  = false;
         bool flag2 = false;
         if ((this.m_SelectedPath != -1) && (this.m_SelectedEdgePath != -1))
         {
             Vector2 vector4;
             PolygonEditor.GetPoint(this.m_SelectedPath, this.m_SelectedVertex, out vector4);
             vector4 += offset;
             float num6 = HandleUtility.GetHandleSize(transform.TransformPoint((Vector3)vector4)) * 0.2f;
             flag2 = this.m_SelectedEdgeDistance < (this.m_SelectedDistance - num6);
             flag  = !flag2;
         }
         else if (this.m_SelectedPath != -1)
         {
             flag = true;
         }
         else if (this.m_SelectedEdgePath != -1)
         {
             flag2 = true;
         }
         if (this.m_DeleteMode && flag2)
         {
             flag2 = false;
             flag  = true;
         }
         bool flag3 = false;
         if (flag2 && !this.m_DeleteMode)
         {
             Vector2 vector6;
             Vector2 vector7;
             PolygonEditor.GetPoint(this.m_SelectedEdgePath, this.m_SelectedEdgeVertex0, out vector6);
             PolygonEditor.GetPoint(this.m_SelectedEdgePath, this.m_SelectedEdgeVertex1, out vector7);
             vector6 += offset;
             vector7 += offset;
             Vector3 start = transform.TransformPoint((Vector3)vector6);
             Vector3 end   = transform.TransformPoint((Vector3)vector7);
             start.z       = end.z = 0f;
             Handles.color = Color.green;
             Vector3[] points = new Vector3[] { start, end };
             Handles.DrawAAPolyLine((float)4f, points);
             Handles.color = Color.white;
             Vector2 vector10 = this.GetNearestPointOnEdge(transform.TransformPoint((Vector3)vector3), start, end);
             EditorGUI.BeginChangeCheck();
             float handleSize = HandleUtility.GetHandleSize((Vector3)vector10) * 0.04f;
             Handles.color = Color.green;
             vector10      = Handles.Slider2D((Vector3)vector10, new Vector3(0f, 0f, 1f), new Vector3(1f, 0f, 0f), new Vector3(0f, 1f, 0f), handleSize, new Handles.DrawCapFunction(Handles.DotCap), Vector3.zero);
             Handles.color = Color.white;
             if (EditorGUI.EndChangeCheck())
             {
                 PolygonEditor.InsertPoint(this.m_SelectedEdgePath, this.m_SelectedEdgeVertex1, ((Vector2)((vector6 + vector7) / 2f)) - offset);
                 this.m_SelectedPath     = this.m_SelectedEdgePath;
                 this.m_SelectedVertex   = this.m_SelectedEdgeVertex1;
                 this.m_SelectedDistance = 0f;
                 flag  = true;
                 flag3 = true;
             }
         }
         if (flag)
         {
             Vector2 vector11;
             PolygonEditor.GetPoint(this.m_SelectedPath, this.m_SelectedVertex, out vector11);
             vector11 += offset;
             Vector3 world = transform.TransformPoint((Vector3)vector11);
             world.z = 0f;
             Vector2 a    = HandleUtility.WorldToGUIPoint(world);
             float   num8 = HandleUtility.GetHandleSize(world) * 0.04f;
             if (((this.m_DeleteMode && (current.type == EventType.MouseDown)) && (Vector2.Distance(a, Event.current.mousePosition) < 50f)) || this.DeleteCommandEvent(current))
             {
                 if ((current.type != EventType.ValidateCommand) && (PolygonEditor.GetPointCount(this.m_SelectedPath) > this.m_MinPathPoints))
                 {
                     PolygonEditor.RemovePoint(this.m_SelectedPath, this.m_SelectedVertex);
                     this.Reset();
                     flag3 = true;
                 }
                 current.Use();
             }
             EditorGUI.BeginChangeCheck();
             Handles.color = !this.m_DeleteMode ? Color.green : Color.red;
             Vector3 position = Handles.Slider2D(world, new Vector3(0f, 0f, 1f), new Vector3(1f, 0f, 0f), new Vector3(0f, 1f, 0f), num8, new Handles.DrawCapFunction(Handles.DotCap), Vector3.zero);
             Handles.color = Color.white;
             if (EditorGUI.EndChangeCheck() && !this.m_DeleteMode)
             {
                 vector11 = transform.InverseTransformPoint(position) - offset;
                 PolygonEditor.TestPointMove(this.m_SelectedPath, this.m_SelectedVertex, vector11, out this.m_LeftIntersect, out this.m_RightIntersect, this.m_LoopingCollider);
                 PolygonEditor.SetPoint(this.m_SelectedPath, this.m_SelectedVertex, vector11);
                 flag3 = true;
             }
             if (!flag3)
             {
                 this.DrawEdgesForSelectedPoint(position, transform, this.m_LeftIntersect, this.m_RightIntersect, this.m_LoopingCollider);
             }
         }
         if (flag3)
         {
             Undo.RecordObject(this.m_ActiveCollider, "Edit Collider");
             PolygonEditor.ApplyEditing(this.m_ActiveCollider);
         }
         if (this.DeleteCommandEvent(current))
         {
             Event.current.Use();
         }
         this.m_FirstOnSceneGUIAfterReset = false;
     }
 }
All Usage Examples Of UnityEditor.PolygonEditor::GetNearestEdge