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

vertikale, ziehbare linie

 

seackone
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 30.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2014, 23:12     Titel: vertikale, ziehbare linie
  Antworten mit Zitat      
Hallo,
ich habe 2 subplots bei denen eine vertikale linie gleichzeitig gezogen werden soll. Quasi als cursor. Ich habe hier auch schon einige Beispiele gefunden aber das Wahre war nicht so dabei. Bis auf ein Quelltext:

Code:
function dragdemo

figure
a1=subplot(1,2,1,'buttondownfcn',@clickline,'xlimmode','manual');
a2=subplot(1,2,2,'buttondownfcn',@clickline,'xlimmode','manual');

l1=line([.5 .5],[0 1],'parent',a1,'tag','line1','hittest','off');
l2=line([.5 .5],[0 1],'parent',a2,'tag','line2','hittest','off');

function clickline(src,ev)

set(gcf,'windowbuttonmotionfcn',@dragline)
set(gcf,'windowbuttonupfcn',@dragdone)

function dragline(src,ev)
clicked=get(gca,'currentpoint');
xcoord=clicked(1,1,1);

l1=findobj(gcf,'tag','line1');
l2=findobj(gcf,'tag','line2');

set([l1 l2],'xdata',[xcoord xcoord]);

function dragdone(src,ev)

set(gcf,'windowbuttonmotionfcn','');
set(gcf,'windowbuttonupfcn','');


Das funktioniert erstmal. Doch sobald ich ein plot-Befehl drunter schreibe wars das. Ich kann mir nicht erklären warum. Ich vermute die Buttondownfcn muss irgendwie aus dem subplot in den plot hinein. Aber ich bekomms nicht hin. Kann mir vielleicht jemand helfen?

Vielen Dank!


Edit: ach mist. Ich verwende aktuell noch den datacursermode. Der setzt logischerweise seinen Data Point auf die obere Grenze der Vertikalen. Hat da vielleicht jemand eine andere Lösung wie ich die Data Points und den Vertikalen Cursor unter einen Hut bekomme?
Private Nachricht senden Benutzer-Profile anzeigen


seackone
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 30.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2014, 01:58     Titel:
  Antworten mit Zitat      
Also die einzige Idee wäre irgendwie etwas mit windowsbuttondownfcn anzustellen. Beim klicken der Maustaste müsste die Linie kurzzeitig verschwinden, sodass der Data-Point an der richtigen Stelle gesetzt werden kann und beim loslassen müsste die windowsmotionfcn wieder aktiv sein.
Hab das Skript jetzt bis zu dieser stelle und funktioniert mittlerweile auch soweit..

Code:
function test

fig=figure;

     sh(1)=subplot(2,1,1);
     plot(rand(10,1));
     sh(2)=subplot(2,1,2);
     plot(rand(10,1));
     
datacursormode on
   
for i=1:2
     xl{i}=get(sh(i),'xlim');
     yl{i}=get(sh(i),'ylim');
     lp{i}=line([xl{i};0,0].',[0,0;yl{i}].',...
               'parent',sh(i),...
               'color','black');
           
end

set(gcf,'windowbuttonmotionfcn',{@move_mouse,sh,xl,lp});
set(gcf,'windowbuttondownfcn',{@downfcn,fig});

       
function move_mouse(h,e,sh,xl,lp)
       
     p=get(sh(1),'currentpoint');

     for i=1:2
         
     cp=max([xl{i}(1),p(1,1)]);
     cp=min([xl{i}(2),cp]);
     set(lp{i}(2),'xdata',[cp,cp]);
     
     end

end

function downfcn(h,e,fig)
   
    dcm_obj = datacursormode(fig);
    set(dcm_obj,'UpdateFcn',@myupdatefcn)
   
end

function txt = myupdatefcn(~,event_obj)

pos = get(event_obj,'Position');
txt = {['Frequenz: ',num2str(pos(1)) ' MHz'],['Pegel: ',num2str(pos(2)) ' dbm']};

end

end


Nur der Data-Punkt an der richtigen stelle noch, dann wärs perfekt Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
seackone
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 30.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2014, 03:33     Titel:
  Antworten mit Zitat      
Okay habs jetzt mit der 'windowbuttondownfcn' hinbekommen. Funktioniert auch halbwegs vernünftig, auch wenn man 2 mal klicken muss (1x damit die Linie verschwindet und cursormode an geht, 1x um datenpunkt zu setzen).
Ist jetzt nicht so super elegant aber funktioniert. Falls doch noch jemand eine tolle Lösung hat, kann er ja bescheid geben!

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
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.