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 + -
显示快捷键?