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

Cursor Linie im Plot setzen

 

Gusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 10:42     Titel: Cursor Linie im Plot setzen
  Antworten mit Zitat      
Hi Leute,

ich habe ein Plot mit einem Zeitsignal. Ich moechte nun zwei Cursor Linien im Plot setzen um so z.B. den Abstand zu messen. Linie im Plot setzen geht mit folgendem Befehl:

line('XData',alim,'YData',[-8000,8000],'Color','r');

Nun zu meinem Problem. Wie kann ich Linien im Plot angepasst setzen?

Beispiel: Ich oeffne mein GUI. Lasse die Daten plotten. Das funktioniert soweit. Jetzt zoome ich in das Signal hineien bis ich z.B. nur noch drei Perioden einer Sinusschwingung betrachten kann. Ich druecke auf den erstellten Cursor Button und jetzt soll eine Linie in der Mitte erscheinen die ich dann bewegen kann. Wie lese ich also nach dem Zoom die Xmin,Xmax bzw. Ymin,Ymax aus?

VG
Andi
Private Nachricht senden Benutzer-Profile anzeigen


estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe zwar noch nicht ganz genau was du machen willst, aber hier ist ein Code um bewegte Linien in einem Plot zu realisieren.
Code:
function moveLine
%
main = figure('HandleVisibility','on');
set(main,'WindowButtonMotionFcn',@local_fcn_mouse_action);
ah = axes('Tag','ah','parent',main);
set(ah,'YLim',[1 10],'XLim',[1 10]);
%axis ([1 10 1 10])
for i=1:4
    line([i+1 i+1],[0 10],'Tag',strcat('line',num2str(i)),'ButtonDownFcn',@init,'UserData',i);
