void OnSceneGUI()
    {
        // Creeation des ID
        int arrowIDForward = GUIUtility.GetControlID("Arrow Forward".GetHashCode(), FocusType.Passive);
        int arrowIDBack    = GUIUtility.GetControlID("Arrow Back".GetHashCode(), FocusType.Passive);

        // Recupere les variables utiles
        TrackSegment track          = target as TrackSegment;
        Vector3      origin         = track.GetControlPoint(0, Space.World);
        Vector3      tangentForward = track.GetControlPoint(1, Space.World);
        Vector3      tangentBack    = origin * 2 - tangentForward;
        Vector3      tangentDir     = track.transform.forward;

        // Creation du plane
        Vector3 camUp         = SceneView.lastActiveSceneView.camera.transform.up;
        Vector3 pNormal       = Vector3.Cross(tangentDir, camUp).normalized;
        Plane   draggingPlane = new Plane(pNormal, origin);
        float   newDistance   = 0;

        // Affichage des handles pour la tangente
        bool changedForward = DrawTangentHandle(arrowIDForward, tangentForward, origin, tangentDir, draggingPlane, ref newDistance);
        bool changedBack    = DrawTangentHandle(arrowIDBack, tangentBack, origin, -tangentDir, draggingPlane, ref newDistance);

        // Si un des handle est modifie on met a jour la distance
        if (changedForward || changedBack)
        {
            Undo.RecordObject(target, "adjust bezier tangent");
            track.tangentLength = newDistance;
            track.RoadChain?.UpdateSegments();
        }
    }