public override void OnToolGUI(EditorWindow window) { base.OnToolGUI(window); var shape = target as Shape; if (shape && shape.ShapeData != null) { Handles.color = baseColor; Handles.matrix = shape.transform.localToWorldMatrix; var inTangentControlIds = new NativeArray <int>(shape.ShapeData.GetPolyPointCount(), Allocator.Temp); var outTangentControlIds = new NativeArray <int>(shape.ShapeData.GetPolyPointCount(), Allocator.Temp); var pointControlIds = new NativeArray <int>(shape.ShapeData.GetPolyPointCount(), Allocator.Temp); ShapeEditorUtils.Fill(inTangentControlIds, -1); ShapeEditorUtils.Fill(outTangentControlIds, -1); ShapeEditorUtils.Fill(pointControlIds, -1); ShapeEditorUtils.DrawTangentLines(shape); DrawPositionHandles(shape, pointControlIds, currentPointId); DrawTangentHandles(shape, inTangentControlIds, outTangentControlIds, currentPointId); var newPoint = ShapeEditorUtils.GetCurrentSelectedPoint(pointControlIds, inTangentControlIds, outTangentControlIds); if (newPoint != -1 && currentPointId != newPoint) { currentPointId = newPoint; } inTangentControlIds.Dispose(); outTangentControlIds.Dispose(); pointControlIds.Dispose(); } }