end

  function init(src,evnt)
    f = src;
    lineT = get(gco,'Tag');
    lineH = findobj(f, 'tag', lineT);
    set(lineH,'color','r','erasemode', 'xor');
    set(gcbf,'WindowButtonMotionFcn',@move)
    set(gcbf,'WindowButtonUpFcn',@stop)
    setptr(gcbf,'closedhand');
  end
 
  function move(src,evnt)
    f = src;
    lineT = get(gco,'Tag');
    lineH = findobj(f, 'tag', lineT);
    cp = get(ah,'CurrentPoint');
    xdat = [cp(1,1),cp(1,1)];
    set(lineH,'XData',xdat);
    setptr(gcbf,'closedhand');
  end
   
  function stop(src,evnt)
    f = src;
    lineT = get(gco,'Tag');
    lineH = findobj(f, 'tag', lineT);
    set(lineH,'Color','b','erasemode', 'normal');
    set(gcbf,...
        'WindowButtonMotionFcn',@local_fcn_mouse_action)
    set(gcbf,...
        'WindowButtonUpFcn','')
    setptr(gcbf,'hand');
  end

    function local_fcn_mouse_action(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'line1'
            setptr(eventSrc,'hand');
        case 'line2'
            setptr(eventSrc,'hand');
        case 'line3'
            setptr(eventSrc,'hand');
        case 'line4'
            setptr(eventSrc,'hand');
        otherwise
        setptr(eventSrc,'arrow');
      end
    end
end


Hoffe es hilft dir weiter.
_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 12:04     Titel:
  Antworten mit Zitat      
Hi,

OK. Muss ich mir genauer angucken. So wie ich das verstanden hab ist die 'WindowButtonDownFcn' Reaktion auf die gedrueckte Maus Taste... usw. Wie heisst aber der Handle nur auf mein Plot? Sprich wenn ich mit der Maus auf mein Plot komme, soll eine bestimmte Funktion ausgefuehrt werden.

VG
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 12:30     Titel:
  Antworten mit Zitat      
Wenn du mit Plot dein Axes-Objekt meinst, also dein Koordinatensystem in dem du plottest, dann ergänze die letzte Funktion.

Im Beispiel wird nun "Mein Axes" im Workspace ausgegeben, sobald du mit der Maus über das Axes-Objekt fährst.
Code:
function local_fcn_mouse_action(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'line1'
            setptr(eventSrc,'hand');
        case 'line2'
            setptr(eventSrc,'hand');
        case 'line3'
            setptr(eventSrc,'hand');
        case 'line4'
            setptr(eventSrc,'hand');
        case 'ah'
            display('mein Axes');
        otherwise
        setptr(eventSrc,'arrow');
      end
    end


Wenn du möchtest das die Aktion erst ausgeführt wird wenn du auf das Axes-Objekt geklickt hast, dann folgendes.
Code:
function moveLine
%
main = figure('HandleVisibility','on');
set(main,'WindowButtonMotionFcn',@local_fcn_mouse_action);
ah = axes('Tag','ah','parent',main,'ButtonDownFcn',@init2);
set(ah,'YLim',[1 10],'XLim',[1 10]);

  function init2(src,evnt)
    set(gcbf,'WindowButtonUpFcn',@druck)
    setptr(gcbf,'closedhand');
  end

  function druck(src,evnt)
    display('Mein Axes');
    setptr(gcbf,'hand');
  end

    function local_fcn_mouse_action(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'ah'
            setptr(eventSrc,'hand');
        otherwise
        setptr(eventSrc,'arrow');
      end
    end
end


Hoffe das ist nun das was du meinst.
_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 13:30     Titel:
  Antworten mit Zitat      
Hi,

ja ich mein mein Axes - Objekt. Nicht ganz was ich brauche. Auf jeden Fall veranlasst deine Code Ergaenzung eine Reaktion auf eine Maus Bewegung auf dem Axes - Objekt. Was ich brauche ist, wenn ich mit dem Mauszeiger auf mein Axes - Objekt fahre, dass ich dann in eine bestimmte Funktion springe. Wie kann ich das in meinem GUI Code realisieren? Axes1 ist der Tag meines Axes - Objekt. Kann ich also sowas in der Art schreiben um auf ne bestimmte Funktion zugreifen sobald ich auf mein Axes - Obekt fahre:

function axes1_Callback(hObject, eventdata, handles)

function tu_irgendwas(irgendwelche_Argumente)

???

VG
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

soll die Funktion nur einmal aufgerufen werden?

Danach erst wieder wenn du das Axes-Objekt verlassen hast (mit der Maus)?
_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 14:04     Titel:
  Antworten mit Zitat      
Hi,

genau das.

VG
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 14:10     Titel:
  Antworten mit Zitat      
Hallo,

was eleganteres fällt mir im Moment nicht ein außer so:

Funktion für die figure und axes:
Code:
function moveLine
%
main = figure('HandleVisibility','on','tag','main');
set(main,'WindowButtonMotionFcn',@local_fcn_mouse_axes);
ah = axes('Tag','Axes1','parent',main);
set(ah,'YLim',[1 10],'XLim',[1 10]);

    function local_fcn_mouse_axes(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'Axes1'
            function_irgendwas();
            set(main,'WindowButtonMotionFcn',@local_fcn_mouse_figure);
      end
    end
    function local_fcn_mouse_figure(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'main'
            set(main,'WindowButtonMotionFcn',@local_fcn_mouse_axes);
      end
    end
end


Funktion für tu irgendwas:
Code:
function function_irgendwas()

a = 1;
b = 2;
c = a+b;
display(c);

end


Lass mich bitte wissen ob das dass ist was du brauchst.
_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 14:20     Titel:
  Antworten mit Zitat      
Hi,

das Problem ist, dein Code ist ein Script mit verschachtelten Funktionen. Was ich bracuhe ist eine Callback Funktion sobald ich mit der Maus auf mein Axes - Objekt fahre.

Vg
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 14:22     Titel:
  Antworten mit Zitat      
Der Callback von z.B. der 'WindowButtonMotionFcn' soll also in einem eigenem m-file stehen?
_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 14:27     Titel:
  Antworten mit Zitat      
Ja. Der Callback soll aus dem GUI m - File aufgerufen werden...
Private Nachricht senden Benutzer-Profile anzeigen
 
estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 14:43     Titel:
  Antworten mit Zitat      
So:

Wenn es so nun auch nicht sein soll dann verstehe ich nicht was du willst.

m-file 1:
Code:
function moveLine
%
main = figure('HandleVisibility','on','tag','main');
set(main,'WindowButtonMotionFcn',{@maus_action,'on'});
ah = axes('Tag','Axes1','parent',main);
set(ah,'YLim',[1 10],'XLim',[1 10]);

end


m-file2:
Code:
function maus_action(eventSrc,eventData,action)

fig = findobj('Type','figure','-and','Tag','main');

switch action
    case 'on'
        set(fig,'WindowButtonMotionFcn',@local_fcn_mouse_axes);
end

    function local_fcn_mouse_axes(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'Axes1'
            function_irgendwas();
            set(fig,'WindowButtonMotionFcn',@local_fcn_mouse_figure);
      end
    end

    function local_fcn_mouse_figure(eventSrc,eventData)
      obj = hittest(eventSrc);
      switch get(obj,'Tag')
        case 'main'
            set(fig,'WindowButtonMotionFcn',@local_fcn_mouse_axes);
      end
    end

end


m-file3: (tu irgendwas)
Code:
function function_irgendwas()

a = 1;
b = 2;
c = a+b;
display(c);

end


Klappt das so wie du es willst?
_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 05.10.2012, 14:54     Titel:
  Antworten mit Zitat      
Erstmal danke dir fuer deine Zeit und deine Antworten. Ich glaube wir reden an einander vorbei Very Happy

Es gibt ja fuer jedes Objekt das man mit dem GUIDE erstellt eine Callback funktion. Wenn ich nun ein Button erstelle, habe ich in meinem GUI m - File folgende Funktion:

function pushbutton1_Callback(hObject, eventdata, handles)

....(Anweisungen).....

Nun wollte ich wissen ob es eine Callback Funktion gibt, wenn ich mit der Maus auf mein Axes - Obejkt fahre. Anscheinend ist dies die 'WindowButtonMotionFcn'. Wie binde ich diese aber in mein GUI m - File ein? Ich kann ja nicht schreiben:

function axes1_Callback(hObject, eventdata, handles)

oder

function axes1_WindowButtonMotionFcn(hObject, eventdata, handles)

funktioniert beides nicht.

VG
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
estorilblau
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.10.12
Wohnort: München
Version: R2006a, R2007b, R2010b
     Beitrag Verfasst am: 05.10.2012, 19:24     Titel:
  Antworten mit Zitat      
Hallo,

sorry war kurz weg.
Da ich nicht mit guide arbeite hat es nun etwas gedauert.
Hoffe nun ist es so wie du willst.
figure mit guide erstellt.
windowbuttonmotionfcn gestetzt (ist die maus_action.m)
dort wird überprüft ob du auf deinem Axes-Object bist und wenn ja die Funktion irgendwas 1mal ausgeführt.

Siehe Dateianhang.

maus_action.m
 Beschreibung:

Download
 Dateiname:  maus_action.m
 Dateigröße:  770 Bytes
 Heruntergeladen:  397 mal
main_fig.m
 Beschreibung:
Mit guide erstellt

Download
 Dateiname:  main_fig.m
 Dateigröße:  2.73 KB
 Heruntergeladen:  392 mal
main_fig.fig
 Beschreibung:

Download
 Dateiname:  main_fig.fig
 Dateigröße:  3.25 KB
 Heruntergeladen:  366 mal
function_irgendwas.m
 Beschreibung:

Download
 Dateiname:  function_irgendwas.m
 Dateigröße:  77 Bytes
 Heruntergeladen:  375 mal

_________________

Viele Grüße

estorilblau
Private Nachricht senden Benutzer-Profile anzeigen
 
Gusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.10.12
Wohnort: Freising
Version: ---
     Beitrag Verfasst am: 08.10.2012, 08:48     Titel:
  Antworten mit Zitat      
Hi,

perfekt! Ich danke dir vielmals fuer die schnelle Antwort. Das Programm funktioniert einwandfrei, genau was ich wollte. Jetzt kann ich drauf aufbauen. Danke nochmal!

VG
Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.