Is there the more elegant way to do this?

1 view (last 30 days)
G A
G A on 14 Jun 2019
Edited: G A on 14 Jun 2019
By trial and error I came to the following solution for choosing in my GUI a colormap and the number of colors to be used for my 3D surf plot:
%CM_3D is the value from uicontrol popupmenu: 'String',{ 'parula'; 'jet'; 'hsv'; 'hot'}
%NumC=5 is the str2double input from uicontrol edit: 'String','5'
%NumC can be empty matrix [], then the number of colors expected to be the default number
%colormap parula or colormap parula(5) or colormap parula() works; colormap parula(NumC) and colormap parula([]) does nor work
%colormap(parula) or colormap(parula(NumC)) or colormap(parula()) works; colormap(parula([])) does nor work
switch CM_3D
case 1
cm = @parula;
case 2
cm = @jet;
case 3
cm = @hsv;
case 4
cm = @hot;
end
if isempty(NumC)||isnan(NumC)||NumC==0
colormap(cm()), %colormap(cm) does not work
else
colormap(cm(NumC)),
end
Is there more elegant (or 'professional') solution?

Accepted Answer

Matt J
Matt J on 14 Jun 2019
Edited: Matt J on 14 Jun 2019
You don't need the switch block. You can just do,
items = get(hObject,'String');
index_selected = get(hObject,'Value');
cm = str2func( items{index_selected} );

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!