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

Problem beim Ein-/Ausschalten eines slider Objektes

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.03.2016, 11:11     Titel: Problem beim Ein-/Ausschalten eines slider Objektes
  Antworten mit Zitat      
Hallo goMatlab Forum,

ich arbeite gerade an einer Funktion zur Zoom Orientierung, ähnlich der scrollplot Funktion aus dem FEX. Die Funktion fügt zu einer existierenden axes, zwei neue kleinere axes und zwei slider für die x und y Zoom Orientierung ein. Das schwarze Viereck in den kleinen axes unten und links zeigt jeweils den zoom Bereich aus der main axis. Bewegt man den slider, wird das Viereck entsprechend verschoben und der Zoombereich im main axes entsprechend geändert.

Nehmen wir mal den x-zoom Bereich, dann wird der x-slider wie folgt gesetzt:
Code:

% x-zoom Bereich im main axes
limX = get('handle main axes','XLim');

MinVal = ... % XLim(1) bei FULL view -> Werte wurden an anderer Stelle im Code ermittelt
MaxVal = ... % XLim(2) bei FULL view -> Werte wurden an anderer Stelle im Code ermittelt

% von MaxValue wird die Fensterbreite des zoom-Bereichs ( diff(limX) ) abgezogen, damit das schwarze Rechteck rechts/oben nicht über die Plotgrenzen hinaus geschoben werden kann.
set('handle x-slider','Min',MinVal,'Max',Max-val - diff(limX) )
 


Soweit funktioniert der Code auch wie gewünscht. Nun zu meinem Problem. Befindet sich die main axes in full view, darf ja der slider das schwarze Viereck nicht bewegen. Ansonsten würde er sich über die Signalgrenzen bewegen. Dafür überprüfe ich die slider Max/Min Werte mit den limits der main axes. Siehe Funktion Zeile 330ff

Code:

% check if main axes is in full view, disable slider
        if get(handles.xSlider,'Min') == handles.limX(1) && get(handles.xSlider,'Max') == handles.limX(1)
            set(handles.xSlider,'Enable','inactive')
        else
            set(handles.xSlider,'Enable','on')
        end
       
        if get(handles.ySlider,'Min') == handles.limY(1) && get(handles.ySlider,'Max') == handles.limY(1)
            set(handles.ySlider,'Enable','inactive')
        else
            set(handles.ySlider,'Enable','on')
        end
 


Setze ich einen Breakpoint in die Zeile mit der Deaktivierung des Sliders, ist das Verhalten wie gewünscht. Bei full view ist der Slider gesperrt. Aber gibt es keinen Breakpoint, erhalte ich folgende Warnung und der Slider verschwindet.


Code:

Warning: 'slider' control cannot have a 'Value' outside of 'Min'-'Max' range
Control will not be rendered until all of its parameter values are valid
> In zoomOrientation at 228
  In zoomTEST at 30
 


Zum Testen der Funktion genügt folgender Code:

Code:
figure(1);
plot(1:100,randn(1,100))
zoomOrientation(gca,'on')



Das Verhalten ist für mich nicht nachvollziehbar. Ich hoffe ihr könnt mir weiterhelfen.

Danke und Gruß DSP

zoomOrientation.m
 Beschreibung:

Download
 Dateiname:  zoomOrientation.m
 Dateigröße:  14.86 KB
 Heruntergeladen:  298 mal
zoomOrientation.png
 Beschreibung:

Download
 Dateiname:  zoomOrientation.png
 Dateigröße:  53.69 KB
 Heruntergeladen:  309 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.03.2016, 23:47     Titel:
  Antworten mit Zitat      
Ich habe den Fehler gefunden. Ich Depp habe Max,Min und Value der sliders vorher verändert, bevor ich die slider bei full view deaktiviere Embarassed. Liegt Value dann außerhalb Min und Max, kommt logischweise die Fehlermeldung.

So muss die Callback aussehen:

Code:

% ActionPostCallback for mouse clicks
    function MouseAction(~,~)
        handles = getappdata(axh,'zoomOrientation');
        % get new limits
        handles.limX = get(axh,'XLim');
        handles.limY = get(axh,'YLim');      
       
        % check if main axes is in full view, true = disable slider
        if handles.limX(1) <= get(handles.xSlider,'Min') && handles.limX(1) >= (handles.dataLim(2) - diff(handles.limX))
            set(handles.xSlider,'Enable','off')
            set(handles.ySlider,'Enable','off')
        else
            set(handles.xSlider,'Enable','on')
            set(handles.ySlider,'Enable','on')
            % update sliders        
            set(handles.xSlider,'Max',handles.dataLim(2) - diff(handles.limX))
            set(handles.ySlider,'Max',handles.dataLim(4) - diff(handles.limY))
            set(handles.xSlider,'Value',handles.limX(1))
            set(handles.ySlider,'Value',handles.limY(1))
        end    
       
        % update x zoom window (rectangle)      
        pos = get(handles.hZoomXWin,'Position');
        set(handles.hZoomXWin,'Position',[handles.limX(1),pos(2),diff(handles.limX),pos(4)]);                                            
        % update y zoom window (rectangle)        
        pos = get(handles.hZoomYWin,'Position');    
        set(handles.hZoomYWin,'Position',[pos(1),handles.limY(1),pos(3),diff(handles.limY)]);
       
        % save handles
        setappdata(axh,'zoomOrientation',handles)
    end
 


Gruß DSP
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.