Since the Tech Tree is not available for customized use, I've been studying various existing mods' GUI approaches and utilized an amalgam of sorts to try to achieve the block diagram system I hope to build. The pictures shown below shows what I've been working on. It features draggable graph nodes/vertices with four different endpoints for creating graph edges. In the first picture, I'm left-clicking and dragging the left-most node's right endpoint (the KSP Debug Console on the right can be ignored for this image). In the second image, I release the left-mouse button at the middle node's left endpoint, which triggers a DrawConnection function. The only problem is, the line drawn is nowhere near the points I specified (that is, the left node's right endpoint and the middle node's left endpoint--my apologies for any confusion that description may cause!). As can be seen in the second image, the line, drawn in red, is way off in the upper-right of the screen. The KSP Debug Console shows the GUI.matrix as at is transformed. The code for the DrawConnection function is as follows: public static void DrawConnection(Vector2 pointA, Vector2 pointB, Color color, float width) { Matrix4x4 matrix = GUI.matrix; Debug.Log("Before Draw:\n" + GUI.matrix.ToString()); Texture2D lineTex = new Texture2D(1, 1); Color savedColor = GUI.color; GUI.color = color; float angle = Vector2.Angle(pointB - pointA, Vector2.right); if (pointA.y < pointB.y) { angle = -angle; } GUIUtility.ScaleAroundPivot(new Vector2((pointB - pointA).magnitude, width), pointA); Debug.Log("After Scale:\n" + GUI.matrix.ToString()); GUIUtility.RotateAroundPivot(angle, pointA); Debug.Log("After Rotate:\n" + GUI.matrix.ToString()); GUI.DrawTexture(new Rect(pointA.x, Screen.height - pointA.y, 1, 1), lineTex); // Restore GUI GUI.matrix = matrix; GUI.color = savedColor; } I've literally been at this for days and it's driving me crazy . If anyone has any recommendations I would be so grateful!