<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/240320</link>
    <title>MATLAB Central Newsreader - Interaction of graphics object properties EraseMode and Visibility</title>
    <description>Feed for thread: Interaction of graphics object properties EraseMode and Visibility</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Wed, 03 Dec 2008 02:37:02 -0500</pubDate>
      <title>Interaction of graphics object properties EraseMode and Visibility</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/240320#614640</link>
      <author>Ryan Ollos</author>
      <description>I have a GUI with two overlaid &quot;pages&quot;.  On one page is a sweeping display that displays data in real time, and on the other page is a set of edit uicontrols for user data entry.  The parent for the sweeping display axes is a uipanel, and the parent for the uicontrols is another uipanel.  The uipanels are coincident, and a togglebutton determines which will be displayed.  I display one and hide the other by setting the uipanel's visibillity property to On and Off, respectively.&lt;br&gt;
&lt;br&gt;
The sweeping display is an axes with a hundreds of image objects oriented vertically.  Each image represents a column of data (i.e. a vertical line) in the display.  I can then update the CData of a single column during each step of the sweep, rather than refreshing a single image that occupies the entire axes (which is an operation that is too slow to generate smooth updates at a good framerate).&lt;br&gt;
&lt;br&gt;
So, the object heircharcy looks like this:&lt;br&gt;
figure&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uipanel1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axes&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uipanel2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uicontrol&lt;br&gt;
&lt;br&gt;
In order to get the sweeping display to update quickly, I need to set the EraseMode property of the image objects to none.  This works well because the object never needs to be erased ... during a refresh of that line the CData is updated.&lt;br&gt;
&lt;br&gt;
The problem is that with EraseMode = 'none', the image objects are visible even when the ancestor uipanel is set to Visible = 'off'.  They are not immediately visible when I hide the panel, but become visible as their CData is updated.&lt;br&gt;
&lt;br&gt;
The net effect is that the vertical lines of the sweeping display are drawn over the top of the data input uicontrols.  I can fix this by setting EraseMode = 'normal', but then the display updates much more slowly.  EraseModes 'xor' and 'background' have the same problem as 'none'.&lt;br&gt;
&lt;br&gt;
Is this a bug, or expected behavior?  My renderer is 'painters'.&lt;br&gt;
&lt;br&gt;
One of the questions I have is whether I should be updating the CData of the images when they are not visible.  I had thought this would not be a problem since nothing should be rendered when the object is invisible, even if the CData is updated, right?.  The problem with not updating them when they are not visible is that I would need to keep a separate buffer and update all the lines each time the sweeping display is made visible, which I can do, but I'd like to get more insight first.&lt;br&gt;
&lt;br&gt;
I'll see if I can create a simplifed version of the GUI that shows this behavior, and post that.</description>
    </item>
    <item>
      <pubDate>Wed, 03 Dec 2008 08:01:04 -0500</pubDate>
      <title>Re: Interaction of graphics object properties EraseMode and Visibility</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/240320#614672</link>
      <author>Ryan Ollos</author>
      <description>Here is an example of what I described above.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
