private void ShowPathGUI(Transform aTransform, Ferr2DPath aPath, SerializedProperty aPathProp)
    {
        EventType eType = Event.current.type;
        Matrix4x4 mat   = aTransform.localToWorldMatrix;

        // show the path and all its standard controls
        PathEditorUtil.OnSceneGUI(aTransform.localToWorldMatrix, aTransform.worldToLocalMatrix, aPathProp, aPath, true, ProcessNewPoint, ProcessRemovePoint, Path2D.Plane.XY, Ferr2DT_Menu.PathSnapMode, Ferr2DT_Menu.SmartSnap?Ferr2DT_Menu.SmartSnapDist:0, KeyCode.C, visuals);
        PathEditorUtil.Selection selection = PathEditorUtil.GetSelection(aPath);

        // find which segments and points are active
        FindActiveControls(aPath, mat, aTransform.worldToLocalMatrix);

        if (Ferr2DT_SceneOverlay.segmentLockMode)
        {
            ShowTexSegmentSelect(aPath, aPathProp, mat);
        }
        else
        {
            float currDistance = 0;
            for (int i = 0; i < aPath.Count; i++)
            {
                // show all the data at the control points
                ShowPointControls(aPath, i, selection, mat, aPathProp);

                // show midpoint controls
                currDistance = ShowMidpointControls(aPath, i, selection, mat, aPathProp, currDistance);
            }
        }

        // drag select has to happen last, otherwise it steals control ahead of the other handles
        ShowDragSelect(aPath, mat);
    }