diff --git a/Scripts/Editor/NodeEditorGUI.cs b/Scripts/Editor/NodeEditorGUI.cs index 21d6d0f..fe9279d 100755 --- a/Scripts/Editor/NodeEditorGUI.cs +++ b/Scripts/Editor/NodeEditorGUI.cs @@ -142,11 +142,21 @@ namespace XNodeEditor { } /// Draw a bezier from output to input in grid coordinates - public void DrawNoodle(Gradient gradient, NoodlePath path, NoodleStroke stroke, float thickness, List gridPoints) { + public void DrawNoodle(Gradient gradient, NoodlePath path, NoodleStroke stroke, float thickness, List gridPoints, bool applyWindowCulling = false) { // convert grid points to window points for (int i = 0; i < gridPoints.Count; ++i) gridPoints[i] = GridToWindowPosition(gridPoints[i]); + if (applyWindowCulling) + { + var p0 = gridPoints[0]; + var p1 = gridPoints[1]; + + var windowRect = new Rect(Vector2.zero, new Vector2(position.width, position.height)); + + if (!windowRect.Contains(p0) && !windowRect.Contains(p1)) return; + } + Color originalHandlesColor = Handles.color; Handles.color = gradient.Evaluate(0f); int length = gridPoints.Count; @@ -354,7 +364,7 @@ namespace XNodeEditor { gridPoints.Add(fromRect.center); gridPoints.AddRange(reroutePoints); gridPoints.Add(toRect.center); - DrawNoodle(noodleGradient, noodlePath, noodleStroke, noodleThickness, gridPoints); + DrawNoodle(noodleGradient, noodlePath, noodleStroke, noodleThickness, gridPoints, true); // Loop through reroute points again and draw the points for (int i = 0; i < reroutePoints.Count; i++) {