WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Linien verschieben

 

Pepsi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2012, 11:32     Titel: Verschiebbare Linie im Plot
  Antworten mit Zitat      
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:
%
%---------------------------------------------------------------------------
function varargout = 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',   []);
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 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;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes test_cursor wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = 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;


x = -pi:0.01:pi;
axes(handles.axes1);
cla;

plot(x,sin(x))


% --- 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:


Code:
%
%--------------------------------------------------------

switch action

case 'init'      
       
   set(findobj('Tag','Cursor'),'XData',[0,0],'YData',[-1,1],...
            'ButtonDownFcn','test_cursor(''change_line_position'')');

case 'change_line_position'
    li1=findobj(gca,'Tag','Cursor');
    set(li1,'WindowButtonMotionFcn','test_cursor(''move_line'')');
    set(li1,'WindowButtonUpFcn','test_cursor(''stop'')');

case 'move_line'

    findobj(gca);
    currPt=get(gca,'CurrentPoint');
    currX=currPt(1,1,1);
 
case 'stop'

    findobj(gca);
    set(li1,'WindowButtonMotionFcn','')
    set(li1,'WindowButtonUpFcn','')
%----------------------------------------------
 



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:)

Code:
%
%----------------------------------------------
set ('Cursor', 'WindowButtonDownFcn','startDragFcn');
       
       
    set(gca,'WindowButtonUpFcn','stopDragFcn');  
    ah=axes(handles.axes1);
   
    function startDragFcn(varargin)
        set(gca,'WindowButtonMotionFcn','draggingFcn');
    end
   

    function draggingFcn(varargin)
        pt = get(ah,'CurrentPoint');
        set('Cursor','XData',pt(1)*[1,1]);
    end

    function stopDragFcn(varargin)
        set(gca,'WindowButtonMotionFcn','');
    end
%-----------------------------------------------------
 


Langsam verzweifle ich und hoffe jemand kann mir helfen, meine Fehler zu finden oder hat andere Lösungsvorschläge...

Danke schonmal

test_cursor.fig
 Beschreibung:

Download
 Dateiname:  test_cursor.fig
 Dateigröße:  3.56 KB
 Heruntergeladen:  324 mal
test_cursor.m
 Beschreibung:

Download
 Dateiname:  test_cursor.m
 Dateigröße:  3.29 KB
 Heruntergeladen:  336 mal
Gesplittet: 03.09.2012, 14:08 Uhr von denny
Von Beitrag Plot mit Mauszeiger verschieben aus dem Forum Grafiken und Plots


Rekafari
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2012, 19:18     Titel:
  Antworten mit Zitat      
Hi Pepsi!

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)

% Erstellen des Cursors
h.f = gcf;
h.a = gca;
h.l = line('Tag','Cursor','XData',[0,0],'YData',[-1,1],'Color','r','Linewidth',1.8);  
set(h.l,'ButtonDownFcn',{@startDragFcn,h});
set(h.f,'WindowButtonUpFcn',{@stopDragFcn,h});

function startDragFcn(o,e,h)
set(h.f,'WindowButtonMotionFcn',{@draggingFcn,h});

function draggingFcn(o,e,h)
pt = get(h.a,'CurrentPoint');
set(h.l,'XData',pt(1)*[1,1]);

function stopDragFcn(o,e,h)
set(h.f,'WindowButtonMotionFcn','');


hoffe das hilft dir weiter!
Private Nachricht senden Benutzer-Profile anzeigen
 
Pepsi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2012, 10:41     Titel:
  Antworten mit Zitat      
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... Smile 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)

findobj(gca)     ;
        cursor =line('XData',[0,0],'YData',[-12,12],'Color','r','Linewidth',1.8,'ButtonDownFcn',{@startDragFcn,handles})   %cursor
        set(handles.figure1,'WindowButtonUpFcn',{@stopDragFcn,handles});

       function startDragFcn(hObject, eventdata, handles)
        set(handles.figure1, 'WindowButtonMotionFcn', {@draggingFcn,handles,hObject});

   
function draggingFcn(hObject, eventdata, handles,cursor)
        pt = get(handles.axes1, 'CurrentPoint');
        set(cursor, 'XData', pt(1)*[1 1]);
       

function stopDragFcn(hObject, eventdata, handles)
        set(handles.figure1,'WindowButtonMotionFcn', ' ');
 
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.