function h = sweeping_display_nxImages_multiPanels&lt;br&gt;
% This is an example of a sweeping display that can be &quot;hidden&quot; by changing&lt;br&gt;
% the state of a togglebutton.&lt;br&gt;
% &lt;br&gt;
% The sweeping display is an axes with nx vertical lines (image handle&lt;br&gt;
% graphics objects).  The vertical lines are updated as the sweep bar&lt;br&gt;
% passes across the display.  The nx vertical lines can be updated&lt;br&gt;
% indepdently, and only two are updated on each step of the sweep.  This&lt;br&gt;
% reduces the rendering performance compared to updating two columns of &lt;br&gt;
% the CData of a single image object, which causes all the data in the axes&lt;br&gt;
% to be refreshed.&lt;br&gt;
&lt;br&gt;
% The problem with this example is that the image object are drawn even&lt;br&gt;
% when the visible property of their parent uipanel is 'off', when their&lt;br&gt;
% EraseMode = 'none'.  Setting the EraseMode = 'normal' fixes this problem,&lt;br&gt;
% but the image renders more slowly and flickers.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IMAGE_ERASEMODE = 'none';&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RENDERER = 'painters';&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
%% --- display parameters&lt;br&gt;
% Each 'line' is actually an image handle object of width dx&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;displayon = 1;      % ON=1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sweeptime = 4;      % time to sweep across spectral display (s)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fdisp = 60;         % number of lines displayed per second (Hz)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nx = round(Fdisp*sweeptime);   % number of lines in the display&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dx = 2;             % width of line&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ny = 128;           % number of points in the Y-direction&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nframes = 5;        % number of times the display sweeps through &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% pixelsperline = 1;    % display size across screen, per displayed line&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
%% --- Initialize the sweeping display window&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tdisp = 1/Fdisp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% generate axes vectors of time points representing fast- and slow-time points&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X = (0:nx)*Tdisp;      % times for each displayed line, on x-axis of display&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Y = 1:ny;    &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%specimage = zeros(ny, nx);	% initialize display image matrix&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;specimage = repmat(ceil((1:dx*nx)/dx), [ny 1]); %each vertical line is a unique index into the colormap&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zerosline = zeros(ny, dx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onesline = ones(ny, dx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% Initialize display figure&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.figure = figure;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.figure, 'ColorMap', colormap(gray(2)), ... %colormap(gray(nx)), ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'DoubleBuffer', 'on', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Renderer', RENDERER);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.uipanel1 = uipanel('Parent', h.figure, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Position', [0 0.05 1 0.95], ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Visible', 'on');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.uipanel2 = uipanel('Parent', h.figure, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Position', [0 0.05 1 0.95], ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Visible', 'off');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.togglebutton = uicontrol('Parent', h.figure, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Units', 'normalized', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Style', 'togglebutton', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Value', 0, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'String', 'Hide Sweeping Display', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Position', [0 0 0.20 0.05]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% Initialize display axes&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CLim = [1 nx]; %index directly into colormap&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.axes = axes('Parent', h.uipanel1, ... %'Units', 'pixels', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'CLim', CLim, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'XLim', [X(1) X(end)], ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'YLim', [Y(1) Y(end)], ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'XTickLabel', {''}, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'YTickLabel', {''});&lt;br&gt;
%     Position = get(h.axes, 'Position');   %set axes size = size(CData) for direct pixel mapping&lt;br&gt;
%     Position(3:4) = [nx ny];&lt;br&gt;
%     set(h.axes, 'Position', Position);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title (['Sweeping Diplay --- [nx  ny  Fdisp]  ' num2str([nx ny Fdisp])])&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xlabel('Time (s)')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ylabel('Number of points')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;colorbar;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% Initialize image lines&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.image = nan(nx, 1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for i=1:nx&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.image(i) = image('XData', X(i:i+1), ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'YData', Y, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'CData', specimage(:,i*dx-1:i*dx), ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'CDataMapping', 'direct', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Parent', h.axes, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'EraseMode', IMAGE_ERASEMODE, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'BusyAction', 'cancel');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.togglebutton, 'Callback', {@togglePanels_Callback, h});&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;drawnow;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
%% Display loop&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iline = dx-1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delay = nan(nframes*nx,1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for frame = 1:nframes &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% disp (['     *** Frame ' num2str(frame) ])		&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tic&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for nn = 1:nx	% line loop&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iline0 = mod(iline,dx*nx)+1;     % current display line, with wrap around&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iline1 = mod(iline-dx,dx*nx)+1;     % next line (current +1)&lt;br&gt;
%             iline2 = mod(iline+1,nx)+1;     % current+2&lt;br&gt;
%             iline3 = mod(iline+2,nx)+1;     % current+3&lt;br&gt;
%             iline0 = mod(iline-2,nx)+1;     % previous line (current-1)&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% add the lines to the display &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;specimage(:,iline0-dx+1:iline0) = CLim(2)*onesline;       &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;specimage(:,iline1-dx+1:iline1) = zerosline;    % position bar&lt;br&gt;
%                 specimage(:,iline2:iline2+1) = 0.5*onesline;    % dimming ahead      &lt;br&gt;
%                 specimage(:,iline3:iline3+1) = 0.3*onesline;       &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;%set(h,'CData',specimage)    % write to display           &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.image(iline0/dx), 'CData', specimage(:,iline0-dx+1:iline0));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.image(iline1/dx), 'CData', specimage(:,iline1-dx+1:iline1));&lt;br&gt;
%                 set(h.image(iline2), 'CData', specimage(:,iline2:iline2+1));&lt;br&gt;
%                 set(h.image(iline3), 'CData', specimage(:,iline3:iline3+1));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;k = (frame-1)*nx+nn;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delay(k) = nn*Tdisp-toc;       % if display is faster than the desired rate, wait&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if Delay(k)&amp;gt;0.001, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pause(Delay(k)),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% disp ([ num2str(Delay)] ); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end	&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% disp([' Delay = ' num2str(Delay) '   Frame = ' num2str(frame) '    Line = ' num2str(iline) ])&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iline = iline + dx;			% iline indexes the current line in the sweeping display                &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end          &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
%% end Frame Loop&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;figure;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subplot(3,1,1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t = (1:nframes*nx)/Fdisp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plot(t, Delay);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title('Time series of Delay');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subplot(3,1,2);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hist(Delay);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title('Histogram of Delay');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subplot(3,1,3);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plot(t, cumsum(Delay));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title('Cumulative sum of time series of Delay');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fprintf(1, 'Mean Delay is %.4f\n', mean(Delay));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
function togglePanels_Callback(hObject, eventdata, h)&lt;br&gt;
&lt;br&gt;
if get(hObject, 'Value')&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.uipanel1, 'Visible', 'off');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.uipanel2, 'Visible', 'on');&lt;br&gt;
else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.uipanel1, 'Visible', 'on');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.uipanel2, 'Visible', 'off');&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
% [EOF]</description>
    </item>
    <item>
      <pubDate>Wed, 03 Dec 2008 19:18:04 -0500</pubDate>
      <title>Re: Interaction of graphics object properties EraseMode and Visibility</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/240320#614856</link>
      <author>Ryan Ollos</author>
      <description>A fix I have found is to explicity set the Visible property on all children of the uipanel to 'off' when the uipanel's Visible property is set to 'off'.&lt;br&gt;
