本文简要概述了OpticStudio安装时附带的ZOS-API示例文件,这些文件将帮助您开始使用这个功能。
作者 Tess Jacobs, reviewed by Sandrine Auriol
简介
OpticStudio提供了应用程序编程接口 ( ZOS-API ),外部程序可以直接与OpticStudio打开的实例通信(交互模式),也可以作为后台进程运行(独立模式)。大量的功能存在于API中,并将在OpticStudio的未来版本中继续构建。
本文将概述与API兼容的四种完全受支持的编程语言:MATLAB、Python、C++和C#。
模式
应用程序 ( MATLAB、Python、C++、C#……) 与OpticStudio之间的连接为四种程序模式中的一种。
通过点击:编程( Programming ) 选项卡> 关于ZOS-API ( About the ZOS-API ) > 介绍 ( Introduction ) ,可以打开描述这些模式的内置帮助文件。
以下是对这些模式的描述:
模式 |
说明 |
||||
独立应用程序(Standalone Application ) |
在此模式下,应用程序会启动全新的OpticStudio例程(其他模式依赖于已经打开的现有例程而存在)。因此,在以这种模式启动应用程序之前,必须注意确保OpticStudio已打开至少一个例程(以满足OpticStudio的许可证验证)。在此模式下,OpticStudio实际上是作为服务器运行的,没有自定义界面。 |
x | x | x | x |
交互扩展(Interactive Extension) |
交互扩展模式连接到OpticStudio的已经打开的例程。在此模式下运行时,OpticStudio界面随着程序的变化进行实时更新。 它几乎与自定义扩展相同,除了这个功能可以从脚本环境(如MATLAB或Python)进行连接,这些脚本环境中没有可编译的可执行文件来使OpticStudio启动。 |
x | x | ||
自定义扩展(User Extension) |
这种模式是从OpticStudio的开放例程中启动的,可以完全控制镜头设计和用户界面,类似于“用户自定义工具”。这种模式提供了一个切换键,提示用户在运行这种模式时,选择是否随着程序更改实时更新用户界面。 这种模式更接近于已弃用的DDE扩展。 |
x | x | ||
自定义分析(User Analysis) |
这种模式链接到单个分析窗口。这种模式与自定义操作数模式几乎相同,只不过它用于填充自定义分析的数据。这些数据是用OpticStudio提供的现有图形来显示,用于大多数分析。 |
x | x | ||
自定义操作数(User Operand) |
这种模式链接到评价函数编辑器中的用户自定义操作数,这个操作数通过UDOC操作数添加到编辑器中。这种模式不允许更改当前镜头系统或用户界面(即:在这种模式下只允许更改系统的副本)。在这种模式下,还没有提供对文件中打开的分析列表的访问权限,因为如果需要,可以打开新的OpticStudio示例运行分析功能。 |
x | x |
示例
在OpticStudio 17中,含有用于 ZOS-API 的编程内置帮助系统。这个帮助文档设计得更容易理解,并包含了4个目标环境(c#、c++、MATLAB 和 Python)中所有的示例。要访问帮助文档,可以通过单击:编程 ( Programming ) > ZOS-API帮助 ( ZOS-API Help ) > ZOS-API语法帮助 ( ZOS-API Syntax Help ) 或 帮助 ( Help ) > ZOS-API语法帮助 ( ZOS-API Syntax Help ) 找到。
ZOS-API语法帮助中的所有示例都处于独立应用程序模式,除了示例16之外。示例16是用户自定义操作数。
OpticsStudio的每个许可证中都包含示例代码。这些示例代码文件可以在{Zemax}\ZOS-API Sample Code文件夹中找到。在这些文件夹中,还有另外3个示例:用户自定义操作数、用户自定义分析和用户自定义扩展。
独立应用程序
示例 | 摘要 | 说明 | 文件名 |
1 |
新文件和快速聚焦 ( New File and QuickFocus ) |
创建新的镜头文件并保存在示例库中。 改变孔径值,增加视场点,选择预置的 FdC 波长。在镜头数据编辑器中更改标注、厚度和半径;在最后一个表面的半径上设置 F 数求解。最后,打开、执行和关闭快速聚焦工具。 |
CSharpStandalone_01_new_file_and_quickfocus.cs CppStandalone_01_new_file_and_quickfocus.cpp MatlabStandalone_01_new_file_and_quickfocus.m PythonStandalone_01_new_file_and_quickfocus.py |
2 |
NSC光线追迹 (NSC Ray Trace ) |
打开NSC示例文件 (…\Non-sequential\Miscellaneous\ Digital_projector_flys_eye_homogeni-zer.zmx),修改光线追迹的设置,然后运行光线追迹,并对光线追迹过程进行存储和显示。在光线追迹后,提取探测器参数(宽度、高度、像素数等)和像素数据,重新运行探测器查看器并绘图。 |
CSharpStandalone_02_NSC_ray_trace.cs CppStandalone_02_NSC_ray_trace.cpp MatlabStandalone_02_NSC_ray_trace.m PythonStandalone_02_NSC_ray_trace.py |
3 |
打开文件并进行优化 ( Open File and Optimize ) |
打开API文件 (…\Samples\API\[language]\ e01_new_file_and_quickfocus.zmx),将一些表面半径设为变量。通过插入操作数和调整参数值,手动生成约束空气和材料厚度、目标像散和彗差的评价函数。运行局部优化直至完成,然后运行锤形优化器10秒。 |
CSharpStandalone_03_open_file_and_op-timise.cs CppStandalone_03_open_file_and_op-timise.cpp MatlabStandalone_03_open_file_and_op-timise.m PythonStandalone_03_open_file_and_op-timise.py |
4 |
在FFT MTF中检索数据 ( Retrieve Data from FFT MTF ) |
加载示例文件(….\ sequence \Objectives\ Cooke 40 degree field.zmx),并打开新的FFT MTF分析窗口。修改最大频率和采样。更新结果并绘制数据图;OpticStudio 重新创建FFT MTF图。 |
CSharpStandalone_04_pull_data_from_FFTMTF.cs CppStandalone_04_pull_data_from_FFTMTF.cpp MatlabStandalone_04_pull_data_from_FFTMTF.m PythonStandalone_04_pull_data_from_FFTMTF.py |
5 |
分析ZRD文件( Parsing a ZRD File ) |
打开示例文件(..\Non-sequential),在保存ZRD文件时执行光线追迹,打开ZRD文件并读取所有光线段的数据。 |
CSharpStandalone_05_Read_ZRD_File.cs CppStandalone_05_Read_ZRD_File.cpp MatlabStandalone_05_Read_ZRD_File.m PythonStandalone_05_Read_ZRD_File.py |
6 |
非序列相位 ( NSC Phase ) |
使用点光源发出光线传播到探测器,将此过程创建为简单球面波前文件,而不是用探测器查看器( Detector Viewer )来提取波前相位,GetAllCoherentDataSafe()方法用于提取二维数组来手动计算相位。GetAllCoherentDataSafe()方法将只返回实部和虚部的电场,所以使用atan2(虚部,实部)来计算相位。注意,对于c++,GetAllCoherentData()方法通常返回一维数组,然后在嵌套FOR循环中输出,并提供二维相位数据。 |
CSharpStandalone_06_nsc_phase.cs CppStandalone_06_nsc_phase.cpp MatlabStandalone_06_nsc_phase.m PythonStandalone_06_nsc_phase.py |
7 |
用光线传播数据创建文件( Create File From Prescription Data ) |
即将上线... |
|
8 |
通量与波长分析 (Flux vs Wavelength Analysis ) |
即将上线... |
|
9 |
非序列CAD ( NSC CAD ) |
打开新文件,将物体1更改为SolidWorks中的 Part物体类型,并引用、插入CAD文件。然后将CAD物体的数据公开,并更改面/表面数据。然后,通过将物体直接更改为POB文件来演示多边形物体文件的创建;使用POB语法定义立方体,然后将其插入到NSCE中。 |
CSharpStandalone_09_NSC_CAD.cs CppStandalone_09_NSC_CAD.cpp MatlabStandalone_09_NSC_CAD.m PythonStandalone_09_NSC_CAD.py |
10 |
NSC ZRD过滤器字符串 ( NSC ZRD Filter String ) |
打开示例文件,清除所有探测器,并在保存ZRD文件时运行光线追迹。在探测器查看器窗口上重新查看ZRD文件,同时将过滤器字符串应用于探测器。从探测器中获取每个像素上的光线击中数和总通量。为保险起见,将打开光线路径分析( Ray Path Analysis )窗口,加载ZRD文件并将输出保存到文本文件中。 |
CSharpStandalone_10_NSC_ZRD_filter_string.cs CppStandalone_10_NSC_ZRD_filter_string.cpp MatlabStandalone_10_NSC_ZRD_filter_string.m PythonStandalone_10_NSC_ZRD_filter_string.py |
11 |
序列模式基础 (Basic Sequential) |
创建并保存新的序列文件。改变系统孔径值(入瞳直径)和切趾类型。改变厚度、半径和材料,将表面1设置为矩形孔。常用缩放镜头( Scale Lens )工具来将系统单位改为英寸。执行快速聚焦,然后创建通用绘图。更改通用绘图的设置,将RMS光斑大小作为最后一个表面上的厚度的函数。 |
CSharpStandalone_11_BASIC_SEQ.cs CppStandalone_11_BASIC_SEQ.cpp MatlabStandalone_11_BASIC_SEQ.m PythonStandalone_11_BASIC_SEQ.py |
12 |
序列系统选项 (Sequential System Explorer ) |
创建新文件,并更改序列系统资源管理器中每个部分的所有值;调整波长、视场、偏振、材料库、系统标题/说明、默认的膜层/散射文件,和镜头单位。 |
CSharpStandalone_12_SEQ_System-Explorer.cs CppStandalone_12_SEQ_System-Explorer.cpp MatlabStandalone_12_SEQ_System-Explorer.m PythonStandalone_12_SEQ_System-Explorer.py |
13 |
序列系统中表面的最大AOI ( Sequential Maximum AOI on Surface ) |
即将上线...... |
|
14 |
公差分析 ( Tolerancing ) |
通过在公差向导中指定表面/元件公差,设置序列公差分析(公差数据编辑器)。修改公差窗口中的几个设置,如灵敏度模式、标准、视场和蒙特卡罗运行次数。然后运行公差,并将蒙特卡罗文件保存到Samples\API\{language}\ e14_seq_tolerance 中。最后,将文件转换为非序列模式。 |
CSharpStandalone_14_Seq_Tolerance.cs CppStandalone_14_Seq_Tolerance.cpp MatlabStandalone_14_Seq_Tolerance.m PythonStandalone_14_Seq_Tolerance.py |
15 |
序列优化 (Sequential Optimization ) |
演示了快速聚焦和优化工具。打开示例文件,使用“移除所有变量( Remove All Variables )”和“快速聚焦( Quick Focus )”工具。指定了一些变量和求解,并使用评价函数向导生成评价函数。在序列模式下依次运行和关闭局部、全局和锤形优化器。 |
CSharpStandalone_15_Seq_Optimization.cs CppStandalone_15_Seq_Optimization.cpp MatlabStandalone_15_Seq_Optimization.m PythonStandalone_15_Seq_Optimization.py |
17 |
体散射 ( Bulk Scatter ) |
从零开始创建体散射示例文件的副本 (…\Non-sequential\Scattering\Bulk scatter.zmx)。在矩形体上设置体散射配置文件。使用用户自定义设置(通过ModifySettings()方法旋转XYZ方向)打开实体模型和探测器查看器。执行启用散射的非序列光线追迹。注意,要在创建的ZMX文件中观察散射现象,必须在NSC实体模型 ( Shaded Model )中手动检查散射NSC光线设置。 |
CSharpStandalone_17_NSC_BulkScatter.cs CppStandalone_17_NSC_BulkScatter.cpp MatlabStandalone_17_NSC_BulkScatter.m PythonStandalone_17_NSC_BulkScatter.py |
18 |
多重结构 ( Multiple Configurations ) |
打开示例文件并将多重结构以及多重结构编辑器操作数添加到系统中。创建多重结构操作数THIC,通过分别对所有多重结构运行快速聚焦工具来重新聚焦每个结构。多重结构系统是通过手动创建所有适当的热分析操作数和热拾取解进行热分析。 |
CSharpStandalone_18_SetMultiCon-figuration.cs CppStandalone_18_SetMultiCon-figuration.cpp MatlabStandalone_18_SetMultiCon-figuration.m PythonStandalone_18_SetMultiCon-figuration.py |
19 |
表面属性 ( Surface Properties) |
棱镜是在序列模式中建立的。在镜头数据编辑器中插入几个表面,并在表面属性设置中将每个棱镜的前表面和后表面设置为倾斜。在棱镜周围插入坐标断点,然后复制序列模式下的坐标断点和棱镜表面,创建半圆形棱镜阵列。本系统演示了局部到全局坐标系( Local to Global )和全局到局部坐标系 ( Global to Local ) 工具的使用。这个示例相当于KBA文章“如何在序列光学系统中使用全局坐标系”中的示例。 |
CSharpStandalone_19_Surface_Properties.cs CppStandalone_19_Surface_Properties.cpp MatlabStandalone_19_Surface_Properties.m PythonStandalone_19_Surface_Properties.py |
20 |
导出为CAD文件 ( Exporting as CAD File ) |
IExportCAD接口用于将非序列系统 (…\Non-sequential\Miscellaneous\ Digital_projector_flys_eye_ homogenizer.zmx )导出为STEP文件。导出工具的设置是定制的,将使用自定义的超时参数运行此工具直到完成。 |
CSharpStandalone_20_export_CAD_File.cs CppStandalone_20_export_CAD_File.cpp MatlabStandalone_20_export_CAD_File.m PythonStandalone_20_export_CAD_File.py |
21 |
白光LED的荧光体散射 (White LED Phosphor) |
从空白文件开始,非序列示例文件(…\Samples\Non-sequential\Phosphors and Fluorescence\White LED Phosphor.zmx)是从零开始创建的。在非序列数据编辑器中插入所有必要的物体,包括光源,STEP文件,镜头和探测器。将所有合适的文件设置为体物理模型时,在透镜上应用散射文件和光致发光模型。长时间运行光线追迹并显示完成百分比。打开两个探测器查看器以显示辐照度和辐射强度。 |
CSharpStandalone_21_White_LED_Pho-sphor.cs CppStandalone_21_White_LED_Pho-sphor.cpp MatlabStandalone_21_White_LED_Pho-sphor.m PythonStandalone_21_White_LED_Pho-sphor.py |
22 |
序列分析 (Sequential Analysis ) |
在序列示例文件中运行批量处理光线追迹。生成315条光线列表,并将其传递给ZOS-API进行单次光线追迹。这大大减少了追迹大量光线时的成本。光线数据的追迹结果被存储并显示在OpticStudio外部。使用本地OpticStudio点列图分析,计算几何和RMS 均方根半径,并将其显示出来。 |
CSharpStandalone_22_seq_spot_diagram.cs CppStandalone_22_seq_spot_diagram.cpp MatlabStandalone_22_seq_spot_diagram.m PythonStandalone_22_seq_spot_diagram.py |
23 |
光线光扇图自定义分析 (Ray Fan User Analysis ) |
使用批量处理光线追迹后,可以通过本地OpticStudio代码以及通过IBatchRayTrace接口手动生成光线光扇图 ( Ray Fan )分析。显示结果(包括适当缩放和执行时间),以便进行比较。 |
CSharpStandalone_23_ray_fan_native _manual_comparison.cs CppStandalone_23_ray_fan_native _manual_comparison.cpp MatlabStandalone_23_ray_fan_native _manual_comparison.m PythonStandalone_23_ray_fan_native _manual_comparison.py |
24 |
非序列探测器数据 ( Non-Sequential Detector Data ) |
使用几种不同的物体类型就可以构建基本的非序列系统,并通过 INCERow接口更改物体参数。在体物体上设置表面类型、膜层和散射文件属性。运行光线追迹并打开本地OpticStudio探测器以供参考。然后,提取探测器像素数据并将其绘制在OpticStudio外部。 |
CSharpStandalone_24_nsc_detectors.cs CppStandalone_24_nsc_detectors.cpp MatlabStandalone_24_nsc_detectors.m PythonStandalone_24_nsc_detectors.py |
25 |
光源光谱衍射光栅 ( Source Spectrum Diffraction Grating ) |
建立了具有两个不同温度的黑体光源和衍射光栅的非序列系统。该系统设置了多重结构,以控制每个光源光线追迹时分析光线的数量。在光线追迹过程中,只有一个光源设置了分析光线条数。最后绘制出每个结构的真彩色结果图。 |
CSharpStandalone_25_source_spectrum _diffraction_grating.cs CppStandalone_25_source_spectrum _diffraction_grating.cpp MatlabStandalone_25_source_spectrum _diffraction_grating.m PythonStandalone_25_source_spectrum _diffraction_grating.py |
26 |
修改配置选项 (Modify Project Preferences) |
打开使用用户指定的OpticStudio.CFG配置文件的新系统,且修改和显示其所有可用的配置选项。 |
CSharpStandalone_26_modify_pro-ject_preferences.cs CppStandalone_26_modify_pro-ject_preferences.cpp MatlabStandalone_26_modify_pro-ject_preferences.m PythonStandalone_26_modify_pro-ject_preferences.py |
自定义扩展
示例 | 概要 | 说明 | 文件名 |
建立双胶合透镜,并优化分析其惠更斯MTF( Build a doublet, optimize and analyze with Huygens PSF) |
使用用户自定义扩展创建新的序列系统。该系统是可见光(F,d,C波长)下,由N-BAF10, SF10组成的F数为5的双胶合透镜,入瞳直径为10,最大半视场角为10°。扩展建立评价函数。优化双胶合透镜(在每个循环中显示评价函数),然后计算惠更斯PSF和惠更斯MTF。提供了源代码和编译后的版本。编译后的版本可以通过点击编程( Programming ) >自定义分析( User Analyses )>自定义扩展 ( User Extension) 来运行。 |
SampleExtension1.cs |
自定义分析
示例 | 概要 | 说明 | 文件名 |
复制FFT MTF与视场分析 ( Replicate FFT MTF vs Field Analysis ) |
创建用户自定义分析,并通过点击:分析( Analyze ) >MTF复制FFT MTF与视场分析,并设置波长。 OpticStudio提供了源代码和编译后的版本。编译后的版本可以通过点击:编程( Programming ) >自定义分析( User Analyses ) >示例分析1( SampleAnalysis1 )运行。 |
SampleAnalysis1.cs
|
自定义操作数
示例 | 概要 | 说明 | 文件名 |
16 |
厚度绝对值之和 (Sum Absolute Thickness ) |
创建了用户自定义操作数(UDOC),它可以计算出两个表面之间的总中心厚度。在表面1上设置参数Hx,在表面2上设置参数Hy。 由于UDOC是需要从OpticStudio中调用的可执行文件,所以UDOC只能由可以编译代码的语言(c# / c++)创建。OpticStudio提供了源代码,但是需要使用自定义操作数解决方案来编译,而不是使用独立应用程序解决方案。还需要将EXE命名为UDOC##.exe并放在ZOS-API\Operands文件夹中。 |
CSharpUserOperand_16_ SumAbsoluteThickness |
计算x,y方向的矢高(Compute Sag at x,y) |
这个用户自定义操作数计算表面在任意x和y坐标(Px 和 Py 参数)下的矢高(Hx参数)。 如果Data=0,则计算矢高。 如果Data=1,则计算另一个矢高。 有关更多信息,请查看ZOS-API语法帮助中ZOSAPI.Editors.LDE.ILensDataEditor接口中GetSag函数的定义。 OpticStudio提供了源代码和编译后的版本。编译后的版本可以通过在评价函数编辑器中输入UDOC操作数,及 prog# 1来运行。 |
UDOC01.cpp |
KA-01751
评论
文章评论已关闭。