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 (the entire code is attached):
% ######### Callbacl 1: Graph SIN function
function pushbutton_plot_Callback(hObject, eventdata, handles) clc; open_figs_h = get(0,'children'); close(open_figs_h(2:end)); 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 and MouseMove subfunctions in callback 1
function MouseUp(h,event) %#ok<*INUSD>
mousedown = false; end 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
Best Answer