我有一个函数可以读取2个文件并将它们分配给2个变量:
skelfile='data/name.asf'; %asf and amc files are associated,both needed for later stages
motfile='data/name.amc';
[skel,mot]=readMocap(skelfile,motfile);%the function that i need to use is the readMocap
上面的代码将给变量skel,mot作为1X1结构,包含数字和字符信息(包含数字,单元格,字符串,aarays作为结构字段)。
问题是如何使用Gui内部的功能!! 我使用加载2个文件的pusshbutton并在2个静态文本中显示asf,amc文件的文件名 asf,amc文件是包含人体骨骼的运动捕获数据的文件 其中asf有关于骨架的信息和关于运动的信息(帧序列)
function pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to load_MoCap (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile('*.asf', 'MoCap files');
% show name at the static texts
if isequal(filename,0)
set(handles.asf_filename, 'String', 'Please select an .asf file to continue')
else
set(handles.asf_filename, 'String', filename)
skelfile=filename;
[filename2, pathname2] = uigetfile('*.amc;*.c3d', 'MoCap files');
if isequal(filename2,0)
set(handles.amc_filename, 'String', 'Please select an .amc file to continue')
else
set(handles.amc_filename, 'String', filename2)
%the problem
============
%from here i want to run the function and have at a static text the text that
%have when i write skel in the command promt of matlab, or at least somehow
%evaluate tha skel and mot have been assigned as structs
motfile=filename;
[skel,mot]= readMocap(skelfile, motfile);
handles.skel=skel;
handles.mot=mot;
set(handles.skel_mot,'String',skel)
% skel_mot is the static text that refer above
%and i use as property type at the set command th 'string' but i don't think
%that is correct . skel variable is a 1x1 struct
end
end
guidata(hObject,handles);
当你开始一个空白的gui时,我的代码中没有任何其他东西而不是默认值。 a)我是否必须在gui的开启功能中添加一些东西(句柄)?我不想在加载文件之前启动某些东西。 b)我想使用来自文件的信息作为将从gui调用的其他函数的输入,那么当我在gui中调用函数时如何将它们用作输入作为skel,mot或handles.skel, handles.mot ??
提前感谢您的回复。
答案 0 :(得分:1)
一些事情:
handles
中的字段。您不需要打开任何文件,只需根据需要为它们提供空字符串值或nan值。guidata
函数在回调之间的句柄中存储数据。更多信息here。这样你就可以使用handle.whatever来访问其他回调中的变量。 skel
和mot
是结构。 set(handles.skel_mot,'String',skel)
需要skel成为一个字符串。 答案 1 :(得分:0)
我找到了解决问题的方法!
我写了一个脚本,它做了我想要的。从一个按钮打开一个窗口来选择我的文件,然后我调用脚本中的函数,所以我有结构skel,mot分配了想要的信息。最后,我使用Molly建议使用的手柄,以及在工作区使用skel,mot的命令assignin。
所以: 函数GUI_1_OpeningFcn(hObject,eventdata,handles,varargin) %默认评论
handles.skel=NaN;
handles.mot=NaN;
% Choose default command line output for GUI_1
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
============
more of the default Gui code
============
%pushbutton function
function load_MoCap_Callback(hObject, eventdata, handles)
% hObject handle to load_MoCap (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%callint the script
nameofthescript;
%here skel and mot have been assigned so i put them to the handles
handles.skel=skel;
handles.mot=mot;
%with that i have them at the workspace for evaluation of what i want to do next
assignin ('base', 'skel', handles.skel);
assignin('base','mot',handles.mot);
guidata(hObject,handles);
从那以后我可以使用handles.skel和handles.mot来输入我想要的任何其他函数