【Zemax Programming】開(kāi)始使用 Python
概要
本文將介紹如何在系統(tǒng)中設(shè)置 Python,以便運(yùn)行 ZOS-API。Python 和 pywin32 是兩個(gè)必備的下載,文中開(kāi)發(fā)環(huán)境以及Python模塊僅做推薦。
另外,由于 Python 3.6 與 pywin32 存在已知的兼容性問(wèn)題,小編建議大家安裝 Python 3.5 以避免安裝中可能存在的問(wèn)題。
基于 COM 的語(yǔ)言:pywin32
ZOS-API 基于.NET 庫(kù),需使用 win32com 與基于純 COM 編寫(xiě)的語(yǔ)言,例如 Python,進(jìn)行通信。Python 的擴(kuò)展庫(kù) pywin32(https://sourceforge.net/projects/pywin32/)能夠調(diào)用 win32com。pywin32 庫(kù)有兩個(gè)版本,32 位和 64 位。使用 32 位 pywin32處理特定接口時(shí)會(huì)隨機(jī)產(chǎn)生問(wèn)題,因此我們建議 Python 以及 pywin32 均使用64位版本。只要 pywin32 為64位并參考正確的 Python 架構(gòu),則 ZOS-API 能夠通過(guò) Python 2.X 或 Python 3.X 調(diào)用。
安裝 Python
要使用 ZOS-API 與 Python,您需要安裝 Python 和 pywin32 庫(kù),才能允許 Python 與其他基于 COM 的 Windows 應(yīng)用程序通信。需要注意的是,pywin32 并不是 Python 安裝的正式部分,您需要在安裝 Python 之后安裝pywin32。最新版本的 Python 可以在https://www.python.org 中找到,pywin32 可前往 https://sourceforge.net/projects/pywin32/ 下載。
Python 有兩個(gè)主要分支,2.7.X 和 3.X,ZOS-API 可以與任一分支的 32 位或 64 位版本使用。Python 2.7.X 目前已沒(méi)有新功能更新,Python 組織僅對(duì)其安全補(bǔ)丁進(jìn)行維護(hù)。因此,如果您的系統(tǒng)中沒(méi)有安裝 Python,建議安裝 Python 3.X 版本以獲取最新功能。
Python 安裝完畢后,我們需要更改 PATH 環(huán)境變量使其包含 Python 路徑??赏ㄟ^(guò)單擊開(kāi)始搜索欄,在其中搜索“環(huán)境變量”(或系統(tǒng)設(shè)置>高級(jí)>啟動(dòng)與恢復(fù)>環(huán)境變量)來(lái)完成此設(shè)置。
然后單擊"New"并進(jìn)入到 Python 目錄的路徑中。單擊 OK 后退出系統(tǒng)屬性對(duì)話(huà)框。



現(xiàn)在,您將能夠打開(kāi)CLI(命令行界面)窗口,并簡(jiǎn)單地輸入“python”來(lái)調(diào)用剛剛安裝的路徑中的 python 可執(zhí)行文件。
如果你安裝的 Python 為 64 位版本,則 pywin32 文件名會(huì)顯示為 pywin32-220.win-amd64-py3.x.exe,若你安裝的 Python 為 32 位版本,則 pywin32 文件名會(huì)顯示為 pywin32-220.win32-py3.4.exe。
檢查是否安裝 pywin32 模塊的方法:CMD>Python>help(‘modules’)


推薦模塊
Python 的 vanilla 版本很強(qiáng)大,Python 最好的功能之一是它的開(kāi)源特性和可以將模塊導(dǎo)入到腳本中。為了在 Python 中調(diào)用類(lèi)似 matlab 的功能,可以安裝 matplotlib (https://en.wikipedia.org/wiki/Matplotlib),它是一個(gè)繪圖庫(kù),基于 NumPy,是一種針對(duì) Python 的數(shù)值數(shù)學(xué)擴(kuò)展。
要安裝 matplotlib,你可以簡(jiǎn)單地使用pip,它是包含了標(biāo)準(zhǔn) Python 安裝的安裝包。注意,舊版本的 pip 不會(huì)成功安裝 matplotlib,因此你可能需要在安裝 matplotlib 之前更新 pip。如果你已經(jīng)安裝好了 Python,那么你可以跳到下面的第3步。
①使用以下CLI命令來(lái)檢查版本
python -m pip --version
②使用以下 CLI 命令升級(jí) pip
python -m pip install --upgrade pip
③使用以下CLI命令安裝 matplotlib
python -m pip install matplotlib
此時(shí),你將得到如下圖所示命令窗口:

集成開(kāi)發(fā)環(huán)境(IDE)
盡管能夠用任何文字編輯器來(lái)編寫(xiě)Python腳本(如Notepad or Notepad++),但我們強(qiáng)烈建議用戶(hù)使用集成開(kāi)發(fā)環(huán)境(IDE)來(lái)編寫(xiě)Python腳本。這是因?yàn)镮DE能夠調(diào)試Python腳本并查看給定對(duì)象的屬性,類(lèi)似于Visual Basic?或Matlab?中的自動(dòng)補(bǔ)全代碼。小編使用的是由Jet Brains提供的PyCharm 共享版IDE,PyCham支持代碼補(bǔ)全,語(yǔ)法問(wèn)題檢查,內(nèi)置控制臺(tái),斷點(diǎn)糾錯(cuò)工具。此IDE的最新版本能夠檢查ZOS-API環(huán)境中任一對(duì)象的屬性,絕對(duì)是最好用的版本之一。
舉例來(lái)說(shuō),要檢查NSCRayTrace的屬性,可以在出現(xiàn)該對(duì)象(NSCRayTrace)代碼行的下方左側(cè)欄中(行序號(hào)旁邊)鼠標(biāo)左擊插入斷點(diǎn),再在主窗口的右擊菜單欄中選擇“Debug”(而不是選擇“Run”)。

在返回的變量列表中(Variables),可以展開(kāi)變量,在下圖中展開(kāi)了_prop_map_get_的屬性。

初次運(yùn)行PyCharm提示需要配置interpreter option時(shí),點(diǎn)擊File>Settings>Project:>Project interpreter,再點(diǎn)擊Add Local來(lái)添加Python。

Python故障排除
☆pywin32封裝
任何時(shí)候當(dāng)改變 Zemax OpticStudio 或者 Python 的環(huán)境時(shí),將有可能破壞 pywin32 的封裝。每個(gè)樣本代碼在腳本的最開(kāi)始都有注釋說(shuō)明幫助用戶(hù)重新注冊(cè)封裝,詳細(xì)的說(shuō)明如下:
1.導(dǎo)航至路徑{Python}\Lib\site-packages\win32com\gen_py\*.* 并刪除目錄(gen_py)下的所有文件。
2.開(kāi)啟Windows “cmd”窗口(win+R>輸入“cmd”>回車(chē))。
3.更改路徑到自己的文件夾{PythonEnv}\Lib\site-packages\wind32com\client\ (如,cd C:\Users\Julia.Zhang\AppData\Local\Programs\Python\Python36\Lib\site-packages\win32com\client)
4.輸入“python makepy.py” 并按回車(chē)。當(dāng)Select Library窗口出現(xiàn)時(shí),使用Ctrl鍵同時(shí)選擇ZOSAPI與ZOSAPI_Interfaces并點(diǎn)擊OK。

示例文件
在 Zemax OpticStudio 的安裝過(guò)程中包含了范例文件,位于安裝路徑下的 Zemax\ZOS-API Sample Code 文件夾中,其中部分文件不需要安裝其他模塊就可運(yùn)行(如01和03),但如 04 和 10 文件需要安裝NumPy和matplotlib這兩個(gè)模塊。建議運(yùn)行示例文件之前首先安裝 matplotlib 模塊。