Transmit data between subfunctions in GUIDE

69 Views Asked by At

I have a simple GUIDE with 2 pushbuttons. Button #1 plots a sine graph and button #2 adds a "draggable" vertical line to the graph. Idea is based on the link bellow 1

I'm using guidata to transfer data between subfunctions and callbacks in the GUIDE. But one of the shared variables (mousedown) does not transmit between the callbacks. What causes the loss of data transfer between the subfunctions in GUIDE?

Here are the callbacks with their subfunctions:

      % ######### Callbacl 1: Graph SIN function  
      function pushbutton_plot_Callback(hObject, eventdata, handles)   
      x = -pi:0.01:pi;
      y = sin(x);

      fig_h = figure('units','normalized','outerposition',[0.2 0.2 .5 .5],'WindowButtonMotionFcn', @MouseMove, 'WindowButtonUpFcn', @MouseUp );
      axis_h = axes('parent',fig_h,'position',[0.1 0.1 .8 .8]);
      line('parent',axis_h,'xdata',x,'ydata',y);

      handles.axis_h = axis_h;
      guidata(hObject,handles);

          %### MouseUp subfunctions in callback 1
          function MouseUp(h,event) %#ok<*INUSD>
              mousedown = false;
          end

          %### MouseUp subfunctions in callback 1
          function MouseMove(h,event)
              if isfield(handles,mousedown)
                  mousedown = handles.mousedown;
              else
                  mousedown = false;
              end

              if mousedown
                  cp = get ( axis_h, 'CurrentPoint' );
                  vertline_h = handles.vertline_h;
                  set ( vertline_h, 'XData', [cp(1,1) cp(1,1)] );
              end
          end
      end

      %######### Callbacl 2: Graph movables vertical line      
      function pushbutton_vertline_Callback(h, eventdata,handles)
      axis_h = handles.axis_h;
      vertline_h = line('parent',axis_h,'xdata',[1 1],'ydata',[-1 1], 'ButtonDownFcn', @mouseDown );

      handles.vertline_h = vertline_h;
      guidata(h,handles)

          %### MouseMove subfunction in callback 2
          function mouseDown(hObject,event)
              mousedown = true;
              handles.mousedown = mousedown;
              guidata(hObject,handles)
          end
      end
0

There are 0 best solutions below