function lissasub(action)
% Lissajoufiguren darstellen

global faktor1 faktor2 nframes phimax lisamov

% zum Movie abspielen
switch(action)
case 'play'
   movie(lisamov);
   return;
end

% in allen anderen Faellen:
% ein wenig zu rechnen anfangen

% ---------- Tags anfinden -------------

h = findobj('Tag','lisa');
fig=findobj('Tag','fig');

slider1 = findobj('Tag','slider1');
w1 = get(slider1,'Value');
slider2 = findobj('Tag','slider2');
w2 = get(slider2,'Value');

ax1=findobj('Tag','axes1');
ax2=findobj('Tag','axes2');
hauptax=findobj('Tag','hauptax');

button1=findobj('Tag','button1');
button2=findobj('Tag','button2');
button3=findobj('Tag','button3');

menu1=findobj('Tag','menu1');
menu2=findobj('Tag','menu2');


% --------- diverse Anfangswerte fuer Berechnung und Movie -----------------
%Amplituden
x0=1;
y0=1;
% Anfangswinkel
phi0=pi/2;

% die maximale Genauigkeit wird im Hauptprogramm festgelegt

% die Omegas auf die max. Genauigkeit runden
w1=round(faktor1*w1)/faktor1;
w2=round(faktor2*w2)/faktor2;

% die Slider danach setzen
set(slider1,'Value',w1);
set(slider2,'Value',w2);

% Faktor f: fuer optimales Berechnungsintervall für t
% ist t zu kurz, dann ist die Figur nicht geschlossen, ist t zu groß dauert die
% Rechnung zu lange, hat t zuviele Schritte wird die Zeichnung nicht flüssig
% z.B. faktor1=20 deshalb weil 20*genau(=0.05) immer eine ganze Zahl gibt
f1=faktor1/gcd(faktor1*w1,faktor1);
f2=faktor2/gcd(faktor2*w2,faktor2);
f=f1*f2/gcd(f1,f2);

%t=[0:pi/300*f2*f1:f1*f2*2*pi];
t=[0:pi/300*f:f*2*pi];


switch action
% moegliche actions:
% rechnen, textw1 textw2 (Beschriftungen setzen), lismov (Movie machen),
% setframe (Framanzahl), setphi (Rechendauer), play (Movie abspielen)   

%---------------------------------------
case 'rechnen'
   
   % alle Buttons etc disablen
	set(slider1,'Enable','off');
   set(slider2,'Enable','off');
   set(button1,'Enable','off');
   set(button2,'Enable','off');
   set(button3,'Enable','off');
   set(menu1,'Enable','off');
	set(menu2,'Enable','off');

      
   if w1==w2
      w1=1;w2=1;
	end
   
   % zunaechst eine Zeichnung machen
   x=sin(w1*[0:pi/100:2*pi]);
	y=sin(w2*[pi/2:pi/100:5*pi/2]);
   h=plot(x,y,'Parent',hauptax);
   
for phi = phi0:pi/200:phimax*pi+phi0
   x=x0*sin(w1*t);
   y=y0*sin(w2*t+phi);
   set(h,'XData',x,'YData',y,'EraseMode','background');
   % p.s. in manchen faellen ist Erasemode 'background' guenstiger als 'xor'
   drawnow;
end

	% alles wieder enablen
	set(slider1,'Enable','on');
	set(slider2,'Enable','on');
   set(button1,'Enable','on');
   set(button2,'Enable','on');
   set(button3,'Enable','on');
   set(menu1,'Enable','on');
	set(menu2,'Enable','on');



%-------------------------------------------------

case 'textw1'
   
   % runden und slider setzen passiert im Hauptteil
     
   % Dummy-Achsen für die Slider-Beschriftung
   axes(ax1);
   title(['\omega_1=',num2str(w1)]);
 
 
case 'textw2'
   
   % runden und slider setzen passiert im Hauptteil
     
   % Dummy-Achsen für die Slider-Beschriftung
   axes(ax2);
   title(['\omega_2=',num2str(w2)]);
   
%----------------------------------------------------   

case 'lismovie'
   
   % alle Buttons etc disablen
	set(slider1,'Enable','off');
   set(slider2,'Enable','off');
   set(button1,'Enable','off');
   set(button2,'Enable','off');
   set(button3,'Enable','off');
	set(menu1,'Enable','off');
	set(menu2,'Enable','off');

  
   axes(hauptax);
   
	lisamov = moviein(nframes);
   
   %Anfangswinkel
   phi=pi/2;
   
   % wieder einen ersten Plot machen...
	x=sin(w1*[0:pi/100:2*pi]);
	y=sin(w2*[pi/2:pi/100:5*pi/2]);
   h=plot(x,y,'Parent',hauptax);
   title('Lissajoufiguren mittels Phasenshift','Fontsize',18);
   
   % t neu belegen (feiner=2000 Werte)
	t=[0:pi/2000*f:f*2*pi];

   for k=1:nframes
      phi=phi+pi/200; 
      
      x=x0*sin(w1*t);
   	y=y0*sin(w2*t+phi);
      set(h,'XData',x,'YData',y,...   
      'Color',[abs(x(k)) abs(y(k)) 0.5]);
   	%'Color',[abs(x(k)) abs(y(k*4)) abs(x(200))]);
   	 
      lisamov(:,k)=getframe;
      
   end
   
   
   % alles wieder enablen
	set(slider1,'Enable','on');
	set(slider2,'Enable','on');
   set(button1,'Enable','on');
   set(button2,'Enable','on');
   set(button3,'Enable','on');
	set(menu1,'Enable','on');
	set(menu2,'Enable','on');
   
   
   %Movie in neuem Fenster abspielen
   
   fig2=figure(2); clf;
   set(fig2,'Position',[50 30 500 500],'Resize','off','MenuBar','none');
   
   axfig2 = axes('Parent',fig2,'position',[0.1 0.2 0.75 0.75]);
   axis([-1.1 1.1 -1.1 1.1]);
   
   %  Movie Button Control
	button4 = uicontrol('Interruptible','off','BusyAction','cancel',...
   	'Style','pushbutton','Tag','button4', ...
   	'Callback','lissasub play', ...
   	'String','noch einmal!',...
   	'FontSize',14,...
   	'Units','normalized', ...
   	'Position',[0.35 0.07 0.27 0.05] ...
   	);

   
	movie(lisamov);
   
   
%------------------------------------------------------

case 'setframe'
   
   prompt='Anzahl der zu berechnenden Frames:';
   title='Frames für das Movie';lineNo=1;defAns={num2str(nframes)};
   answer=inputdlg(prompt,title,lineNo,defAns);
   if ~isempty(answer)
      nframes=str2num(answer{1});   
   end
   
case 'setphi'
   
   prompt='Rechendauer in n*pi:';
   title='Rechendauer';lineNo=1;defAns={num2str(phimax)};
   answer=inputdlg(prompt,title,lineNo,defAns);
   if ~isempty(answer)
      phimax=str2num(answer{1});   
   end

% case play : siehe ganz oben

end  % von switch
 


