Code covered by the BSD License  

Highlights from
Supply Chain Risk Simulator (SCRS)

from Supply Chain Risk Simulator (SCRS) by Marco Anisetti
Supply Chain simulator for risk assessment and incentive schemes.

edit_bezier(varargin)
function edit_bezier(varargin)

if nargin==3
    v=varargin{2};
    e=varargin{1};
    p=get(gca,'CurrentPoint');
    ud=get(gca,'UserData');
    
    % ButtonDown event
    if strcmpi(e,'down')
        if ~strcmpi(ud.mode,'normal')
            % something wrong! fix it and return!
            ud.mode='normal';
            ud.point_to_drag=-1; % nothing is to drag
            set(gcf,'Pointer','arrow');
            set(gca,'UserData',ud);
            return;
        end
        % change the mode to drag
        ud.mode='drag';
        ud.point_to_drag=v; % number of point to drag
        set(gcf,'Pointer','cross');
        set(gca,'UserData',ud);
        return;
    end
    
    if strcmpi(e,'up')
        ud.mode='normal';
        ud.point_to_drag=-1; % nothing is to drag
        set(gcf,'Pointer','arrow');
        set(gca,'UserData',ud);
        return;
    end

   if strcmpi(e,'move') & strcmpi(ud.mode,'drag')
      % the most complicated part 
      new_x=p(1,1);
      new_y=p(1,2);
      b=ud.bezier;
      switch ud.point_to_drag
          case 0
              b.x0=new_x;
              b.y0=new_y;
          case 1
              b.x1=new_x;
              b.y1=new_y;
          case 2
              b.x2=new_x;
              b.y2=new_y;
          case 3
              b.x3=new_x;
              b.y3=new_y;
      end    
      ud.bezier=b;
      set(gca,'UserData',ud);
      edit_curve(b,gcf,varargin{3});
   end    
  
end

Contact us at files@mathworks.com