在人均“四则运算用不到除”的眼视光学领域,如果你会使用Zemax,就好像掌握了一把光剑,有相当多的问题可以迎刃而解。在剩下的四则运算会用除法的这些人里,大多数还是在用笔和纸手推公式,如果你能用上Python控制Zemax,则好像掌握了原力,能够使用原力御剑。

接下来,我将为你讲解如何使用原力御光剑,先做些准备活动。本文假设你已经正确安装了Zemax。

安装 miniconda

首先,从安装Python和必须的包管理程序开始。

Python的包非常混乱,经常互相冲突,所以一定不要擅自在系统中直接安装Python和相应的包。平时,能够使用云端的情况下尽量使用云端编程环境,例如Google Colab,DeepNote,Noteable,Replit等等。但与Zemax联合编程,需要与本地的Zemax交互,所以不得不在本地(而且是Windows)安装Python,这时候需要借助包管理程序。我比较习惯的是使用Anaconda,Anaconda有两个版本,其中比较节省空间的是miniconda。

以下是在Windows系统上安装Miniconda并创建一个名为"z"的环境的步骤:

  1. 下载Miniconda安装程序

    首先,你需要从Miniconda的官方网站下载适合你的操作系统的Miniconda安装程序。你可以在这个链接找到它:https://docs.conda.io/en/latest/miniconda.html

  2. 运行Miniconda安装程序

    下载完成后,双击运行安装程序。在安装过程中,你可以选择“为我安装”或“为所有用户安装”。如果你不确定,可以选择“为我安装”。

  3. 安装过程中的设置

    在安装过程中,你会看到一个选项“将Anaconda添加到我的PATH环境变量中”。虽然安装程序建议你不要勾选这个选项,但是为了方便,你可以选择勾选它。这样你就可以在命令行中直接运行conda命令。

  4. 完成安装

    安装程序会自动完成剩下的步骤。安装完成后,你可以打开命令提示符(或者PowerShell),然后输入conda --version来检查Miniconda是否已经成功安装。

  5. 创建名为"z"的环境

    在命令提示符中,输入以下命令来创建一个新的环境,名为"z":

    conda create --name z
    

    然后按回车键。conda会询问你是否要继续,输入y然后按回车键。

  6. 激活环境

    创建环境后,你需要激活它。在命令提示符中,输入以下命令:

    conda activate z
    

    现在你已经在"z"环境中了,你可以在这个环境中安装和使用Python包。

安装必要的包

Zemax与Python的通讯是使用的ZOS API,而ZOS API是建立在微软.net的基础之上,因此在Python中控制Zemax需要安装与.net相关的包,这里是pythonnet。为了后续教学方便,我们还会安装jupyter和numpy,

以下是在已经创建的名为 "z" 的conda环境中安装pythonnet,jupyter和numpy的步骤:

  1. 首先,打开Windows Powershell。

  2. 激活你的conda环境。输入以下命令并按回车键:

    conda activate z
    

    如果成功,你应该会在命令行提示符前看到环境名称 "(z)"。

  3. 接下来,我们将安装pythonnet。由于pythonnet可能需要一些预编译的依赖项,我们将使用conda-forge通道来安装。输入以下命令并按回车键:

    conda install -c conda-forge pythonnet
    

    如果提示你确认安装,输入 "y" 并按回车键。

  4. 然后,我们将安装jupyter。输入以下命令并按回车键:

    conda install jupyter
    

    同样,如果提示你确认安装,输入 "y" 并按回车键。

  5. 最后,我们将安装numpy。输入以下命令并按回车键:

    conda install numpy
    

    如果提示你确认安装,输入 "y" 并按回车键。

现在,你的conda环境 "z" 应该已经安装了pythonnet,jupyter和numpy。你可以通过在Powershell中输入 "python" 启动Python解释器,然后输入 "import clr","import jupyter" 和 "import numpy" 来测试这些库是否已经成功安装。如果没有错误消息,那么你就成功了!

ZOS-API

Zemax并没有直接提供一个zosapi的库,而是每次从头开始用pythonnet建立一个相关的类,然后调用。这就还挺麻烦的。不过他们已经写好了很多示例代码,而每一个示例代码前面都是相同的建立类部分,所以,我们只需要提取出来即可。

在你的~\Documents\Zemax\ZOS-API Sample Code\Python目录下,应该可以看到一组类似这样命名的文件:

  • PythonStandalone_01_new_file_and_quickfocus.py
  • PythonStandalone_02_NSC_ray_trace.py
    ……

随便取其中的一个,复制到你准备工作的目录下,然后改名为zosapi.py就可以了。比如我们可以建立一个工作目录叫做learn_zemax_python,把PythonStandalone_01_new_file_and_quickfocus.py文件复制到该目录下,然后重命名为zosapi.py

本地vscode

个人推荐使用vscode https://code.visualstudio.com/ 这是一个微软推出的强大编辑器,有大量插件能够继续增强能力。特别是copilot,能够一定程度上自动编程。

vscode下载安装即可,没有什么特殊。然后在“扩展”中,找到如下安装

  • python (by microsoft)
  • pylance (by microsoft)
  • jupyter (by microsoft)

可选

  • GitHub Copilot (by GitHub):这是一个AI辅助编程的插件,免费一个月然后要付费使用。当然现在也有更多其他的AI辅助编程工具可用,例如cursor
  • Markdown Preview Enhanced (by Yiyi Wang):这是我常用来写markdown文档的插件