我已经使用pyzdde在Zemax中成功追踪了一条光线。 (使用zGetTrace)但是我需要全局坐标中的信息而不是本地信息。有没有办法得到它?感谢。
-T
编辑:
这是测试代码。光线对象以正确的本地坐标返回光线信息。我需要它在全球范围内。当检查"全局坐标时,基本上会产生同样的效果。 Zemax光线跟踪窗口中的框。
import sys
import pyzdde.zdde as pyz
ln = pyz.createLink()
path = 'C:\\'
filename = 'myZemaxFile.zmx'
fullpath = path + filename
ln.zLoadFile(fullpath)
hx = 0.0; hy = 0
px = 0.0; py = 0.0
wave = 1;surf = 4
mode = 0
# mode 0 = real
ray = ln.zGetTrace(wave,mode,surf,hx,hy,px,py)
# close the communication channel
pyz.closeLink()
答案 0 :(得分:0)
我认为有几种方法可以解决这个问题(取决于镜头设计的类型)。
例如,您可以使用操作数' GLCZ' (Surf定义的曲面的全局顶点z坐标)以下列方式获取全局坐标中图像表面(或感兴趣的表面)的z坐标:
ln.zGetUpdate() # may not be required
image_surf = ln.zGetNumSurf() # assuming last surface as the image surf
image_z = ln.zOperandValue('GLCZ', image_surf)
一旦得到image_z
,则元组(ray.x, ray.y, image_z)
表示与图像表面的光线交点的x,y,z坐标。
我希望有所帮助。
更简单的选项(甚至不进行光线跟踪)是使用操作数RAGX
,RAGY
和RAGZ
(如Todd B所指出的)。它们直接给出射线交叉点的全局坐标。例如:
ln.zGetUpdate() # may not be required
surf = ln.zGetNumSurf() # assuming last surface as the image surf
wave, hx, hy, px, py = 1, 0.0, 1.0, 0.0, 0.0
rayInterceptX = ln.zOperandValue('RAGX', surf, wave, hx, hy, px, py)
rayInterceptY = ln.zOperandValue('RAGY', surf, wave, hx, hy, px, py)
rayInterceptZ = ln.zOperandValue('RAGZ', surf, wave, hx, hy, px, py)