&lt;br&gt;
This seems like a bug, similar to what is reported here: &lt;a href=&quot;http://www.mathworks.com/support/bugreports/details.html?rp=308433&quot;&gt;http://www.mathworks.com/support/bugreports/details.html?rp=308433&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
When the Visible property of the uipanel is set to off, then graphics object children of the uipanel are not visible, provided their CData is not being changed, but their Visible property is still 'on' when queried.  This behavious also seems odd to me.  For example, referring again to the object heirarchy:&lt;br&gt;
&lt;br&gt;
figure&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uipanel1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;axes&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uipanel2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uicontrol&lt;br&gt;
&lt;br&gt;
&amp;gt;&amp;gt; get(h.uipanel1, 'visible')&lt;br&gt;
ans =&lt;br&gt;
off&lt;br&gt;
&amp;gt;&amp;gt; get(h.uipanel2, 'visible')&lt;br&gt;
ans =&lt;br&gt;
on&lt;br&gt;
&amp;gt;&amp;gt; get(h.axes, 'visible')&lt;br&gt;
ans =&lt;br&gt;
on&lt;br&gt;
&amp;gt;&amp;gt; get(h.image, 'visible')&lt;br&gt;
ans = &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'on'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'on'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'on'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;....&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'on'&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Fortunately, their is a single line fix:&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.uipanel1, 'Visible', 'off');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(h.uipanel2, 'Visible', 'on');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set(findall(h.uipanel1), 'Visible', 'off');  %this is a workaround for a bug</description>
    </item>
  </channel>
</rss>

