Verfasst am: 03.09.2012, 11:32
Titel: Verschiebbare Linie im Plot
Hallo!
Ich möchte für eine Auwertung von Zeitsignalen eine grafische Oberfläche entwickeln. Als mehr oder weniger blutiger Anfänger stolpere ich allerdings schon über erste Ziele...
Die Signalabschnitte möchte ich mittels beweglicher Cursoren (Verschiebelinien) auswählen. Dabei schaffe ich das noch nicht mal für einen einzelnen Cursor... Vielleicht könnt ihr mir helfen, meine Fehler zu finden bei den Bezeichnungen.
Hier mal mein Beispiel einer vereinfachten GUI, die sich nur mit dem Erzeugen des Cursors beschäftigt (auch in den Dateien)
Code:
%
%---------------------------------------------------------------------------
functionvarargout = test_cursor(varargin) % TEST_CURSOR MATLAB code for test_cursor.fig % TEST_CURSOR, by itself, creates a new TEST_CURSOR or raises the existing % singleton*.
%
% H = TEST_CURSOR returns the handle to a new TEST_CURSOR or the handle to % the existing singleton*.
%
% TEST_CURSOR('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TEST_CURSOR.M with the given input arguments.
%
% TEST_CURSOR('Property','Value',...) creates a new TEST_CURSOR or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before test_cursor_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to test_cursor_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 test_cursor
% Last Modified by GUIDE v2.5 30-Aug-2012 09:36:17
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @test_cursor_OpeningFcn, ...
'gui_OutputFcn', @test_cursor_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before test_cursor is made visible. function test_cursor_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 test_cursor (see VARARGIN)
% Choose default command line output for test_cursor
handles.output = hObject;
% UIWAIT makes test_cursor wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = test_cursor_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 pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
%Erstellen des Cursors
findobj(gca) ;
line('Tag','Cursor','XData',[0,0],'YData',[-1,1],'Color','r','Linewidth',1.8); %cursor
das Funktioniert soweit auch, nur mit dem Verschieben über die WindowButton-Funktionen komme ich nicht klar.
Ich dachte dabei an Anweisungen wie in diese Richtung:
case 'change_line_position'
li1=findobj(gca,'Tag','Cursor');
set(li1,'WindowButtonMotionFcn','test_cursor(''move_line'')');
set(li1,'WindowButtonUpFcn','test_cursor(''stop'')');
Allerdings bekomme ich mit der switch action-Routine nur Fehlermeldungen. Auch wenn ich das in einzelne Funktionen umschreibe, die nacheinander aufgerufen werden sollen, funktioniert es dann nie... (z.B. etwas in die Richtung:)
Anbei mal nen Code-Vorschlag für den Pushbutton.
Bei der Zuweisung von Callback-Funktionen gibts es unterschiedliche
Möglichkeiten/Formulierungen. Zudem solltest du vorher mal nachschauen welche
Objekte über welche Callack-Funktionen verfügen - Window...Fcn gibts nur bei der Figure,
muss also auch entsprechend zugewiesen werden...
Code:
%
% --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Vielen Dank, hatte es mit ein bisschen Abstand zur Thematik vor 2 Tagen dann doch noch auch slebst mit hinbekommen.... wie das so ist, wenn man manchmal vor lauter Bäumen den Wald nicht sieht... mein Vorschlag:
Code:
function cursor_Callback(hObject, eventdata, handles) % hObject handle to cursor (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
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.