have a figure slide under another

Hi, I would like to have figure2 slide from behind figure 1 when I push a button. Unfortunately I was able to accoplish all that with exception of the sliding from behind. Each time I set the posiion it bring figure 2 to front and stays there. I know I can push figure 2 back behind figure 1 once I set the position however it does not look good or natural. Any ideas how to keep figure 2 behind the whole time? Thank you
figure 1
figure2('Visible','off')
figure(figure1)
for i = 1:65.2
set(figure2,'Position',[103.2+i 34.0769+10 62.8 15.6923])
end

 采纳的回答

I don't really understand why you would want to do this, but here you go:
Updated
function moveFigureElegantly
hFig1 = figure;
set(hFig1,'units','normalized');
plot(1:10);
hFig2 = figure;
surf(peaks);
%Where do we want to go
trajectory = [sin(linspace(0,2*pi,100)).', cos(linspace(0,2*pi,100)).']./2+0.25;
ii = 0; %Where are we
% NOTE keeping width and height fixed, they could be changed as well
T = timer('Period',0.5,... %period
'ExecutionMode','fixedRate',... %{singleShot,fixedRate,fixedSpacing,fixedDelay}
'BusyMode','drop',... %{drop, error, queue}
'TasksToExecute',200,...
'StartDelay',0,...
'TimerFcn',@moveFig,...
'StartFcn',[],...
'StopFcn',[],...
'ErrorFcn',[]);
start(T);
function moveFig(~,~)
% increment location
ii = ii+1;
%Move the figure
set(hFig1,'position',[trajectory(ii,:), 0.5 0.5])
% reset after looping through
if ii == size(trajectory,1)
ii = 0;
end
end
end

2 个评论

well, it still brings the figure 2 on top of figure 1 when I make it visible with the code below. I think what I'm going to do is use your idea to make it work. Thank you
See the edits. Now it follows a trajectory. There are a few different ways you can do this; personally I like nested functions for this application.

请先登录,再进行评论。

更多回答(2 个)

Evan
Evan 2013-6-24
编辑:Evan 2013-6-24
Does this work?
% Example
f = figure; % create first figure
g = figure; % create second figure (appears in front of first)
figure(f) % bring first figure to front
I tried out your example, and calling the figure that should be "in front" like I did above inside the loop seemed to do the trick.

6 个评论

figure1 = figure;
figure2 = figure;
p = get(figure1,'Position');
for i = 1:10:p(3)
set(figure2,'Position',[p(1)+i p(2)+10 p(3) p(4)]);
figure(figure1);
end
Here's my example code. What exactly about it doesn't work for you?
this is what I've wrote in my initial post:
I know I can push figure 2 back behind figure 1 once I set the position however it does not look good or natural. Any ideas how to keep figure 2 behind the whole time?
Evan
Evan 2013-6-24
编辑:Evan 2013-6-24
Your post did not specify whether you meant you were bringing figure1 to the front after each iteration or at the very end. I assumed the latter.
What exactly do you mean "it does not look good or natural"? Is the moving figure somehow choppy, or is there a flicker? I find that, when I run the above code, the "animation" is smooth. Adding short pauses after each iteration also helps to make it a bit more fluid.
My appologies....
No, figure1 should stay in front of figure 2 the whole time figure 2 is moving to the right.
what I mean is the figure that I already have do look really choppy and yeah they do flicker.
Hmm, interesting. My way is certainly crude, though I don't experience any noticeable flicker due to the "bring to front." Perhaps Sean's solution will work for you.

请先登录,再进行评论。

solved it by doing the following:
figure1
t=figure2
figure(figure1)
for i=1:63
set(t,'Position',[])
end
the initial problem was that instead of setting the handle I was setting the position of the figure itself. Works now
Thank you for your help

类别

帮助中心File Exchange 中查找有关 Creating, Deleting, and Querying Graphics Objects 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by