ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析

主題:光機結(jié)合特色課程

時間:2022年5月11日-13日

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖1

點擊圖片查看培訓詳情

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖2

OpticStudio可用的應用程序接口 (ZOS-API) 允許使用最新的軟件技術(shù)連接和定制應用程序。本文展示了如何使用ZOS-API創(chuàng)建定制的用戶分析。

作者 Thomas Pickering

附件下載

聯(lián)系工作人員獲取附件

簡介

ZOS-API是一個基于COM,來源于.NET庫的接口,為用戶提供了用多種語言編程的能力,包括C++、Python和Matlab。

在本文中,我們將重點討論有限訪問類型的自定義分析模式。此模式鏈接到單個分析窗口,并用于填充自定義分析所需的數(shù)據(jù)。數(shù)據(jù)將被顯示在OpticStudio圖形窗口中。與自定義操作數(shù)模式類似,該模式只允許更改當前系統(tǒng)的副本。用戶分析可以使用C++ (COM) 或 C# (.NET)編寫——這取決于用戶使用這兩種語言的偏好。

新建樣本模板

為了用 C# 編寫自定義分析,我們需要選擇 編程 (Programming) ... C# ...自定義分析 (User Analysis) 。

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖3

Windows資源管理器會打開文件夾 {Zemax}\ZOS-API Projects\CSharpUserAnalysisApplication1。您的默認 C# 開發(fā)程序也將打開,該程序包含一個樣板代碼,可以作為任何用戶自定義分析的基礎。

修改鏡頭數(shù)據(jù)編輯器

我們將為位于 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx 的示例文件創(chuàng)建此用戶分析。

計劃以每次增加 10 um 的步驟變化表面 6 的表面厚度+/- 1mm,并研究在30、40和 50 cycles/mm 時調(diào)制傳遞函數(shù) (MTF) 的改變。

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖4

首先,在代碼的頂部添加3行。我們需要設置名稱空間,然后在不指定完整路徑的情況下使用內(nèi)部接口。

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

然后找到“//Add your custom code here... ”,并開始編碼。更改窗口標題,讀入鏡頭數(shù)據(jù)編輯器 (LDE) 并聲明數(shù)組來保存數(shù)據(jù)。

// 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# 是強類型的,這表明我們必須在聲明變量時指定它的數(shù)據(jù)類型。

設置評價函數(shù)編輯器

接下來,添加3個操作數(shù),將其改為MTFS(調(diào)制傳遞函數(shù),矢狀面),將采樣(參數(shù)1)設置為 64 x 64,頻率(參數(shù)4)設置為 30、40 和 50 cycles/mm 。由于這些代碼指令非常相似,使用復制和粘貼 (Ctrl+C, Ctrl+V) 來減少作業(yè)量。

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 創(chuàng)建用戶自定義分析的圖5

用循環(huán)來計算分析數(shù)據(jù)點

在計算評價函數(shù)之前,要用數(shù)據(jù)填充陣列,改變表面 6 的厚度并運行快速對焦。然后我們可以在其各自的數(shù)據(jù)數(shù)組中寫入每個操作數(shù)值。

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;}


為結(jié)果繪圖

最后,使用TheAnalysisData創(chuàng)建一個特定的圖形類型并填充數(shù)據(jù)。如果您曾經(jīng)使用DDE創(chuàng)建過用戶分析,那么您會發(fā)現(xiàn)通過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";


目前有四種類型的數(shù)據(jù)可以計算和顯示:

  • 二維線圖

  • 二維網(wǎng)格圖

  • 二維RGB網(wǎng)格圖

  • 文本數(shù)據(jù)注意

每個用戶分析只允許使用一種數(shù)據(jù)格式。

保存,創(chuàng)建和移動激活

我們將發(fā)表解決方案,在調(diào)試時能夠使用調(diào)試模式,但是在發(fā)布插件時應該始終使用發(fā)布模式,因為調(diào)試庫是不能再發(fā)布的。因此,讓我們切換到發(fā)布模式并重新發(fā)布。

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖6

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖7

我們需要找到我們的解決方案文件夾 ({Zemax}\ZOS-API Projects\…) ,找到項目文件夾,然后將完成的應用程序移動到 {Zemax}\ZOS-API\TheAnalysisData 。

運行自定義分析

為了檢查我們的新自定義分析,我們現(xiàn)在可以啟動OpticStudio并打開透鏡文件 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx。

編程 (Programming) 標簽下,我們找到自定義分析 (User Analyses),這里應該是我們剛剛做的分析。

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖8

當我們點擊它時,就會得到自定義分析的結(jié)果!

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖9

其他可能性

在本例中,表面變化、變化范圍和步長以及報告MTF的空間頻率都是編死的,但是可以簡單地添加對話框允許用戶輸入數(shù)值來改變硬編程。這樣們可以創(chuàng)建一個可以更通用的自定義分析。設置存儲在由鍵-值對組成的簡單字典中。當您的第一次啟動分析時,字典是空的,但是添加到設置字典中的任何條目都將在更新時保存。

以下類型可以存儲在設置中:

  • 整數(shù)型 Integer

  • 浮點型 Float (32位)

  • 雙浮點型 (64位)

  • 布爾 Boolean

  • 字符串 String

  • 字節(jié) Byte



相關(guān)閱讀 - 編程

ZEMAX | 旋轉(zhuǎn)對稱不規(guī)則性(RSI)簡介

ZEMAX | 如何使用MATLAB通過交互擴展連接到ZOS-API

ZEMAX | 關(guān)于Image Simulation圖像模擬的二三事

ZEMAX | 在MATLAB或Python中使用ZOS-API進行光線追跡的批次處理

ZEMAX | ZOS-API、ZPL 和 DLL 之間的區(qū)別

ZEMAX  | 如何使用 ZOS-API 創(chuàng)建飛行時間自定義分析

ZEMAX | 如何使用 ZPL 創(chuàng)建用戶自定義求解



歡迎掃碼添加宇熠工作人員微信,

進入 zemax 微信交流群。

一起來學習光學設計吧!

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖10

掃碼邀您入群


如果您對產(chǎn)品感興趣,或需要技術(shù)支持,歡迎致電垂詢!

電話:027-87878386

郵箱:market@ueotek.com

關(guān)注武漢宇熠視頻號 查看更多精彩視頻 


ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖11
ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖12

武漢宇熠科技是 ZEMAX 中國區(qū)官方指定代理商,提供 ZEMAX 光學設計軟件的培訓、銷售、技術(shù)支持、二次開發(fā)、解決方案及 ZEMAX 軟件相關(guān)全方位定制服務。有關(guān) ZEMAX ,您可以點擊文末“閱讀原文”了解更多信息,或致電垂詢武漢宇熠工作人員:

銷售熱線:027-87878386

咨詢郵箱:sales@ueotek.com

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖13
ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖14


ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖15

ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的圖16


??點擊閱讀原文咨詢產(chǎn)品或技術(shù)支持。

登錄后免費查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1