MATLAB GUI: Make a list of selection from a cell array containing string in popup menu

2 visualizzazioni (ultimi 30 giorni)
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 Commenti
Abdul Rasyid Haron
Abdul Rasyid Haron il 26 Lug 2021
As you suggested, I made the GUI using codes like below. But, I got error message 'Invalid use of operator'. I can't find any operator issue here.
can you have a look at my code and help me?
%% User Interface to plot warpage surface
hObject = figure('Name', 'Warpage Surface Plot', ...
'Position', [300 100 955 559]) % create a figure to house the GUI
handles = guidata(hObject); % update handles
guidata(hObject,handles);
%------ create components of the GUI ------------
% create plot area object
handles.ax1 = axes('Position', [0.07 0.1 0.6 0.8]);
% create push button to select surface
handles.popupmenu1 = uicontrol(...
'Parent', hObject,...
'Style','popupmenu',...
'Unit', 'Normalized',...
'Position',[0.726 0.809 0.25 0.063],...
'String',{'Substrate Bottom', 'Die Top'}...
);
handles.popupmenu1_label = uicontrol(...
'Parent', hObject,...
'Style', 'text',...
'Unit', 'Normalized',...
'Position', [0.71 0.88 0.12 0.027],...
'String', {'Select a surface:'}...
);
handles.listbox = uicontrol(...
'Parent', hObject,...
'Style', 'listbox',...
'Unit', 'Normalized',...
'Position', [0.726 0.2 0.25 0.55],...
'String', C_name{1, 1}...
);
handles.listbox_label = uicontrol(...
'Parent', hObject,...
'Style', 'text',...
'Unit', 'Normalized',...
'Position', [0.7 0.75 0.12 0.027],...
'String', 'Select a step:'...
);
handles.pushbutton = uicontrol(...
'Parent', hObject,...
'Style', 'pushbutton',...
'Unit', 'Normalized',...
'Position', [0.75 0.1 0.15 0.063],...
'String', 'Plot surface',....
'FontSize', 11,....
'Callback', {@plotSurface, handles.popupmenu1, handles.listbox}...
);
% -----create function to plot surface from String selected in popupmenu and listbox ---------
function plotSurface(hObject, eventdata, handles.popupmenu1, handles.listbox)
selectedSurface = get(handles.popupmenu1, 'String');
selectedStep = get(handles.listbox, 'String');
%select which data table to choose
if (selectedSurface == 'Substrate Bottom')
data = SubBotdata;
else
data = DieTopdata;
end
% select X,Y and Z from the data table
switch selectedStep
case 'REMOVE_SEALANT_STIM'
X = data(:,4); % get x displacement
Y = data(:,5); % get y displacement
Z = data(:,6); % get z displacement
case 'COOL-TO-25C'
X = data(:,7); % get x displacement
Y = data(:,8); % get y displacement
Z = data(:,9); % get z displacement
case 'Contact'
X = data(:,10); % get x displacement
Y = data(:,11); % get y displacement
Z = data(:,12); % get z displacement
case 'ON_VACUUM'
X = data(:,13); % get x displacement
Y = data(:,14); % get y displacement
Z = data(:,15); % get z displacement
case 'ACTIVATE_LID_TIM'
X = data(:,16); % get x displacement
Y = data(:,17); % get y displacement
Z = data(:,18); % get z displacement
case 'TGB_CONTACT'
X = data(:,19); % get x displacement
Y = data(:,20); % get y displacement
Z = data(:,21); % get z displacement
case 'APPLY_TGB_LOAD'
X = data(:,22); % get x displacement
Y = data(:,23); % get y displacement
Z = data(:,24); % get z displacement
case 'HEAT-TO-148C'
X = data(:,25); % get x displacement
Y = data(:,26); % get y displacement
Z = data(:,27); % get z displacement
case 'ACTIVATE-SEALANT'
X = data(:,28); % get x displacement
Y = data(:,29); % get y displacement
Z = data(:,30); % get z displacement
case 'REMOVE-LOAD'
X = data(:,31); % get x displacement
Y = data(:,32); % get y displacement
Z = data(:,33); % get z displacement
case 'COOL_TO_25C'
X = data(:,34); % get x displacement
Y = data(:,35); % get y displacement
Z = data(:,36); % get z displacement
case 'HEAT-TO-156C'
X = data(:,37); % get x displacement
Y = data(:,38); % get y displacement
Z = data(:,39); % get z displacement
case 'STIM-MELT_REMOVE'
X = data(:,40); % get x displacement
Y = data(:,41); % get y displacement
Z = data(:,42); % get z displacement
case 'HEAT-TO-175C'
X = data(:,43); % get x displacement
Y = data(:,44); % get y displacement
Z = data(:,45); % get z displacement
case 'COOL-TO-156C'
X = data(:,46); % get x displacement
Y = data(:,47); % get y displacement
Z = data(:,48); % get z displacement
case 'ADD-STIM'
X = data(:,49); % get x displacement
Y = data(:,50); % get y displacement
Z = data(:,51); % get z displacement
case 'STIM_SOLIDIFY'
X = data(:,52); % get x displacement
Y = data(:,53); % get y displacement
Z = data(:,54); % get z displacement
case 'COOL-TO-ROOMTEMP25'
X = data(:,55); % get x displacement
Y = data(:,56); % get y displacement
Z = data(:,57); % get z displacement
case 'HEAT-TO-156C_POSTBLUM'
X = data(:,58); % get x displacement
Y = data(:,59); % get y displacement
Z = data(:,60); % get z displacement
case 'SolderMeltat156C'
X = data(:,61); % get x displacement
Y = data(:,62); % get y displacement
Z = data(:,63); % get z displacement
case 'SolderMeltat180'
X = data(:,64); % get x displacement
Y = data(:,65); % get y displacement
Z = data(:,66); % get z displacement
end
% Plot the surface
xv = linspace(min(X), max(X), 50);
yv = linspace(min(Y), max(Y), 50);
[handles.X, handles.Y] = meshgrid(xv,yv);
F = scatteredInterpolant(X,Y,Z);
handles.Z =F(handles.X, handles.Y);
surf(handles.X, handles.Y, handles.Z);
end
Rik
Rik il 26 Lug 2021
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);

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Get Started with MATLAB in Help Center e File Exchange

Prodotti


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by