联系工作人员获取附件
简介
新建样本模板
为了用 C# 编写自定义分析,我们需要选择 编程 (Programming) … C# …自定义分析 (User Analysis) 。

Windows资源管理器会打开文件夹 {Zemax}ZOS-API ProjectsCSharpUserAnalysisApplication1。您的默认 C# 开发程序也将打开,该程序包含一个样板代码,可以作为任何用户自定义分析的基础。
我们将为位于 {Zemax}SamplesSequentialObjectivesDouble Gauss 28 degree field.zmx 的示例文件创建此用户分析。
计划以每次增加 10 um 的步骤变化表面 6 的表面厚度+/- 1mm,并研究在30、40和 50 cycles/mm 时调制传递函数 (MTF) 的改变。

首先,在代码的顶部添加3行。我们需要设置名称空间,然后在不指定完整路径的情况下使用内部接口。
using ZOSAPI.Editors.MFE;using ZOSAPI.Editors;using ZOSAPI.Tools.General;
// Add your custom code here...TheAnalysisData.WindowTitle = "MTF vs. Thickness";ILensDataEditor TheLDE = TheSystem.LDE;ILDERow surf6 = TheLDE.GetSurfaceAt(6);
double[] MTFs30 = new double;double[] MTFs40 = new double;double[] MTFs50 = new double;double[] surf6Thic = new double;
请记住,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;

用循环来计算分析数据点
在计算评价函数之前,要用数据填充阵列,改变表面 6 的厚度并运行快速对焦。然后我们可以在其各自的数据数组中写入每个操作数值。
double step = 0.01;surf6.Thickness = surf6.Thickness - 100 * step;for (int i = 0; i < 201; i++){surf6.Thickness = surf6.Thickness + step;surf6Thic = surf6.Thickness;
quickFocus = TheSystem.Tools.OpenQuickFocus();quickFocus.Criterion = QuickFocusCriterion.SpotSizeRadial;quickFocus.UseCentroid = true;quickFocus.RunAndWaitForCompletion();quickFocus.Close();
TheMFE.CalculateMeritFunction();
MTFs30 = Operand_1.Value;
MTFs40 = Operand_2.Value;
MTFs50 = 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 ";linePlot.YLabel = "MTF";
目前有四种类型的数据可以计算和显示:
-
二维线图
-
二维 格图
-
二维RGB 格图
-
文本数据注意
每个用户分析只允许使用一种数据格式。
保存,创建和移动激活
我们将发表解决方案,在调试时能够使用调试模式,但是在发布插件时应该始终使用发布模式,因为调试库是不能再发布的。因此,让我们切换到发布模式并重新发布。


我们需要找到我们的解决方案文件夹 ({Zemax}ZOS-API Projects…) ,找到项目文件夹,然后将完成的应用程序移动到 {Zemax}ZOS-APITheAnalysisData 。
运行自定义分析
为了检查我们的新自定义分析,我们现在可以启动OpticStudio并打开透镜文件 {Zemax}SamplesSequentialObjectivesDouble Gauss 28 degree field.zmx。
在编程 (Programming) 标签下,我们找到自定义分析 (User Analyses),这里应该是我们刚刚做的分析。

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

其他可能性
在本例中,表面变化、变化范围和步长以及 告MTF的空间频率都是编死的,但是可以简单地添加对话框允许用户输入数值来改变硬编程。这样们可以创建一个可以更通用的自定义分析。设置存储在由键-值对组成的简单字典中。当您的第一次启动分析时,字典是空的,但是添加到设置字典中的任何条目都将在更新时保存。
以下类型可以存储在设置中:
-
整数型 Integer
-
浮点型 Float (32位)
-
双浮点型 (64位)
-
布尔 Boolean
-
字符串 String
-
字节 Byte
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!