如何用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) 。

new boilerplate

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) 的改变。

reading in lens data editor

首先,在代码的顶部添加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;

merit function editor

用循环来计算分析数据点

在计算评价函数之前,要用数据填充阵列,改变表面 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 Projects\…) ,找到项目文件夹,然后将完成的应用程序移动到 {Zemax}\ZOS-API\TheAnalysisData 。

运行自定义分析

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

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

user analysis

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

MTF vs Thickness

其他可能性

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

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

  • 整数型 Integer
  • 浮点型 Float (32位)
  • 双浮点型 (64位)
  • 布尔 Boolean
  • 字符串 String
  • 字节 Byte

KA-01341

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助

评论

0 条评论

文章评论已关闭。