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 Balken für neuen Range wird doppelt angezeigt.Wieso?

 

Intenso

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2015, 12:00     Titel: Cursor Balken für neuen Range wird doppelt angezeigt.Wieso?
  Antworten mit Zitat      
Hallo,

ich rufe in einer GUI eine neue Grafik aus und möchte dann 2 vertikale Cursor ploten, die der Nutzer verschieben kann, um sich einen neuen Bereich für seine Auswertung zu erzeugen.

So sieht der Code aus

Code:


f=gcf;

if (firstclick ==1)
    cursor1=starth1;
    assignin('base','cursor1',cursor1);
    cursor2=starth2;
    assignin('base','cursor2',cursor2);
    firstclick =0;
end

 h1 = line([starth1 starth1], [0 7],...
 'color', 'red',...
 'linewidth', 3,...
 'ButtonDownFcn', @startDragFcn);
 h2 = line([starth2 starth2], [0 7],...
 'color', 'green',...
 'linewidth', 3,...
 'ButtonDownFcn', @startDragFcn);

assignin('base','h1',h1);
assignin('base','h2',h2);
 
set(f, 'WindowButtonUpFcn', @stopDragFcn);
 
function startDragFcn(varargin)
 set(f, 'WindowButtonMotionFcn',@dragginFcn);
end
 
function dragginFcn(varargin)
    findobj(gca);
    pt = get(gca, 'CurrentPoint');
    assignin('base','pt',pt)
    set(gco, 'xData', pt(1)*[1 1]);
    assignin('base','gco',gco);
    if (gco==h1)
        cursor1 = pt(1,1);
        assignin('base','cursor1',cursor1);    
        assignin('base','cursor2',cursor2);        
    elseif(gco==h2)
        cursor2 = pt(1,1);        
        assignin('base','cursor2',cursor2);        
        assignin('base','cursor1',cursor1);
    end
    TimeDeltaCursor = cursor2-cursor1;    
    assignin('base','TimeDeltaCursor',TimeDeltaCursor);
end

function stopDragFcn(varargin)
 set(f, 'WindowButtonMotionFcn','')
 
end

save('Temp.mat','-struct','handle')

end

 


Die Funktion an sich funktioniert. Wenn ich jedoch die GUI nicht schließe, sondern nur über clear all usw zurücksetze und dann eine neue Messung aufrufe, bekomme ich teiwelse 2 Cursor übereinander angezeigt.

Eigentlich dürfte es aber nur einen grünen und einen roten cursor geben.
(siehe Bild im Anhang).

Woran kann das liegen?

Wird die GUI nicht richtig aufgebaut von mir? bzw. nicht richtig zurückgesetzt?

Danke Gruß,

Intenso

Curser.PNG
 Beschreibung:

Download
 Dateiname:  Curser.PNG
 Dateigröße:  20.84 KB
 Heruntergeladen:  413 mal
Curser.PNG
 Beschreibung:

Download
 Dateiname:  Curser.PNG
 Dateigröße:  20.84 KB
 Heruntergeladen:  377 mal


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.12.2015, 14:02     Titel: Re: Cursor Balken für neuen Range wird doppelt angezeigt.Wi
  Antworten mit Zitat      
Hallo Intenso,

Ist der gezeigte Code ein Script oder eine Funktion?
Der Code ist sehr unübersichtlich. Das "ferngesteuerte" Erzeugen von Variablen per assignin ist ein sehr fehleranfälliger Programmierstil, der das Debuggen sehr erschwert und Matlab auch deutlich ausbremst (was aber bei GUI-Anwendungen nicht so tragisch ist, da der Mensch immer noch langsamer ist).

Nach einem clear all (was ebenfalls ein schlechter Programmierstil ist, weil es auch wieder das Debuggen erschwert - bei Bedarf findest Du hunderte Threads zu dem Thema im Forum), sollte dieser Code niocht mehr funktionieren, da "firstclick" nicht definiert ist.
Auf gcf zuzugreifen bleibt immer tückisch, denn der Benutzer kann ja zwischen durch auf eine andere Figure klicken, so dass dies einen ungewünschten Handle zurück gibt.

Code:

Diese Zeile ist sinnfrei, da die Ausgabe nicht gespeichert wird.

Zitat:
Die Funktion an sich funktioniert. Wenn ich jedoch die GUI nicht schließe, sondern nur über clear all usw zurücksetze und dann eine neue Messung aufrufe, bekomme ich teiwelse 2 Cursor übereinander angezeigt.

Ich verstehe zwar niocht, was da genau pasiert. Aber wenn das Zurücksetzen per "clear all" nicht funktioniert, dann mache das doch einfach nicht. Ich würde diesen Befehlö sowieso grundsätzlich vermeiden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Intenso

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2015, 16:31     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für dein Feedback.

Ich möchte schon gerne einen sauberen Stil verwenden.

assignin hatte ich verwendet, da ich ansonsten die Werte von dem Cursor nicht ins Workspace bekomme, um mit diesen spatter weiter zu arbeiten.

Hast du einen Vorschlag?

Der gezeigt Code ist ein script welches ich bei dem betätigen eines Buttons im GUI aufrufe.

Dann blende ich das aktuelle GUI aus und das neue ein. Somit kann nicht ausversehen eine andere GUI aktiv sein.


Gruß,

Intenso
 
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.