Python 如何在PyZDDE中建模倾斜镜?

Python 如何在PyZDDE中建模倾斜镜?,python,Python,我试图将球面像差建模为光学系统中反射镜倾角的函数。我正在使用模型的Optics Studio和PyZDDE与它进行通信。我想这很容易;我将设置一个倾斜角度列表,然后在其上循环更改相关曲面参数并调用zGetZernike(): 然而,这不起作用 我得到的泽尼克系数与角度无关。我尝试调用ln.zPushLens(1)和ln.zGetUpdate(),但两个都不起作用。服务器端似乎没有更新更改。 我还尝试在镜像曲面前后引入坐标打断,并更改这些曲面的角度,但这也不起作用 我遗漏了什么,可以做些什么来让这

我试图将球面像差建模为光学系统中反射镜倾角的函数。我正在使用模型的Optics Studio和PyZDDE与它进行通信。我想这很容易;我将设置一个倾斜角度列表,然后在其上循环更改相关曲面参数并调用
zGetZernike()

然而,这不起作用

我得到的泽尼克系数与角度无关。我尝试调用
ln.zPushLens(1)
ln.zGetUpdate()
,但两个都不起作用。服务器端似乎没有更新更改。 我还尝试在镜像曲面前后引入坐标打断,并更改这些曲面的角度,但这也不起作用

我遗漏了什么,可以做些什么来让这一切顺利进行

我也想改变波长,但这似乎也不起作用。我调用
ln.zSetPrimaryWave(N)
,其中N是波数,但服务器始终使用Optics Studio中设置的第一个波长


有没有办法改变计算Zernike系数的波长

请在函数
zSetSurfaceParameter()
中使用参数编号3和4(而不是54和64)

代码
SDAT_TILT_X_BEFORE
(54)和
SDAT_TILT_X_BEFORE
(64)分别用于函数
zSetSurfaceData()
,该函数为主Zemax/OpticStudio应用程序中的指定曲面在
曲面属性>>倾斜/偏心器
选项卡中设置适当字段

请注意,如果使用坐标打断,则需要使用参数3和4(使用函数
zSetSurfaceParameter()
)。此外,如果曲面类型是倾斜的,则可以使用参数编号1和2

我不确定为什么函数
zSetPrimaryWave()
不适用于您。我刚刚在OpticStudio中测试了这个函数,它工作正常

问候,,
Indranil.

因为使用
zSetSurfaceParameter()
直接从曲面属性更改倾斜和偏心是不起作用的。我必须使用两个坐标打断,一个在镜面前面,一个在镜面后面,并使用
zSetSurfaceParameter()
设置这些曲面的倾斜和偏心。我选择在第二个曲面上设置拾取解算,以恢复镜像后面的几何体,并且仅更改第一个曲面上的倾斜和偏心。x倾斜和y倾斜的参数编号分别为3和4,如Optics Studio手册中所述。对于调试,在每次参数更改后将镜头推送到镜头编辑器中确实很有帮助(
zPushLens(1)
)。还应该考虑将中间配置保存为ZEMAX设计文件。然而,对于实际计算,这些都不是必需的。此外,Optics Studio使用Zernike计算设置中的第一个波长。我必须使用
zSetWave()
更改波长。感谢Indranil和ZEMAX技术支持,在此过程中提供了宝贵的建议和指导

zSetPrimaryWave()更改主波。但是,对于Zernike计算,Optics Studio使用设置中的第一个波长,而不是主波。另外,坐标打断的参数1和2用于偏心,而不是倾斜,至少在当前的光学Sudio 16.5 SP3中是这样。对不起,我想我应该更清楚。我想说的是,如果使用“倾斜曲面”类型而不是使用坐标打断,那么必须使用参数1和2来修改(倾斜)曲面的切线-x和切线-y角度。这一点很好。这应该适用于平面。然而,在我的例子中,光学系统是一个望远镜,反射镜是一个具有有限曲率的非球面。我想我应该说得更清楚。
for i in range(len(angle)):
    ln.zSetSurfaceParameter(n, 54, angle[i])
    ln.zSetSurfaceParameter(n, 64, -angle[i])
    ln.zGetZernike()
    print(Zern[1])