ZEMAX | 如何用 ZOS-API 创建用户自定义分析

OpticStudio可用的应用程序接口 (ZOS-API) 允许使用最新的软件技术连接和定制应用程序。本文展示了如何使用ZOS-API创建定制的用户分析。

作者 Thomas Pickering

联系工作人员获取附件

简介

ZOS-API是一个基于COM,来源于.NET库的接口,为用户提供了用多种语言编程的能力,包括C++、Python和Matlab。

在本文中,我们将重点讨论有限访问类型的自定义分析模式。此模式链接到单个分析窗口,并用于填充自定义分析所需的数据。数据将被显示在OpticStudio图形窗口中。与自定义操作数模式类似,该模式只允许更改当前系统的副本。用户分析可以使用C++ (COM) 或 C# (.NET)编写——这取决于用户使用这两种语言的偏好。

新建样本模板

为了用 C# 编写自定义分析,我们需要选择 编程 (Programming) … C# …自定义分析 (User Analysis) 。

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

Windows资源管理器会打开文件夹 {Zemax}\ZOS-API Projects\CSharpUserAnalysisApplication1。您的默认 C# 开发程序也将打开,该程序包含一个样板代码,可以作为任何用户自定义分析的基础。

修改镜头数据编辑器

我们将为位于 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx 的示例文件创建此用户分析。

计划以每次增加 10 um 的步骤变化表面 6 的表面厚度+/- 1mm,并研究在30、40和 50 cycles/mm 时调制传递函数 (MTF) 的改变。

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

首先,在代码的顶部添加3行。我们需要设置名称空间,然后在不指定完整路径的情况下使用内部接口。

using ZOSAPI.Editors.MFE;using ZOSAPI.Editors;using ZOSAPI.Tools.General;

然后找到“//Add your custom code here… ”,并开始编码。更改窗口标题,读入镜头数据编辑器 (LDE) 并声明数组来保存数据。

// Add your custom code here...TheAnalysisData.WindowTitle = "MTF vs. Thickness";ILensDataEditor TheLDE = TheSystem.LDE;ILDERow surf6 = TheLDE.GetSurfaceAt(6);
double[] MTFs30 = new double[201];double[] MTFs40 = new double[201];double[] MTFs50 = new double[201];double[] surf6Thic = new double[201];

请记住,C# 是强类型的,这表明我们必须在声明变量时指定它的数据类型。

设置评价函数编辑器

接下来,添加3个操作数,将其改为MTFS(调制传递函数,矢状面),将采样(参数1)设置为 64 x 64,频率(参数4)设置为 30、40 和 50 cycles/mm 。由于这些代码指令非常相似,使用复制和粘贴 (Ctrl+C, Ctrl+V) 来减少作业量。

IMeritFunctionEditor TheMFE = TheSystem.MFE;IMFERow Operand_1 = TheMFE.AddOperand();Operand_1.ChangeType(MeritOperandType.MTFS);IEditorCell Op1Samp = Operand_1.GetOperandCell(MeritColumn.Param1);Op1Samp.IntegerValue = 2;  IEditorCell Op1Freq = Operand_1.GetOperandCell(MeritColumn.Param4);Op1Freq.DoubleValue = 30;
IMFERow Operand_2 = TheMFE.AddOperand();Operand_2.ChangeType(MeritOperandType.MTFS);IEditorCell Op2Samp = Operand_2.GetOperandCell(MeritColumn.Param1);Op2Samp.IntegerValue = 2;IEditorCell Op2Freq = Operand_2.GetOperandCell(MeritColumn.Param4);Op2Freq.DoubleValue = 40;
IMFERow Operand_3 = TheMFE.AddOperand();Operand_3.ChangeType(MeritOperandType.MTFS);IEditorCell Op3Samp = Operand_3.GetOperandCell(MeritColumn.Param1);Op3Samp.IntegerValue = 2;IEditorCell Op3Freq = Operand_3.GetOperandCell(MeritColumn.Param4);Op3Freq.DoubleValue = 50;

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

用循环来计算分析数据点

在计算评价函数之前,要用数据填充阵列,改变表面 6 的厚度并运行快速对焦。然后我们可以在其各自的数据数组中写入每个操作数值。

double step = 0.01;surf6.Thickness = surf6.Thickness - 100 * step;for (int i = 0; i < 201; i++){surf6.Thickness = surf6.Thickness + step;surf6Thic[i] = surf6.Thickness;
quickFocus = TheSystem.Tools.OpenQuickFocus();quickFocus.Criterion = QuickFocusCriterion.SpotSizeRadial;quickFocus.UseCentroid = true;quickFocus.RunAndWaitForCompletion();quickFocus.Close();
TheMFE.CalculateMeritFunction();
MTFs30[i] = Operand_1.Value;MTFs40[i] = Operand_2.Value;MTFs50[i] = Operand_3.Value;}

为结果绘图

最后,使用TheAnalysisData创建一个特定的图形类型并填充数据。如果您曾经使用DDE创建过用户分析,那么您会发现通过ZOS-API进行绘图会更加直接和灵活。

IUser2DLineData linePlot = TheAnalysisData.Make2DLinePlot("MTF vs. Surface 6 Thickness", 201, surf6Thic);linePlot.AddSeries("MTF 30 cycles/mm", ZemaxColor.Color1, 201, MTFs30);linePlot.AddSeries("MTF 40 cycles/mm", ZemaxColor.Color2, 201, MTFs40);linePlot.AddSeries("MTF 50 cycles/mm", ZemaxColor.Color3, 201, MTFs50);linePlot.XLabel = "Surface 6 Thickness [mm]";linePlot.YLabel = "MTF";

目前有四种类型的数据可以计算和显示:

  • 二维线图

  • 二维网格图

  • 二维RGB网格图

  • 文本数据注意

每个用户分析只允许使用一种数据格式。

保存,创建和移动激活

我们将发表解决方案,在调试时能够使用调试模式,但是在发布插件时应该始终使用发布模式,因为调试库是不能再发布的。因此,让我们切换到发布模式并重新发布。

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

我们需要找到我们的解决方案文件夹 ({Zemax}\ZOS-API Projects\…) ,找到项目文件夹,然后将完成的应用程序移动到 {Zemax}\ZOS-API\TheAnalysisData 。

运行自定义分析

为了检查我们的新自定义分析,我们现在可以启动OpticStudio并打开透镜文件 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx。

编程 (Programming) 标签下,我们找到自定义分析 (User Analyses),这里应该是我们刚刚做的分析。

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

当我们点击它时,就会得到自定义分析的结果!

ZEMAX | 如何用 ZOS-API 创建用户自定义分析

其他可能性

在本例中,表面变化、变化范围和步长以及报告MTF的空间频率都是编死的,但是可以简单地添加对话框允许用户输入数值来改变硬编程。这样们可以创建一个可以更通用的自定义分析。设置存储在由键-值对组成的简单字典中。当您的第一次启动分析时,字典是空的,但是添加到设置字典中的任何条目都将在更新时保存。

以下类型可以存储在设置中:

  • 整数型 Integer

  • 浮点型 Float (32位)

  • 双浮点型 (64位)

  • 布尔 Boolean

  • 字符串 String

  • 字节 Byte

相关软件
ZEMAX是一套综合性的光学设计软件。它提供先进的、且符合工业标准的分析、优化、公差分析功能,能够快速准确的完成光学成像及照明设计。
相关阅读