Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

how to switch YLim from auto to manual using contextmenu

Asked by G A on 19 Jan 2013

The following code works OK, switching y limit in Fig3_axes.

    plot_into3=handles.Fig3_axes;
    ylim_menu = uicontextmenu;
    hcb1 = 'set(gco, ''YLimMode'',''auto'')';
    hcb2 = 'set(gco, ''Ylim'',[0,1])';
    uimenu(ylim_menu, 'Label', 'auto', 'Callback', hcb1);
    uimenu(ylim_menu, 'Label', 'manual', 'Callback', hcb2);
    set(plot_into3,'uicontextmenu',ylim_menu);

However, when I try to replace [0,1] by a variable

 Fig3yLim=[0,1];
 hcb2 = 'set(gco, ''Ylim'',Fig3yLim)';

I am getting an error:

Undefined function or variable 'Fig3yLim'.
Error while evaluating uimenu Callback

How can I use the variable?

0 Comments

G A

Products

No products are associated with this question.

1 Answer

Answer by Jan Simon on 19 Jan 2013
Edited by Jan Simon on 19 Jan 2013
Accepted answer

Yes, of course. Callbacks are evaluated in the base workspace. If you use a variable, which is defined in a function, it is not known when the callback runs.

Better use function for callbacks and store variables in the figure by guidata.

uimenu(ylim_menu, 'Label', 'auto',   'Callback', {@uimenu_Callback, 'auto'});
uimenu(ylim_menu, 'Label', 'manual', 'Callback', {@uimenu_Callback, '01'});
...
function uimenu_Callback(uimenuH, EventData, Command)
handles = guidata(uimenuH);
switch Command
  case '01'
    set(handles.Fig3_axes, 'YLim', [0, 1]);
  case 'auto'
    set(handles.Fig3_axes, 'YLimMode', 'auto');
  otherwise
    error('Unknown command - programming error');
end

Now the contents of the variable Fig3yLim can by added as 4th input argument.

Defining callbacks as strings is supported for backward compatibility with Matlab 5.3 (1999). Using function handles is more secure and efficient.

1 Comment

G A on 19 Jan 2013

Thanks Jan, it works now.

Jan Simon

Contact us