在 Python 中通過 API 控制 OpticStudio

本周為大家奉上


在Python中通過API控制OpticStudio 進行仿真計算


概要

本文講述了使用Python和其他ZOS-API語言的區(qū)別,并回顧了Python(2.x)如何處理枚舉變量。文中還提供了一些代碼示例哦。


本文主要解釋了:
1、pywin32
2、枚舉變量
3、代碼示例:
· 單根光線追跡
· 建立一個圓形孔徑
· 近軸焦點的厚度求解
· 物理光學(xué)傳播
· 非序列模式下帶擬合的光線追跡
· 非序列元件的鍍膜和散射


請前往以下鏈接下載示例文件:

http://customers.zemax.com/ZMXLLC/media/Knowledge-Base/Attachments/12101_enum.zip



在使用代碼之前,請優(yōu)先瀏覽下述內(nèi)容來更好的了解ZOS-API:

文章

ZOSAPI.NET: An Overview
(os/resources/learn/knowledgebase/zosapinetanoverview)
How to build and optimize a singlet using ZOS-API with Python
(/os/resources/learn/knowledgebase/how-to-build-and-optimize-a-singlet-using-zos-api)
How to create a User Analysis using ZOS-API
(/os/resources/learn/knowledgebase/how-to-create-a-user-analysis-using-zos-api)


網(wǎng)絡(luò)研討會

Matlab & ZOSAPI.NET (/zmx/webinars/opticstudio-recordings/Matlab-zos-api-net)



http://customers.zemax.com/os/resources/learn/knowledgebase/how-to-use-the-zernike-sag-surface-to-model-an-all



基于COM的語言:pywin32

ZOS-API是一個被編寫成.NET的庫,并使用win32com來直接和基于純COM的語言通信,例如Python。在Python中有一個叫做pywin32的擴展來實現(xiàn)了win32com。Pywin32模塊有兩個版本,分別是32位和64位的。由于32位版本在實現(xiàn)一些交互時,會出現(xiàn)一些隨機的問題,因此我們推薦大家使用64位的Python和64位的pywin32。只要確保pywin32是64位的,以及正確安裝Python環(huán)境,你可以使用Python 2.x或Python 3.x來連接ZOS-API。


枚舉變量

為了更有效的在Python中應(yīng)用枚舉變量,ZOS-API將所有數(shù)值都儲存在一個叫“常量(constant)”的單一目錄下。雖然Python 3.4已經(jīng)可以獨立支持枚舉變量,但ZOS-API為了兼容Python 2.x版本還是會明確的將所有枚舉變量儲存在單一目錄下。枚舉變量或枚舉值是你需要在OpticStudio用戶界面的下拉菜單中設(shè)置的一些離散的數(shù)值。雖然枚舉值在ZOS-API設(shè)置任何離散數(shù)值時都會出現(xiàn),但他們更多的還是以一些函數(shù)的參數(shù)的形式出現(xiàn)。當(dāng)你看到一個函數(shù)的參數(shù)以ZOSAPI.xxxx為開頭時,你會需要用常量目錄來定位這個枚舉值。

為了在Python中使用枚舉值,你首先需要參考常量目錄下正確的屬性值。雖然這些名稱隨著版本的更新應(yīng)該保持不變,但有時候在不同ZOS-API版本中仍會出現(xiàn)小的變動(例如字母的大小寫)或更新。所以,請確保在使用你的ZOS-API時,這些參考屬性值是正確的。以下是ZOS-API使用枚舉值的示例:


在附件中有枚舉值的完整目錄可供參考。



接口轉(zhuǎn)型

雖然Python支持接口繼承,但衍生的接口并不繼承基礎(chǔ)接口的函數(shù)或?qū)傩?。因此,許多分析(例如 . GetSettings () 函數(shù))和工具(例如 . RunAndWaitForCompletion () 函數(shù))接口需要Python明確的把包含目標(biāo)函數(shù)或?qū)傩缘牟糠洲D(zhuǎn)移到正確的接口中。為了獲取衍生接口的函數(shù)或?qū)傩?,你必須首先獲得正確的接口類型以作參考,這一步由CastTo () 函數(shù)完成。檢索API文檔,我們可以看到IAS_RayTrace接口是從IAS_interface中繼承內(nèi)容的。當(dāng)你在文檔中看完這個規(guī)則,并且你想要在特定的接口中進行修改時,你需要使用settings = CastTo (newWin_Settings,”IAS_RayTrace”) 函數(shù)。



