0001 function [xref,zref] = atreforbit(ring)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 xzc=[0;0];
0012 slope=[0;0];
0013 [xx,zz]=cellfun(@incr,ring);
0014 xref=[0;xx];
0015 zref=[0;zz];
0016
0017 function varargout=incr(elem)
0018
0019
0020
0021 if isfield(elem,'T1') && ~isfield(elem,'hideT1')
0022 hvkick(elem.T1(:));
0023 end
0024 if isfield(elem,'Length')
0025 xzc=xzc+slope*elem.Length;
0026 end
0027 if isfield(elem,'T2') && ~isfield(elem,'hideT2')
0028 hvkick(elem.T2(:));
0029 end
0030
0031
0032
0033 varargout=num2cell(xzc');
0034 end
0035
0036
0037
0038
0039
0040 function hvkick(T1)
0041 xzc=xzc-T1([1 3]);
0042 slope=slope-tan(T1([2 4]));
0043 end
0044 end
0045