ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析
主題:光機結(jié)合特色課程
時間:2022年5月11日-13日
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) 。
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) 的改變。
首先,在代碼的頂部添加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;
用循環(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 Projects\…) ,找到項目文件夾,然后將完成的應用程序移動到 {Zemax}\ZOS-API\TheAnalysisData 。
運行自定義分析
為了檢查我們的新自定義分析,我們現(xiàn)在可以啟動OpticStudio并打開透鏡文件 {Zemax}\Samples\Sequential\Objectives\Double Gauss 28 degree field.zmx。
在編程 (Programming) 標簽下,我們找到自定義分析 (User Analyses),這里應該是我們剛剛做的分析。
當我們點擊它時,就會得到自定義分析的結(jié)果!
其他可能性
在本例中,表面變化、變化范圍和步長以及報告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 微信交流群。
一起來學習光學設計吧!
掃碼邀您入群
如果您對產(chǎn)品感興趣,或需要技術(shù)支持,歡迎致電垂詢!
電話:027-87878386
郵箱:market@ueotek.com
關(guān)注武漢宇熠視頻號 查看更多精彩視頻
武漢宇熠科技是 ZEMAX 中國區(qū)官方指定代理商,提供 ZEMAX 光學設計軟件的培訓、銷售、技術(shù)支持、二次開發(fā)、解決方案及 ZEMAX 軟件相關(guān)全方位定制服務。有關(guān) ZEMAX ,您可以點擊文末“閱讀原文”了解更多信息,或致電垂詢武漢宇熠工作人員:
銷售熱線:027-87878386
咨詢郵箱:sales@ueotek.com
??點擊閱讀原文咨詢產(chǎn)品或技術(shù)支持。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















