accosin.m

来自「zemax与matlab调用程序」· M 代码 · 共 869 行 · 第 1/4 页

M
869
字号
%                    %Fixups.TiltDecAfter{ZEMAXSurface}  = sprintf('SCBD 2 1 2 %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));          
%                    end;
%       case 'GAMMA',
%                    [Token, Rest] = strtok(Rest, ' ,'); if (Token), TiltDec(7) = str2double(Token); end; % Gamma 
%                    if (UseCoordBreaks),
%                    else
%                    Fixups.TiltDecBefore{ZEMAXSurface} = sprintf('SCBD 1 %i %i %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(1), TiltDec(2), TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));
%                    %Fixups.TiltDecAfter{ZEMAXSurface}  = sprintf('SCBD 2 1 2 %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));          
%                    end;
      case 'DEC',  
                   [Token, Rest] = strtok(Rest, ' ,'); if (Token), TiltDec(4) = str2double(Token); end; % y decentre       
                   [Token, Rest] = strtok(Rest, ' ,'); if (Token), TiltDec(3) = str2double(Token); end; % x decentre  
                   if (UseCoordBreaks),
                     SurfLabel = zGetLabel(ZEMAXSurface - 1); % First get tha label at the previous surface
                     if (SurfLabel ~= (1000 + ACCOSSurface)), % Then the coordinate break has not yet been inserted
                       zInsertSurface(ZEMAXSurface); % Put in the coordinate break surface
                       zSetSurfaceData(ZEMAXSurface, 0, 'COORDBRK'); 
                       zSetLabel(ZEMAXSurface, 1000+ACCOSSurface);
                     else
                         ZEMAXSurface = ZEMAXSurface - 1; % Point to coordinate break for setting of parameters.
                     end;
                     zSetSurfaceParamVector(ZEMAXSurface, [0, TiltDec(3:7), TiltDec(1)]);
                     ZEMAXSurface = ZEMAXSurface + 1;
                   else
                   Fixups.TiltDecBefore{ZEMAXSurface} = sprintf('SCBD 1 %i %i %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(1), TiltDec(2), TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));
                   %Fixups.TiltDecAfter{ZEMAXSurface}  = sprintf('SCBD 2 1 2 %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));          
                   end;
%       case 'XD',   
%                    [Token, Rest] = strtok(Rest, ' ,'); if (Token), TiltDec(3) = str2double(Token); end; % x decentre 
%                    if (UseCoordBreaks),
%                    else
%                    Fixups.TiltDecBefore{ZEMAXSurface} = sprintf('SCBD 1 %i %i %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(1), TiltDec(2), TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));
%                    %Fixups.TiltDecAfter{ZEMAXSurface}  = sprintf('SCBD 2 1 2 %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));                    
%                    end;
%       case 'YD',   
%                    [Token, Rest] = strtok(Rest, ' ,'); if (Token), TiltDec(4) = str2double(Token); end; % y decentre 
%                    if (UseCoordBreaks),
%                    else
%                    Fixups.TiltDecBefore{ZEMAXSurface} = sprintf('SCBD 1 %i %i %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(1), TiltDec(2), TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));
%                    %Fixups.TiltDecAfter{ZEMAXSurface}  = sprintf('SCBD 2 1 2 %11.9f %11.9f %11.9f %11.9f %11.9f', TiltDec(3), TiltDec(4), TiltDec(5), TiltDec(6), TiltDec(7));                    
%                    end;
      case 'EOS', DummySurface = zFindLabel(9999); zDeleteSurface(DummySurface);
                  LenSys = zsGetSystem;
                  if (StopSurface == 0), StopSurface = 1; LenSys.stopsurf = StopSurface; zsSetSystem(LenSys); end;
                  % Copy penultimate surface shape to image surface
                  zsSetSurfaceData(LenSys.numsurfs, zsGetSurfaceData(LenSys.numsurfs - 1));
                  % and delete penultimate surface
                  zDeleteSurface(LenSys.numsurfs-1);
      case 'LIB', [Token, Rest] = strtok(Rest, ' ,');
                  if (strcmp(Token, 'PUT'))
                    if (strcmp(LibDumpPath, ''))
                      disp('LIB PUT Requested. Please Select a Suitable Place for the Library Dump.');
                      % LibDumpPath = uigetdir('c:\', 'Select Directory for Library Dump.');      % Won't compile for standalone mode
                      % LibDumpPath = uigetfolder('Select Directory for Library Dump.', 'c:\');   % Compiles, but won't run in standalone mode
                      [DummyFile, LibDumpPath] = uiputfile('Dummy.zmx', 'Navigate to Directory for Lib Dump'); % Use this workaround for the standalone version
                    end;
                    Reply = zPushLens(8);
                    while (Reply == -998) % Timeout on zPushLens
                        Answer = questdlg('ZEMAX is not responding to the Conversion Utility. ZEMAX may be waiting for your input. What would you like to do ?',...
                                          'ZEMAX Unresponsive. What Now ?', 'Continue', 'Abandon', 'Continue');
                        switch Answer
                            case 'Continue', Reply = zPushLens(5);
                            case 'Abandon', Status = -1; return;
                        end;
                    end;
                    Block = strtok(Rest, ' ,');
                    if (LITitle), 
                        CleanTitle = CleanFileName(LITitle);
                        LensFileName = [LibDumpPath '\' CleanTitle ' (Block ' Block ').zmx']; 
                    else LensFileName = ['Block ' Block '.zmx']; 
                    end;
                    zSaveFile([LensFileName '.tmp']);
                    DoFixups(LensFileName, Fixups);
                  end;
                  
      otherwise, Found = find(strcmp(UnknownDirectives, Directive));
                 if (Found)
                 else
                   disp(['Unknown Directives "' Directive '" will be Ignored.']);
                   UnknownDirectives = cat(1, UnknownDirectives, {Directive});
                 end;
    end;
    end;
end;
fclose(fID);

if (LITitle), 
  CleanTitle = CleanFileName(LITitle);
  LensFileName = [LibDumpPath '\' CleanTitle '.zmx']; 
else LensFileName = [LibDumpPath '\Lens.zmx']; 
end;
[FileName, LibDumpPath] = uiputfile(LensFileName, 'Save New ZEMAX Lens'); % Use this workaround for the standalone version
if (FileName)
    LensFileName = fullfile(LibDumpPath, FileName);
end;
Reply = zPushLens(8);
while (Reply == -998) % Timeout on zPushLens
  Answer = questdlg('ZEMAX is not responding to the Conversion Utility. ZEMAX may be waiting for your input. What would you like to do ?',...
                    'ZEMAX Unresponsive. What Now ?', 'Continue', 'Abandon', 'Continue');
  switch Answer
    case 'Continue', Reply = zPushLens(5);
    case 'Abandon', Status = -1; return;
  end;
end;
zSaveFile([LensFileName '.tmp']);
DoFixups(LensFileName, Fixups);
zLoadFile(LensFileName);
zWindowRestore(0);
zPushLens(10);
uiwait(msgbox('Leno File Processing Has Completed.', 'File Processing Completed', 'help', 'non-modal'));
% END OF function ReadACCOSFile
% -----------------------------------------------------------------------------------

function [ZEMAXout,ACCOSout] = NewSurface(ZEMAXin, ACCOSin)
zSetLabel(ZEMAXin, ACCOSin);
ZEMAXout = ZEMAXin + 1; ACCOSout = ACCOSin + 1;
zInsertSurface(ZEMAXout);


function CleanName = CleanFileName(DirtyName)
% Replace Bad characters with alternatives, remove leading and trailing blanks and trailing
% fullstops

BadChars = '/\:*?<>|,"';
AltChars = '#%;+&{}!-`';
DirtyName = deblank(fliplr(deblank(fliplr(DirtyName))));

for i = 1:size(BadChars,2)
    DirtyName(find(DirtyName==BadChars(i))) = AltChars(i);
end;

Len = size(DirtyName,2);
if (DirtyName(Len) == '.'), DirtyName = DirtyName(1:(Len-1)); end;
CleanName = DirtyName;


function Fixups = ReadOldConfigData(fID, InputFixups)
Fixups = InputFixups;
Config = 1;
disp('Processing Old Config Data.')
while 1
  CfgLine = fgetl(fID);
  if ~ischar(CfgLine), return; end; % (Unexpected) End of file
  CfgLine = upper(CfgLine); % Convert to upper case
  [Directive, Rest] = strtok(CfgLine, ' ,'); % Take the directive from the start of the line
  switch Directive
      case 'CFG', [Token, Rest] = strtok(Rest, ' ,'); Config = str2num(Token);
                  Fixups.NumberConfigs = max([Fixups.NumberConfigs, Config]);
      case 'SAY', ApertureData = zGetSystemAper; EPD = ApertureData(3);
                  Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                  Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('APER 0 1 %11.9f 0', EPD); 
                  [Token, Rest] = strtok(Rest, ' ,'); EPD = 2 * str2double(Token);
                  Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                  Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('APER 0 %i %11.9f 0',Config, EPD); 
      case 'SCY', [Token, Rest] = strtok(Rest, ' ,');
                  if (strcmp(Token, 'FANG'))
                      Angle = zGetField(2); Angle = Angle(2);
                      Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                      Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('YFIE 2 1 %11.9f 0', Angle); 
                      [Token, Rest] = strtok(Rest, ' ,');
                      Angle = str2double(Token);
                      Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                      Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('YFIE 2 %i %11.9f 0', Config, Angle); 
                  end;
      case 'CV', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 Curvature = zGetSurfaceData(ZEMAXSurface, 2);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('CRVT %i 1 %11.9f 0', ZEMAXSurface, Curvature);
                 [Token, Rest] = strtok(Rest, ' ,'); Curvature = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('CRVT %i %i %11.9f 0', ZEMAXSurface, Config, Curvature);
      case 'CC', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 Conic = zGetSurfaceData(ZEMAXSurface, 6);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('CONN %i 1 %11.9f 0', ZEMAXSurface, Conic);
                 [Token, Rest] = strtok(Rest, ' ,'); Conic = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('CONN %i %i %11.9f 0', ZEMAXSurface, Config, Conic);
      case 'AD', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 AD = zGetSurfaceParameter(ZEMAXSurface, 2);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR2 %i 1 %11.9f 0', ZEMAXSurface, AD);
                 [Token, Rest] = strtok(Rest, ' ,'); AD = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR2 %i %i %11.9f 0', ZEMAXSurface, Config, AD);
      case 'AE', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 AE = zGetSurfaceParameter(ZEMAXSurface, 3);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR3 %i 1 %11.9f 0', ZEMAXSurface, AE);
                 [Token, Rest] = strtok(Rest, ' ,'); AE = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR3 %i %i %11.9f 0', ZEMAXSurface, Config, AE);
      case 'AF', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 AF = zGetSurfaceParameter(ZEMAXSurface, 4);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR4 %i 1 %11.9f 0', ZEMAXSurface, AF);
                 [Token, Rest] = strtok(Rest, ' ,'); AF = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR4 %i %i %11.9f 0', ZEMAXSurface, Config, AF);
      case 'AG', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 AG = zGetSurfaceParameter(ZEMAXSurface, 2);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR5 %i 1 %11.9f 0', ZEMAXSurface, AG);
                 [Token, Rest] = strtok(Rest, ' ,'); AG = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('PAR5 %i %i %11.9f 0', ZEMAXSurface, Config, AG);
      case 'TH', [Token, Rest] = strtok(Rest, ' ,'); ACCOSSurface = str2num(Token); ZEMAXSurface = zFindLabel(ACCOSSurface);
                 Thickness = zGetSurfaceData(ZEMAXSurface, 3);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('THIC %i 1 %11.9f 0', ZEMAXSurface, Thickness);
                 [Token, Rest] = strtok(Rest, ' ,'); Thickness = str2double(Token);
                 Fixups.ConfigOperands = Fixups.ConfigOperands + 1;
                 Fixups.ConfigData{Fixups.ConfigOperands} = sprintf('THIC %i %i %11.9f 0', ZEMAXSurface, Config, Thickness);
      case 'EOS', return;
      otherwise, disp(['Config Directive "' Directive '" Ignored.']);
  end;
end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?