最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

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

2022-04-15 16:21 作者:武漢宇熠  | 我要投稿

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

作者 Thomas Pickering

附件下載

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

簡(jiǎn)介

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

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

新建樣本模板

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

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

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

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

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

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

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

然后找到“//Add your custom code here... ”,并開始編碼。更改窗口標(biāo)題,讀入鏡頭數(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];


請(qǐng)記住,C# 是強(qiáng)類型的,這表明我們必須在聲明變量時(shí)指定它的數(shù)據(jù)類型。

設(shè)置評(píng)價(jià)函數(shù)編輯器

接下來,添加3個(gè)操作數(shù),將其改為MTFS(調(diào)制傳遞函數(shù),矢狀面),將采樣(參數(shù)1)設(shè)置為 64 x 64,頻率(參數(shù)4)設(shè)置為 30、40 和 50 cycles/mm 。由于這些代碼指令非常相似,使用復(fù)制和粘貼 (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)來計(jì)算分析數(shù)據(jù)點(diǎn)

在計(jì)算評(píng)價(jià)函數(shù)之前,要用數(shù)據(jù)填充陣列,改變表面 6 的厚度并運(yùn)行快速對(duì)焦。然后我們可以在其各自的數(shù)據(jù)數(shù)組中寫入每個(gè)操作數(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)建一個(gè)特定的圖形類型并填充數(shù)據(jù)。如果您曾經(jīng)使用DDE創(chuàng)建過用戶分析,那么您會(huì)發(fā)現(xiàn)通過ZOS-API進(jìn)行繪圖會(huì)更加直接和靈活。


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ù)可以計(jì)算和顯示:

  • 二維線圖

  • 二維網(wǎng)格圖

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

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

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

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

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

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

運(yùn)行自定義分析

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

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

當(dāng)我們點(diǎn)擊它時(shí),就會(huì)得到自定義分析的結(jié)果!

其他可能性

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

以下類型可以存儲(chǔ)在設(shè)置中:

  • 整數(shù)型?Integer

  • 浮點(diǎn)型 Float (32位)

  • 雙浮點(diǎn)型 (64位)

  • 布爾 Boolean

  • 字符串?String

  • 字節(jié)?Byte


ZEMAX | 如何用 ZOS-API 創(chuàng)建用戶自定義分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
黄冈市| 商水县| 耒阳市| 永城市| 响水县| 满城县| 宁陵县| 东乡族自治县| 弥勒县| 郎溪县| 绥宁县| 金溪县| 阿城市| 玛曲县| 饶平县| 陈巴尔虎旗| 黎平县| 筠连县| 清涧县| 宜黄县| 巫山县| 新巴尔虎右旗| 卢龙县| 高清| 庆城县| 九龙坡区| 六枝特区| 米脂县| 五峰| 阳高县| 平顺县| 廉江市| 南充市| 泰安市| 丹阳市| 泗阳县| 临邑县| 五指山市| 浠水县| 伊吾县| 大冶市|