Verfasst am: 26.08.2015, 11:54
Titel: datacursormode - Werte in neue Variable übergeben
Hallo,
Matlabvers.: 2015a
OS: Win 7 64 bit
ich habe ein Programm mit einer GUI geschrieben.
In dieser GUI bedfindet sich auch ein Bereich für den Plot der Daten.
Über den datacursormode und der update function kann ich mir die Werte anzeigen lassen.
Wie kann ich aber die Werte in meine Hauptfunktion übergeben, dass ich mit denen dann auch in anderen Funktionen weiterarbeiten kann?
Bisher habe ich das so gelöst:
Code:
%% CREATE GUI function main_gui
closeall; % close all open windows clc% clear Command Window
ud.idx = 0;
% create gui main window
handles.mainwin = figure('Units','pixels', 'Position',[20, 40, 800, 500], 'Visible','on');
% create guipanel for plots
handles.hp_plot = uipanel('Parent',handles.mainwin, 'Units','pixels', 'Position',[50100700350]);
% create push button to plot data
handles.pb_plot = uicontrol('Parent',handles.mainwin, 'Style','pushbutton', ...
'String','PLOT', 'HorizontalAlignment','center', 'Enable','on', ...
'Position',[50205025], 'Callback',@cpf_pb_plot);
% create push button to show index in command window
handles.pb_idx = uicontrol('Parent',handles.mainwin, 'Style','pushbutton', ...
'String','INDEX', 'HorizontalAlignment','center', 'Enable','on', ...
'Position',[150205025], 'Callback',@cpf_pb_idx);
% Data Cursor
ud.dc = datacursormode(handles.mainwin);
set(ud.dc, 'Enable','on', 'SnapToDataVertex','on', 'DisplayStyle','datatip', ...
'UpdateFcn',@dc_UpdateFcn);
% create data to plot
ud.x = [1:1:100];
ud.y = rand(100,1);
% save handles & userdata guidata(handles.mainwin, handles);
set(handles.mainwin, 'UserData',ud);
end %main_gui
%% CALL BACK FUNCTIONS % Data Cursor function label = dc_UpdateFcn(~, event_obj)
pos = get(event_obj, 'Position');
label = {sprintf('point: %.0f', pos(1)), sprintf('Value: %.3f', pos(2))};
line_handle = get(event_obj,'Target');
axes_handle = get(line_handle,'Parent');
hp_plot_handle = get(axes_handle,'Parent');
mainwin_handle = get(hp_plot_handle,'Parent');
ud.idx = pos(1);
set(mainwin_handle, 'UserData',ud);
end % plot function cpf_pb_plot(hObject, ~, ~)
handles = guidata(hObject);
ud = get(handles.mainwin, 'Userdata');
% plot data
ud.p(1) = axes('Parent',handles.hp_plot, 'Units','pixels', 'Position',[6040600300], 'FontSize',8);
plot(ud.p(1),ud.x, ud.y,'r');
end %cpf_pb_plot
% index function cpf_pb_idx(hObject, ~, ~)
handles = guidata(hObject);
ud = get(handles.mainwin, 'Userdata');
disp(num2str(ud.idx, '%.2f'));
end %cpf_pb_idx
Frage (1)
Gibt es eine bessere Methode ohne die Abfrage der Parent der einzelnen handle?
Kann man nicht einfach direkt, so wie bei den anderen Call Back Function auch, die Userdata nicht direkt übergeben?
Frage (2)
Wie kann ich aus der
function label = dc_UpdateFcn(~, event_obj)
direkt die
function cpf_pb_idx(hObject, ~, ~)
aufrufen, damit ich nicht immer den pushbutton drücken muss?
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.