如何使用Zemax自定义面型呢?

2020-02-06 12:02发布

zemax自带非常多的面型,球面,非球面,折射面,反射面,衍射面等等。

但是,在一些特殊情况下,往往找不到合适的面型去匹配自己的设计。

所以Zemax支持用户自定义面型,可是这个功能怎么用呢?

还请大神指导,谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
TakeUaway
1楼-- · 2020-02-06 22:23

    zemax的用户自定义面型通常是由C或者C++代码编写完成。

    要想自己写一个能用的,至少Matlab要会一点,用官方的自带DLL来修改是最快捷明智的。



zemax的自定义面型需要放在路径

“我的文档\Zemax\DLL\Surfaces\”

下面,(09版本可能不一样,具体要查看当时版本的说明书)


image.png

   

可以看到里面有三类文件,一个是".C"/".CPP"文件,另一种是".dll"文件,再就是".h"文件

".dll"是zemax软件调用的文件,它是由".C"/".CPP"代码文件通过VISUAL STUDIO C++编译过来的

编译过程参考链接:

参考1: https://docs.microsoft.com/zh-cn/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019

参考2:https://zhuanlan.zhihu.com/p/65757667


换句话说,如果需要写一个自定义面型,写一个这样的".C"/".CPP"文件就可以了。

".h"是".C"/".CPP"的头文件,这个可以不用管,zemax自带的


我就用官方提供的序列微透镜阵列面型来解释了。

一、US_ARRAY.DLL的用法:

1) 打开zemax OpticStudio 

选择用户自定义面型

image.png

选择lenArray

image.png


2) 可以看出来Array有几个输入参数

都是控制阵列单元的的参数

radius——阵列单元的半径

thickness——阵列单元的厚度(也是当前面的厚度)

number X——X方向阵列单元个数

number Y——Y方向阵列单元个数

width X——X方向阵列单元宽度

width Y——Y方向阵列单元宽度

image.png


3 可以从Layout图上看到这几个参数的几何意义

image.png

那么这个过程是怎么实现的呢?

或者说实现这个过程需要怎么操作呢?

看第二部分定义




二、zemax自定义面型的".C"文件的定义


us_array.c

用Microsoft visual studio打开后

1581002999416587.jpg


程序的结构和可以调用的数据大概是这些

image.png

从图中可以看出,需要给zemax软件上图中的UD数据全部给出定义,即可完成建模


zemax需要的建模数据主要有几类:

1)LDE表格数据,包括列名称

2)面型矢高数据

3)近轴面数据和近轴光线数据

4)真实面数据和真实光线数据



未完待续


参考链接:

http://www.optzmx.com/forum.php?mod=viewthread&tid=2198


拒绝转载

联系我请本站私信我


Huang - 所有Zemax编程
2楼-- · 2020-02-13 18:42

zemax optic studio 中使用的话就如2楼所示,dll放到指定地方,就能用


写Dll的话直接给个Qtype的例子,


UDS QType VS2019.zip



可在zemax09下使用



从光学来说一个面型就是对输入光线做些变换,然后得到出射光线的数据。


程序上也是这样,zemax已经与dll约定好三个内容:输入、要调用的函数名、输出。


所以dll就是导出一个函数,按照指定格式供zemax调用。至于写这个dll,需要少量编程的知识,还有不同的ide也可能不一样。




一周热门 更多>