I am currently learning from Matt Fig's 41 GUIs. What I do not understand is why he writes this line: set(ln,'buttondownfcn',{@ax_bdfcn,S})? (it is from GUI_18). Not doing this way, clicking on the line does not generate a new one. However I would like to see what this line of code exactly does. Could anybody help me?
P.s. the same syntax is used in GUI_7.
Thanks in advance.
function [] = GUI_18()% Demonstrate the use of the buttondownfcn for an axes.
% Clicking on the axes creates a random line. Note that clicking on the
% line does the same thing. This must be accounted for in the coding
% below, or clicking on the line would do nothing. Right click to delete
% the line.
%
% An exercise would be to alter the code so that right clicking recreates
% the plot in another figure window. This could be done at least two
% different ways.
%%% Author: Matt Fig
% Date: 7/15/2009
S.fh = figure('units','pixels',... 'position',[200 200 200 200],... 'menubar','none',... 'numbertitle','off',... 'name','GUI_18',... 'resize','off');S.ax = axes('units','pixels',... 'position',[30 30 160 160],... 'fontsize',8,... 'buttondownfcn',{@ax_bdfcn,S},... 'nextplot','replacechildren');function [] = ax_bdfcn(varargin)% buttondownfcn for axes.
[h,S] = varargin{[1,3]}; % Extract the calling handle and structure.
% We need to account for when the user clicks the line instead of the axes.
if ~strcmpi(get(h,'type'),'axes') h = findobj('children',h); %
endseltype = get(S.fh,'selectiontype'); % Right-or-left click?
switch seltype case 'alt' cla % Delete the line.
case 'normal' ln = plot(h,sort(rand(1,10))); % Plot a new line.
set(ln,'buttondownfcn',{@ax_bdfcn,S}) otherwise % Do something else for double-clicks, etc.
end
Here starts GUI_7
function [] = GUI_7()% Demonstrate how to store choice counters for multiple user choices.
% Creates a popup with two choices and a textbox to display the number of
% times each choice has been made.
%%% Author: Matt Fig% Date: 7/15/2009S.fh = figure('units','pixels',... 'position',[300 300 300 100],... 'menubar','none',... 'name','GUI_7',... 'numbertitle','off',... 'resize','off');S.tx = uicontrol('style','tex',... 'unit','pix',... 'position',[10 15 280 20],... 'backgroundcolor',get(S.fh,'color'),... 'fontsize',12,'fontweight','bold',... 'string','OPTION 1: 0 OPTION 2: 0');S.pp = uicontrol('style','pop',... 'unit','pix',... 'position',[10 60 280 20],... 'backgroundc',get(S.fh,'color'),... 'fontsize',12,'fontweight','bold',... 'string',{'option 1';'option 2'},'value',1);S.CNT = [0 0]; % Holds the number of times each option has been called.
set(S.pp,'callback',{@pp_call,S}); % Set the callback.
function [] = pp_call(varargin)% Callback for popupmenu.
S = varargin{3}; % Get the structure.
P = get(S.pp,'val'); % Get the users choice from the popup.
S.CNT(P) = S.CNT(P) + 1; % Increment the counter.
set(S.tx, 'string', sprintf('OPTION 1: %i OPTION 2: %i', S.CNT));set(S.pp,'callback',{@pp_call,S}); % Save the new count.
Best Answer