ZEMAX | 了解 ZOS-API 的主要接口——MATLAB

本文对 ZOS-API 的主要接口 (Interfaces) 进行了介绍。它遵循编程(Programming)选项卡>关于 ZOS-API(About the ZOS-API) 下的帮助文件(Help File)中描述的内容。帮助文件中对每个接口都有对应的介绍,建议您阅读这些内容。本文将着重介绍其中重要的部分,您将有机会对照练习。本文是对应于 MATLAB 编写的。
简介
IZOSAPI_Application TheApplication
定义
如何使用TheApplication
如下为一些实用的命令:
关闭应用程序:
TheApplication.CloseApplication();
检查您的授权版本:
TheApplication.LicenseStatus;
检查您的授权模式:
TheApplication.Mode;
将 OpticStudio 的语言切换为英语:
TheApplication.Preferences.General.Language=ZOSAPI.Preferences.LanguageType.English;
获取示例文件夹 (Sample Files folder)的完整路径:
sampleDir = TheApplication.SamplesDir
IOpticalSystem PrimarySystem
定义
TheSystem = TheApplication.PrimarySystem;
如何使用
PrimarySystem
一些关于 TheSystem 进行的实用操作如下所示:
转换至非序列模式(Non-sequential Mode):
TheSystem.MakeNonSequential();
转换至序列模式(Sequential Mode):
TheSystem.MakeSequential();
下载.ZMX文件:
testFile = System.String.Concat(sampleDir, '\Sequential\Objectives\Double Gauss 28 degree field.zmx');TheSystem.LoadFile(testFile, false);
保存已存在的系统(.ZMX):
TheSystem.Save();
将当前系统保存为一个新的文件:
TheSystem.SaveAs(copyFile);
创建新的(默认的)镜头数据文件(LENS.ZMX):
TheSystem.New(false);
关闭当前已打开的系统且不保存:
TheSystem.Close(false);
ISystemData SystemData
定义
TheSystemData = TheSystem.SystemData;
如何使用
TheSystemData
如下为一些可改变 TheSystemData 中设置的实用操作:
更改下拉菜单中的设置:OpticStudio 下拉菜单中的设置只能获取预设值的列表。在 ZOS-API 中,这些列表以枚举的形式公开。例如,要将系统孔径类型更改为入瞳直径(Entrance Pupil Diameter),请选择 EntrancePupilDiameter 作为枚举类型,它是 ZemaxApertureType 的一种。
TheSystemData.Aperture.ApertureType=ZOSAPI.SystemData.ZemaxApertureType.EntrancePupilDiameter;
更改数值设置:
TheSystemData.Aperture.ApertureValue=20;
更改字符设置:
sysTitleNotes = TheSystem.SystemData.TitleNotes;
设置膜层文件并重新载入:
sysFiles = TheSystem.SystemData.Files; sysFiles.CoatingFile = 'COATING.DAT';TheSystem.SystemData.Files.ReloadFiles();
添加标题:
sysTitleNotes.Title = 'Add here the title';
勾选或不勾选复选框。True 代表着勾选这个选项,False代表不勾选:
TheSystemData.Aperture.AFocalImageSpace = true;
如下为一些可改变视场和波长的实用选项:
访问视场:
sysField = TheSystem.SystemData.Fields;
访问
波长:
sysWave= TheSystem.SystemData.Wavelengths;
添加新的视场
X=0,Y=5.0
,视场权重为
1.0
:
NewField_2 = sysField.AddField(0,5.0,1.0);
添加新的波长
0.6328mm
,权重为
1.0
:
NewWave_2 = sysWave.AddWavelength(0.6328,1.0);
将视场
1
的值改为
X=1,Y=2.0
,视场权重为
0.5
:
field1 = sysField.GetField(1); field1.X = 1.0; field1.Y = 2.0; field1.Weight = 0.5;
将波长1改为0.55mm:
TheSystemData.Wavelengths.GetWavelength(1).Wavelength = 0.55;
设置波长1 为主波长:
TheSystemData.Wavelengths.GetWavelength(1).MakePrimary();
将视场类型 (Field Type) 改为物高 (Object Height):
sysField.SetFieldType(ZOSAPI.SystemData.FieldType.ObjectHeight);
将归一化 (Normalization) 改为径向(Radial):
sysField.Normalization= ZOSAPI.SystemData.FieldNormalizationType.Radial;
使用视场向导 (Field Wizard) 从0到10添加3个等效的Y视场:
sysField.ApplyFieldWizard(ZOSAPI.SystemData.FieldPattern.EqualAreaY,3,10,0,0,1,true,false);
最后三个参数 (1,true, false)表示:从第1行开始,分别检查覆盖 (Overwrite) 是否选中和使用拾取 (Use pickups) 是否取消选中。使用正交算法 (Quadrature) 从0.486mm到0.656mm范围内定义6个波长:
TheSystemData.Wavelengths.GaussianQuadrature(0.486,0.656,ZOSAPI.SystemData.QuadratureSteps.S6);
使用预置 (Preset) 选项定义波长:
TheSystemData.Wavelengths.SelectWavelengthPreset(ZOSAPI.SystemData.WavelengthPreset.FdC_Visible);
读取视场的数目:
num_fields=TheSystem.SystemData.Fields.NumberOfFields;
分析
定义
TheAnalyses = ThePrimarySystem.Analyses;
如何使用 TheAnalyses
TheAnalyses 可以访问所有的分析选项。
如下为一些运行分析选项卡的实用命令:
执行一次分析:
TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM AnalysisType)
例如,执行一次光线光扇图
分析:TheRayFan = TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.RayFan);
一些分析选项可以用它们自身的功能打开:
TheRayFan = TheSystem.Analyses.New_RayFan();
检查分析选项是否已有正在应用的设置:
TheRayFan.HasAnalysisSpecificSettings;
获取
设置:
TheRayFan_Settings = TheRayFan.GetSettings();
更改
已经应用的设置。例如,更改光线数目:
TheRayFan_Settings.NumberOfRays = 100;
改变波长:TheRayFan_Settings.Wavelength.SetWavelengthNumber(0);
使用 ModifySettings 更改还未应用的设置:
analysisSettings.SaveTo(cfgFile);
analysisSettings.ModifySettings(cfgFile, 'SHA_ROTX', '90');
analysisSettings.LoadFrom(cfgFile);
System.IO.File.Delete(cfgFile);应用设置:
TheRayFan.ApplyAndWaitForCompletion();
获取结果:
TheRayFan_Results = TheRayFan.GetResults();
读取结果:得到的结果取决于已执行的分析。
例如:
示例代码23使用 DataSeries 读取光线光扇图 (Ray Fan) 的分析结果。for field = 1:max_num_field
x = ray_results.DataSeries(field * 2 - 1).XData.Data.double;
y = ray_results.DataSeries(field * 2 - 1).YData.Data.double;
end;
编辑器
定义
TheLDE = TheSystem.LDE;
如何使用编辑器
以下是 TheLDE一些最常见的功能:
添加新表面:
TheLDE.AddSurface();
在特定的表面序号前插入新表面:
TheLDE.InsertNewSurfaceAt(1);
删除一个或多个指定序号的表面:
TheLDE.RemoveSurfacesAt(1,3);
将指定数量的表面从一个位置复制粘贴到另一个位置
:
TheLDE.CopySurfaces(1,3,3);
第一个参数是要复制的第一个表面,第二个参数是要复制的表面数目,最后一个参数是要粘贴到的表面序号。访问
特定的表面:
TheLDE.GetSurfaceAt(1);
更
改表面类型:
surf1_type=surf1.GetSurfaceTypeSettings(ZOSAPI.Editors.LDE.SurfaceType.EvenAspheric); surf1.ChangeType(surf1_type);
获取或设置半径
(
Radius)、厚度(Thickness)、半口径(SemiDiameter)、延伸区(ChipZone), 圆锥系数(Conic)、热膨胀系数(TCE)、标注(Comment)、材料(Material)、膜层(Coating)的值:surf1.Comment= 'Add comment here';
添加求解
(
Solve)
:
solve_MarginalRayHeight= surf1.ThicknessCell.CreateSolveType(ZOSAPI.Editors.SolveType.MarginalRayHeight);
solve_MarginalRayHeight.PupilZone=0.5;
surf1.ThicknessCell.SetSolveData(solve_MarginalRayHeight);
surf1.RadiusCell.MakeSolveVariable();改变
参数的值:
par2= surf1.GetSurfaceCell(ZOSAPI.Editors.LDE.SurfaceColumn.Par2); par2.DoubleValue= 0.0005;
将孔径属性改为圆形孔径
(
Circular Aperture)
:
aperdata=surf1.ApertureData;
circular_aper=aperdata.CreateApertureTypeSettings(ZOSAPI.Editors.LDE.SurfaceApertureTypes.CircularAperture);
circular_aper.MaximumRadius=0.5;
aperdata.ChangeApertureTypeSettings(circular_aper);访问编辑器工具栏的工具:
RunTool_ConvertLocalToGlobalCoordinates(int, int, int)
IOpticalSystemTools ThePrimarySystem.Tools
定义
TheSystem.Tools
如何使用
Tools
testFile = System.String.Concat(sampleDir, '\Sequential\Objectives\Cooke 40 degree field.zar');
testFolder = System.String.Concat(sampleDir, '\test\');loadZAR=TheSystem.Tools.OpenRestoreZAR();
loadZAR.SetFileName(testFile);
loadZAR.SetOutputFolder(testFolder);
loadZAR.SetFilesAllOverwrite();loadZAR.RunAndWaitForCompletion();
loadZAR.Close();
如下为TheSystem.Tools
.中常用的一些工具:
创建存档文件(Create Archive):
createZAR=TheSystem.Tools.OpenCreateZAR();
将当前透镜数据输出为 CAD 文件:
ToolExportCAD = TheSystem.Tools.OpenExportCAD();
将文件转换为非序列文件:
convertNSmode = TheSystem.Tools.OpenConvertToNSCGroup();
执行快速聚焦( Quick Focus):
quickFocus = TheSystem.Tools.OpenQuickFocus();
移除所有变量:
TheSystem.Tools.RemoveAllVariables();
执行一次局部优化:
LocalOpt = TheSystem.Tools.OpenLocalOptimization();
运行一次批量光线追迹(Batch ray trace):
raytrace = TheSystem.Tools.OpenBatchRayTrace();
打开公差分析 (Tolerancing):
tol = TheSystem.Tools.OpenTolerancing();
计算评价函数 (Merit Function):
MFcalculator=TheSystem.Tools.OpenMeritFunctionCalculator();
计算光斑半径 (Spot Radius):
SpotCalculator= TheSystem.Tools.OpenRMSSpotRadiusCalculator();
在表面3 处插入镜头库中的镜头:Lenscat=TheSystem.Tools.OpenLensCatalogs();
如下为 TheSystem.Tools
中非序列模式下可用的最常用的工具:
执行光线追迹
(
RayTrace)
:
NSCRayTrace = TheSystem.Tools.OpenNSCRayTrace();
从光线数据库
(
RayDataBase) 中读取数据:OpenRayDatabaseReader()。
下期我们将会为大家介绍《在 MATLAB 中使用 ZOS-API 批量处理光线追迹数据》
ZEMAX | ZOS-API、ZPL 和 DLL 之间的区别
ZEMAX | 如何使用 ZOS-API 创建飞行时间自定义分析
扫码邀您入群
如果您对产品感兴趣,或需要技术支持,欢迎致电垂询!
电话:027-87878386
邮箱:market@ueotek.com
销售热线:027-87878386
咨询邮箱:sales@ueotek.com
👇点击阅读原文咨询产品或技术支持。

工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP
