Verfasst am: 09.10.2012, 15:00
Titel: XLim YLim nach zoom anpassen
Hi Leute,
ich habe ein Plot in dem ich durch druecken auf den erstellten Cursor Button in eine Funktion springe und zwei Linien plotten lasse. Danke an estorilblau fuer den code. Die Linien positionieren sich in der Mitte des Plots. Ich realisier das mit YLim XLim. Nun habe ich das Problem, dass ich nach einem Zoom in (oder Zoom out) die Cursor sich nicht mehr in der Mitte positionieren und sogar gar nicht mehr funktionieren wenn ich auf die urspruengliche Groesse wieder rauszoom. Wie kann ich das Problem loesen?
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(gca,'CurrentPoint');
xdat = [cp(1,1),cp(1,1)];
set(lineH,'XData',xdat);
setptr(gcbf,'closedhand');
set(xh,'String',cp(1, 1));
set(yh,'String',cp(1, 2));
end
function stop(src,evnt)
f = src;
lineT = get(gco,'Tag');
lineH = findobj(f, 'tag', lineT);
set(lineH,'Color','b','erasemode', 'xor');
set(gcbf,...
'WindowButtonMotionFcn',@local_fcn_mouse_action) set(gcbf,...
'WindowButtonUpFcn','')
setptr(gcbf,'hand');
end
function local_fcn_mouse_action(eventSrc,eventData)
obj = hittest(eventSrc);
switchget(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
aber das ich mach ja in dem ich nochmal auf "Cursor" klicke. Dann wird die Funktion nochmal aufgerufen und alles neue gesetzt. Ich glaube das Problem ist, dass nach dem ich die zoom funktion benutzt habe, mein current object nicht mehr meine axes ist. Wie aendere ich das? Ich hab schon danach gegoogelt und denke das hat mit hittest on bzw. off zu tun. Weiss aber nicht wie ich diese einstellung zu der zoom funktion finde.
wenn dein code oben so aufgerufen wird, erstellst du glaube ich jedem Aufruf der cursor Funktion ein neues Axes-Object.
Das vorhandene Axes-Object sprichst du mit
vielen Dank! Bin schon mal ein Schritt weiter. Anscheinend hat die Funktion die axes nicht mehr als current axes gesehen. Dank deiner Ergaenzung kann ich durch erneutes Aufrufen der cursor function, und zwar nach dem bedienen der zoom funktion, die linien wieder ziehen! Hab aber trotzdem noch n kleines problem. Wenn ich in eine bestimmten bereich gezoomt habe und die cursor funktion aufrufe, setzt er mir die linie nicht in die mitte vom plot. Also muss man ylim,xlim auch irgendwie updaten oder?
Meine Idee war: nimm xmax, teile durch 2. Dann muesste die Linie ja in die Mitte gesetzt werden. Mach er aber nicht nach dem zoomen. Wenn ich noch nicht reingezoomt habe, ist es keine Problem. Wie kann ich anders programmieren, dass die Linie in die Mitte gesetzt wird?
jetzt wird die Linie ungefaehr in die Mitte gesetzt!
VG Andi
Einstellungen und Berechtigungen
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
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.