示例代碼

01 運行單根光線追跡


這段代碼將對全視場的邊緣光線進行單根光線追跡,并且將追跡數(shù)據(jù)保存在txt格式文件中。注意在OpticStudio16中,你需要使用 . GetTextFile () 函數(shù)來讀取大部分分析窗口的結(jié)果,包括單根光線追跡。



02 創(chuàng)建一個圓形孔徑


這段代碼將打開一個已經(jīng)存在的名為sc.zmx的文件。并且將在第一個面上添加一個圓形孔徑,隨后將這個鏡頭文件另存為一個新的文件。



03 近軸焦點的厚度求解


這段代碼將在草圖中創(chuàng)建一個單透鏡,并將系統(tǒng)孔徑類型設(shè)置為“隨光闌尺寸浮動”,然后通過設(shè)置Hx=1和Px=0在最后一個面上生成一個基于邊緣光線高度的厚度求解來尋找透鏡的近軸焦點。需要注意的是,如果你想尋找邊緣光線的焦點,你需要將孔徑區(qū)域從0改變?yōu)?。為了使程序?qū)⑼哥R文件正確保存,你需要確保路徑C:\Temp存在。



04 物理光學(xué)


這段代碼演示了如何使用ZOS-API實現(xiàn)物理光學(xué)分析。它被分解為以下幾個部分:1)在透鏡編輯器中的物理光學(xué)傳播分析。2)插入一個幻燈片面。3)修改POP.CFG文件。4)運行POP并保存結(jié)果。5)改變孔徑類型。在這段代碼中,我們假設(shè)已經(jīng)有一個有效的透鏡加載到TheSystem中并且“C:\Temp”文件夾已經(jīng)存在。當(dāng)使用 . MODIFYSETTINGS () 函數(shù)時(例如HasAnalysisSpecificSettings的值為False),你需要在運行這段代碼前手動保存一個CFG文件。

你可以通過打開POP設(shè)置菜單并點擊“保存”按鈕來保存一個CFG文件。對于關(guān)鍵詞MODIFYSETTINGS,你無法改變“顯示-數(shù)據(jù)”選項,所以如果你想同時得到輻照度和相位數(shù)據(jù),你需要設(shè)置“顯示-數(shù)據(jù)”選項為輻照度,點擊保存按鈕,打開Zemax\Config文件夾并將文件POP.CFG重命名為POP_IRRADIANCE.CFG。然后將“顯示-數(shù)據(jù)”選項改變?yōu)橄辔?,點擊保存按鈕,打開Zemax\Config文件夾并將POP.CFG文件重命名為POP_PHASE.CFG。




05 非序列模式下的平滑光線追跡


下面這段代碼使用ISystemTool界面來設(shè)置非序列模式寫的光線追跡。我們將非序列編輯器中的探測器物體的平滑參數(shù)設(shè)為3,或在探測器查看器的設(shè)置中將平滑度設(shè)為3。這段代碼將首先使用NSDD MFE/ZPL協(xié)議或直接使用ClearDetectors函數(shù)來清空探測器。隨后程序?qū)⑤敵觯饩€打在物體編號2上的矩形探測器的條數(shù)。


06 非序列部件的鍍膜和散射


這段代碼將修改物體2的鍍膜和散射屬性以及修改物體3為網(wǎng)格失高物體。它將表面0的屬性設(shè)置50%的朗伯散射,在表面1的屬性設(shè)置為I.50鍍膜,在表面2的屬性設(shè)置反射。對于物體3,我們需要將GRD文件“use_this_one.grd”保存到Zemax/Objects/Grid Files目錄下。