0

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

上記のコードは、数値と文字の両方の情報を持つ 1X1 構造体として変数 skel,mot を与えます (構造体フィールドとして数値、セル、文字列、aarays を含みます)。

問題は、Gui内で関数を使用する方法です!! 私は 2 つのファイルをロードし、2 つの静的テキストで asf、amc ファイルの両方のファイル名を表示する pusshbutton を使用します。 (フレームシーケンス)

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 内で関数を呼び出したときにそれらを入力として使用するにはどうすればよいですか??as skel、mot、または handles.skel,ハンドル.モット??

ご回答ありがとうございます。

4

2 に答える 2

1

いくつかのこと:

  • handlesはい、 GUI のオープニング機能でフィールドを定義する必要があります。ファイルを開く必要はありません。必要に応じて空の文字列値または nan 値を指定するだけです。
  • guidata関数を使用して、コールバック間のハンドルにデータを格納する必要があります。詳細はこちら。そうすれば、handles.whatever を使用して他のコールバックの変数にアクセスできます。
  • skelと言ってmot構造物です。set(handles.skel_mot,'String',skel)skel が文字列である必要があります。
  • GUI から呼び出すすべての関数が、GUI がそれらを見つけることができるパスにあることを確認してください。
于 2013-10-29T16:13:38.247 に答える
0

問題の解決策を見つけました!

プッシュボタンからウィンドウを開いてファイルを選択し、スクリプト内の関数を呼び出して、構造体 skel,mot に必要な情報を割り当てます。最後に、モリーが提案したようにハンドルを使用し、ワークスペースにスケル、モットを配置するためのコマンド assignin も使用します。

そう: 関数 GUI_1_OpeningFcn(hObject, eventdata, handles, varargin) %default コメント

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を使用できます

于 2013-10-29T18:48:04.513 に答える