%UPDATECD is a subroutine of "fractory.m" which transforms %the input from any current-ifs-altering command into a %recomputation of the 10-vector "curdat" which defines the %ifs currently being modified. curdat(10) is the instruction %which tells UPDATECD how to modify itself. It also makes %the necessary changes to the corresponding uicontrol %parameters. %NO CHANGE IN CURDAT %if curdat(11)==-3 %COPY FUNCTION if curdat(11)==-2 axes(Gaxes) fcns(n)=line(curdat([7 1 3 5 7]),curdat([8 2 4 6 8])); %NEW FUNCTION elseif curdat(11)==-1 curdat=[0 1 0 0 1 0 1 1 0 1 -1]'; fcnon(n)=1; axes(Gaxes) fcns(n)=line(curdat([7 1 3 5 7]),curdat([8 2 4 6 8])); %ROTATE elseif curdat(11)==0 phi=(theta-curdat(9))*pi/180; for nn=1:3 curdat((2*nn-1):(2*nn)) = [cos(phi) -sin(phi);sin(phi) cos(phi)]*... (curdat((2*nn-1):(2*nn))-curdat(3:4)) + curdat(3:4); end %UPDATE X elseif curdat(11)==1 curdat(1:2)=newv; %UPDATE Y elseif curdat(11)==2 curdat(3:4)=newv; %UPDATE Z elseif curdat(11)==3 curdat(5:6)=newv; %SHIFT elseif curdat(11)==4 delv=newv-curdat(3:4); for nn=1:3 curdat((2*nn-1):(2*nn))=curdat((2*nn-1):(2*nn))+delv; end %RESCALE elseif curdat(11)==5 phi=max(scale,1e-6)/curdat(10); for nn=1:3 curdat((2*nn-1):(2*nn)) = [phi 0;0 phi]*... (curdat((2*nn-1):(2*nn))-curdat(3:4)) + curdat(3:4); end %FLIP | elseif curdat(11)==6 curdat([1 3 5])=ones(3,1)-curdat([1 3 5]); %FLIP / elseif curdat(11)==6.5 curdat(1:6)=curdat([2 1 4 3 6 5]); %FLIP - elseif curdat(11)==7 curdat([2 4 6])=ones(3,1)-curdat([2 4 6]); %FLIP \ elseif curdat(11)==7.5 curdat(1:6)=ones(6,1)-curdat([2 1 4 3 6 5]); %CHANGE FUNCTION elseif curdat(11)==8 newv=get(fcns(n),'XData'); curdat([1 3 5])=newv(2:4); newv=get(fcns(n),'YData'); curdat([2 4 6])=newv(2:4); %ANGLE XYZ elseif curdat(11)==9 phi=(theta+curdat(9))*pi/180; length=norm(curdat(1:2)-curdat(3:4)); curdat(1)=curdat(3)+length*cos(phi); curdat(2)=curdat(4)+length*sin(phi); %LENGTH YZ elseif curdat(11)==10 phi=(pi/180)*curdat(9); curdat(5)=curdat(3)+length*cos(phi); curdat(6)=curdat(4)+length*sin(phi); %LENGTH XY elseif curdat(11)==10.5 phi=atan2(curdat(2)-curdat(4),curdat(1)-curdat(3)); curdat(1)=curdat(3)+length*cos(phi); curdat(2)=curdat(4)+length*sin(phi); %EDIT AX+B elseif curdat(11)==11 curdat(1)=eval(get(viewbox(4),'String'))+eval(get(viewbox(8),'String')); curdat(2)=eval(get(viewbox(6),'String'))+eval(get(viewbox(9),'String')); curdat(3)=eval(get(viewbox(8),'String')); curdat(4)=eval(get(viewbox(9),'String')); curdat(5)=eval(get(viewbox(3),'String'))+eval(get(viewbox(8),'String')); curdat(6)=eval(get(viewbox(5),'String'))+eval(get(viewbox(9),'String')); end %UPDATE CURDAT([7,8,9,10]) curdat(7:8)=curdat(5:6) + curdat(1:2) - curdat(3:4); curdat(9)=fixatan2((curdat(5)-curdat(3)),(curdat(6)-curdat(4))); curdat(10)=sqrt(abs((curdat(5)-curdat(3))*(curdat(2)-curdat(4))-... (curdat(1)-curdat(3))*(curdat(6)-curdat(4)))); if curdat(10)==0 curdat(10)=1e-10; end theta=fixatan2((curdat(1)-curdat(3)),(curdat(2)-curdat(4))); theta=mod(theta-curdat(9),360); length=[norm(curdat(5:6)-curdat(3:4)) norm(curdat(1:2)-curdat(3:4))]; length=length*[XY0YZ1 ; mod(XY0YZ1+1,2)]; curdat=round(curdat*1e12)/1e12; %Finally, all relevant object values and strings are updated to fit %the new values of "curdat". if viewon==0 set(RTsldr,'Value',curdat(9)); set(RTedtx,'String',rnd2str(curdat(9),1)); set(Sxsldr,'Value',curdat(3)); set(Sysldr,'Value',curdat(4)); set(Sxedtx,'String',rnd2str(curdat(3),.001)); set(Syedtx,'String',rnd2str(curdat(4),.001)); set(SCedtx,'String',rnd2str(curdat(10),.001)); set(SCsldr,'Value',curdat(10)); set(OPsldr,'Value',theta); set(OPedtx,'String',rnd2str(theta,1)); set(LEedtx,'String',rnd2str(length,.001)); set(LEsldr,'Value',length); elseif viewon==1 set(viewbox(3),'String',rnd2str(curdat(5)-curdat(3),.001)); set(viewbox(4),'String',rnd2str(curdat(1)-curdat(3),.001)); set(viewbox(5),'String',rnd2str(curdat(6)-curdat(4),.001)); set(viewbox(6),'String',rnd2str(curdat(2)-curdat(4),.001)); set(viewbox(8),'String',rnd2str(curdat(3),.001)); set(viewbox(9),'String',rnd2str(curdat(4),.001)); end set(X2sttx,'String',rnd2str(curdat(1),.001)); set(X3sttx,'String',rnd2str(curdat(2),.001)); set(Y2sttx,'String',rnd2str(curdat(3),.001)); set(Y3sttx,'String',rnd2str(curdat(4),.001)); set(Z2sttx,'String',rnd2str(curdat(5),.001)); set(Z3sttx,'String',rnd2str(curdat(6),.001)); set(W2sttx,'String',rnd2str(curdat(7),.001)); set(W3sttx,'String',rnd2str(curdat(8),.001)); for nn=1:3 newv=chgcrd(curdat((2*nn-1):(2*nn))',axpos,1)'-[.02 .02]; set(curpts(nn),'Position',[newv .04 .04]); end newv=(curdat(1:2)+curdat(5:6))/2; newv=chgcrd(newv',axpos,1)'-[.02 .02]; set(curpts(4),'Position',[newv .04 .04]); set(fcns(n),'XData',curdat([7 1 3 5 7])); set(fcns(n),'YData',curdat([8 2 4 6 8])); if any(curdat(11)==[-3 -2 -1 8]) set(FS2sttx,'String',num2str(K)); set(FSsldr,'Max',K,'Value',n); set(FS4sttx,'String',num2str(n)); if oldn~=0 if fcnon(oldn)==1 set(fcns(oldn),'LineStyle','- -','Color','w'); else set(fcns(oldn),'Visible','off'); end end set(fcns(n),'LineStyle','-','Color','m','Visible','on') if fcnon(n)~=0.5 set(FOchbx,'Value',fcnon(n)); end end if any((curdat(1:8)<0)|(curdat(1:8)>1)) fcnon(n)=0.5; set(FOchbx,'Value',0); elseif fcnon(n)==0.5 fcnon(n)=1; set(FOchbx,'Value',1); end return %if new box not in bounds, turn off