Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Update Plot frame from slider call back

Asked by Lawson Hoover on 8 Dec 2012

I am trying to update an animated plot with a slider. Such that the value of the slider changes the plot to that frame in the animation. My code for the movie is:

   plot(x,y,'--r','LineWidth',3);  % original position
   xlabel('Beam Length (in.)','Color','g');
  ylabel(bstr,'Color','g');
  ylim([-(Beam.y(10)) max(Beam.y)]);
  title(astr,'Color','y','fontweight','b');
  set(S.ax,'YDir','reverse');
  set(S.ax,'XGrid','on');
  set(S.ax,'YGrid','on');
  xZero =0;   
  yZero = 0;
  hold on                                                 % hold the orginal    position plot and the axes properties
   M(100) = struct('cdata',[], 'colormap', []);            % preinitialization
   ht = plot(xZero,yZero,'-b','linewidth',2);              % new position
   for i = 1:100                                           % Plots each new position on the graph animating the process
    if i == 1
        set(ht ,'XDataSource','Beam.x')
        set(ht,'YDataSource','Beam.y')
    end
  set(ht,'XData',Beam.x(1:i))
  set(ht,'YData',Beam.y(1:i))
  M(i) = getframe(gcf);   
  end
   legend('Without Deflection','With Deflection');
   hold off        

I then have a slider call back to gather all of the info. _Every time_ I use the slider though I get the error: Undefined function of variable 'ht' The code for my call back is:

function [] = sl_call_video(varargin)
%%%%%%%%%%%%%% Callback for the edit box and slider. %%%%%%%%%%%%%%%%%%%%%%
[h,S] = varargin{[1,3]};               % Get calling handle and structure.
SL = get(S.sl,{'min','value','max'});  % Get the slider's info.
E = str2double(get(h,'string'));       % Numerical edit string.
%%%%%%%%%%%%%%%%%%%%%%%%% Actual Process %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
switch h  % Who called?
    case S.ed(2)
        if E >= SL{1} && E <= SL{3}
            set(S.sl,'value',E)       % E falls within range of slider.
        else
            set(S.ed(2),'string',SL{2})     % User tried to set slider out of range. 
        end    
    case S.sl
        set(S.ed(2),'string',round(SL{2}))% Set edit to current slider.
        set(ht,'XData',Beam.x(1:SL{2}))
        set(ht,'YData',Beam.y(1:SL{2})) 
        refreshdata
        drawnow
    otherwise
end
end

0 Comments

Lawson Hoover

Products

No products are associated with this question.

0 Answers

Contact us