void VisualizePolygon(SceneView sceneView)
{
#if UNITY_EDITOR
Event e = Event.current;
Ray r = HandleUtility.GUIPointToWorldRay(e.mousePosition);
Vector2 mousePos = r.origin;
float selectDistance = HandleUtility.GetHandleSize(mousePos) * baseSelectDistance;
#region Draw vertex handles
Handles.color = vertexColor;
for(int i = 0; i < verts.Count; i++) {
verts[i].position = Handles.FreeMoveHandle(
verts[i].position,
Quaternion.identity,
selectDistance,
Vector3.zero,
Handles.CircleCap
);
}
#endregion
#region Draw holes
Handles.color = holeColor;
foreach(var hole in holes)
Handles.RectangleCap(0, hole, Quaternion.identity, selectDistance);
#endregion
#region Draw defined segments
Handles.color = definedSegmentColor;
foreach(var seg in segments) {
if(!seg.IsDeleted())
Handles.DrawLine(seg.first.position, seg.second.position);
}
#endregion
#region Draw Nearest Segment
Handles.color = nearSegmentColor;
var nearSeg = GetSegmentNearPosition(mousePos);
if(nearSeg != null) Handles.DrawLine(nearSeg.first.position, nearSeg.second.position);
#endregion
#region Draw currently defining edge
if(segmentDefiningDrag && dragStartIndex >= 0) {
Handles.color = ghostSegmentColor;
var endVert = GetVertexNearPosition(mousePos);
if(endVert != null) Handles.DrawLine(verts[dragStartIndex].position, endVert.position);
else Handles.DrawLine(verts[dragStartIndex].position, mousePos);
}
#endregion
#endif
}