MATLAB GUI: Make a list of selection from a cell array containing string in popup menu
조회 수: 3 (최근 30일)
이전 댓글 표시
Hi All,
I want to make a GUI whick looks like below. After I imported the data from my workspace to GUI. I want to make a cell array(handles.StepName) containing step names into a list of selection under the select simulation step popup menu. but it didn't work and I got no idea how to do it.
another thing: I want to connect the input selection in the other popup menu (select surface) to the next popup. the first popup will select X_SB,Y_SB and Z_SB, if substrate bottom is selected in th first popup. later, the second popup(select simulation step) will specifiy matrix in struc handles.X_SB, handles.Y_SB and handles.Z_SB to be selected i.e. for step 1, following matrix will be choosen: handles.X_SB.Step1, handles.Y_SB.Step1 and handles.Z_SB.Step1.
can anyone guide me with this ?
thanks
function varargout = PlotSurfUI(varargin)
% PLOTSURFUI MATLAB code for PlotSurfUI.fig
% PLOTSURFUI, by itself, creates a new PLOTSURFUI or raises the existing
% singleton*.
%
% H = PLOTSURFUI returns the handle to a new PLOTSURFUI or the handle to
% the existing singleton*.
%
% PLOTSURFUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PLOTSURFUI.M with the given input arguments.
%
% PLOTSURFUI('Property','Value',...) creates a new PLOTSURFUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before PlotSurfUI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to PlotSurfUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help PlotSurfUI
% Last Modified by GUIDE v2.5 22-Jul-2021 16:35:49
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @PlotSurfUI_OpeningFcn, ...
'gui_OutputFcn', @PlotSurfUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before PlotSurfUI is made visible.
function PlotSurfUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to PlotSurfUI (see VARARGIN)
%get all X,Y, Z displacements for all surfaces
handles.X_SB = evalin('base', 'X_SB');
handles.Y_SB = evalin('base', 'Y_SB');
handles.Z_SB = evalin('base', 'Z_SB');
handles.X_DT = evalin('base', 'X_DT');
handles.Y_DT = evalin('base', 'Y_DT');
handles.Z_DT = evalin('base', 'Z_DT');
%plot initial surface SubBot before selection
X_Step = handles.X_SB.Step0; % get x displacement
Y_Step = handles.Y_SB.Step0; % get y displacement
Z_Step = handles.Z_SB.Step0; % get z displacement
xv = linspace(min(X_Step), max(X_Step), 50); %create 50 points from max and min in x displacements
yv = linspace(min(Y_Step), max(Y_Step), 50); %create 50 points from max and min in y displacements
[handles.X,handles.Y] = meshgrid(xv, yv); % create 2D meshgrid
F= scatteredInterpolant(X_Step, Y_Step, Z_Step); % find interpolant for available data
handles.Z = F(handles.X,handles.Y); %extrapolate and interpolate new z coordinates based on interpolant F and X,Y coordinates
surf(handles.X, handles.Y, handles.Z); %plot original surface of SubBot at Step0
% get step names available
handles.StepName = evalin('base', 'C_name{1,1}');
% Choose default command line output for PlotSurfUI
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes PlotSurfUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = PlotSurfUI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbuttonPlot.
function pushbuttonPlot_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonPlot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% axes(handles.axes1);
% cla;
%
% popup_sel_index = get(handles.popupmenu_Surface, 'Value');
% switch popup_sel_index
% case 1
% plot(rand(5));
% case 2
% plot(sin(1:0.01:25.99));
% case 3
% bar(1:.5:10);
% case 4
% plot(membrane);
% case 5
% surf(peaks);
% end
surf(handles.X, handles.Y, handles.Z);
% --------------------------------------------------------------------
function FileMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function OpenMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to OpenMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
file = uigetfile('*.fig');
if ~isequal(file, 0)
open(file);
end
% --------------------------------------------------------------------
function PrintMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to PrintMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
printdlg(handles.figure1)
% --------------------------------------------------------------------
function CloseMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to CloseMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],...
['Close ' get(handles.figure1,'Name') '...'],...
'Yes','No','Yes');
if strcmp(selection,'No')
return;
end
delete(handles.figure1)
% --- Executes on selection change in popupmenu_Surface.
function popupmenu_Surface_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_Surface (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns popupmenu_Surface contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu_Surface
str = get(hObject, 'String');
val = get(hObject, 'Value');
switch str(val)
case 'Substrate Bottom'
handles.surface == 1;
case 'Die Top'
handles.surface == 2;
end
%save handles structure again
guidata(hObject.handles)
%--- Executes during object creation, after setting all properties.
function popupmenu_Surface_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu_Surface (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
set(hObject, 'String', {'Substrate Bottom', 'Die Top'});
% --- Executes on selection change in popupmenu_Step.
function popupmenu_Step_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_Step (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu_Step contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu_Step
% --- Executes during object creation, after setting all properties.
function popupmenu_Step_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu_Step (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
StepList = get(handles.StepName, 'String');
set(hObject, 'String', StepList);
% --------------------------------------------------------------------
function uitoggletool4_ClickedCallback(hObject, eventdata, handles)
% hObject handle to uitoggletool4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
댓글 수: 5
Rik
2021년 7월 26일
You can't define inputs as fields of a struct. You're better off dynamically loading the data on callback:
function plotSurface(hObject, eventdata)
%this will load handles.popupmenu1 and handles.listbox
handles=guidata(hObject);
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!