function UpdateSliceOMatic(X,hSlico)
% This should get the data you want:
% Copyright 2004-2010 The MathWorks, Inc.
if nargin<2
hSlico=gcf;
else %%RAB%%
figure(hSlico) %%RAB%%
end
D = getappdata(hSlico,'sliceomatic');
D.data = X;
setappdata(hSlico,'sliceomatic',D)
% Get axes children objects that are surfaces
ch = findobj('Type','Surface');
% If no slice then no need to update data in the image
if isempty(ch)
return
end
% Loop thorugh slices
for i=1:length(ch)
mySlice = ch(i);
% Get the X, Y, Z Data
XData = get(mySlice,'XData');
YData = get(mySlice,'YData');
ZData = get(mySlice,'ZData');
% Find out which one doesn't change by finding the differene in X,Y,Z values
diffxyz = [all(diff(XData(:))==0) all(diff(YData(:))==0) all(diff(ZData(:))==0)];
[nodiff, i] = max(diffxyz);
% Make updates to appropriate slice
switch i
case 1
slice = round(XData(1));
set(mySlice,'CData',squeeze(X(:,slice,:)))
case 2
slice = round(YData(1));
set(mySlice,'CData',squeeze(X(slice,:,:)))
case 3
slice = round(ZData(1));
set(mySlice,'CData',squeeze(X(:,:,slice)))
end
end
% % The subroutine is attached. It takes the 3D image matrix as its input. So
% % if using sliceomatic you would do the following:
% %
% % 1. Read Images
% % 2. Manipulate
% % 3. Call sliceomatic(ImageData)
% % 4. Make some changes (i.e. ImageData(ImageData<100)=0
% % 5. call mySubRoutine(ImageData)
% %
% % Everything should be updated and it runs fast
% %
% % --L--
% %
% % -----Original Message-----
% % From: Robert Bemis
% % Sent: Friday, February 20, 2004 2:26 PM
% % To: Laurens Schalekamp
% % Subject: movtext
% %
% % Please enjoy file: movtext
% % courtesy of rbemis@mathworks.com