用户自定义孔径和遮阑(User Defined Apertures and Obscurations)
大部分情况下使用环形、矩形、椭圆孔径和遮阑就足够了。然而,有时需要一个更通用的孔径类型。
OpticStudio 支持通过一系列线段、弧、圆、多边形和矩形定义常规的用户指定孔径。孔径可以是以简单或复杂的方式闭合,并且可以定义多个孔径区域,这些区域为嵌套或非嵌套式。要定义用户自定义孔径或遮阑,则从孔径类型列表选择所需的类型(孔径或遮阑)。"孔径文件(Aperture File)"控件将列出所有可用的用户自定义孔径(UDA)数据文件。UDA文件是文本格式的,可以用任何的文本编辑器创建和编辑。UDA文件存储在<objects>\Apertures文件夹(请参阅"文件夹(Folders)")中。UDC文件格式将在下一部分中介绍。
按钮"编辑孔径文件(Edit Aperture File)"将会调用一个文本编辑器让用户编辑UDA文件。UDA文件需要保存,并更新镜头文件以便使该改变生效。UDA缩放(UDA Scale)是一个无量纲比例因子,用于缩放UDA文件中定义的孔径值。该控件无需修改UDA文件就可以缩放UDA中的孔径。
UDC文件格式(The UDC file format)
UDC文件由一系列简单的文本命令组成,这些文本命令定义了孔径的边界形状。这些单独的形状称为实体。所有的UDA实体都被定义为在XY平面上。Z坐标由加载了UDA的表面矢高方程式确定。用于定义实体的命令包含三个字母助记符并跟随值,以UDA扩展名保存在文本文件中。文件名不能包含任何空格。
在实体定义中,所有空间坐标都以镜头单位为单位,且所有角度都以度为单位。请注意,坐标值和角度所需的数值精度取决于所定义的形状。在追迹光线穿过表面之前,应检查孔径的几何形状,并确保数值精度足以正确地形成边界形状。对于像ARC这样定义孔径的非线性部分的实体尤其如此。在下表中描述了现有的实体类型。
用户自定义孔径(UDA)实体
| 实体名称/语法 | 描述 |
| ARC cx cy angle n | 弧线。将一段弧线附加到当前端点。弧线的起点为当前端点,由前面的ARC或LIN命令定义。cx和cy值为弧线所在圆的中心。请注意,当前端点与cx和cy值定义弧线的半径。角度(以度为单位)定义弧长。在XY平面上顺时针方向为正角度。 OpticStudio 内部将弧线表示为一系列线段。参数n确定了为近似弧线所使用的线段数。推荐值为大约每6度为1段。最大允许值为64段。 |
| BRK |
中断。中断当前孔径定义,闭合任何先前定义的孔径。输入坐标: 0.0 0.0或 LIN 0.0 0.0 也将被解释为中断。 |
| CIR cx cy radius n | 圆。定义一个中心位于cx、cy上,具有指定半径的圆。 OpticStudio 将圆绘制为一系列的n段线段。n的最小值为8。n的最大值为64。如果n没有定义,则默认值为32。实际应用到光线的孔径是一个精确圆,与n值无关。 |
| ELI cx cy rx ry angle n |
椭圆。定义一个中心位于cx、cy的椭圆,在x和y方向具有指定径 向(半)宽度。 OpticStudio 将椭圆绘制为一系列的n段线段。n的最小值为8。n的最大值为64。如果n没有定义,则默认值为32。实际应用到光线的孔径是一个精确椭圆,与n值无关。 参数"角度"(以度为单位)可用于将椭圆顺时针旋转到任何所需的位置。 |
| LIN x y n or x y |
直线。将线段从当前端点附加到指定的x、y坐标。使用BRK关闭一个由LIN命令形成的多边形。 OpticStudio 选择性将直线表示为一系列更短的线段,这在当直线位于陡峭的轮廓线时很有用。参数n确定为了构造总线所使用的线段数。如果n没有定义,则使用1段线段。 助记符LIN不是必须的;如果列出的两个坐标都没有助记符,则LIN被假设。这可以向前兼容OpticStudio的旧版本。 |
| POL cx cy radius n angle |
多边形。定义一个中心位于cx、cy上的"n"边正多边形,每个顶点到中心点具有指定的径向距离。POL命令可用来定义三角面、正方形、五边形、六边形和其它等边的多边形。多边形的第一点始于角 度0.0度(沿局部+x轴),并从此位置顺时针方向转动。参数"角度"(以度为单位)可用于将多边形旋转到任何所需的位置。允许的最大段数为64,允许的最小段数为3。 |
| REC cx cy xhw yhw angle nx ny | 矩形。定义一个中心位于cx、cy上的矩形,在x和y方向具有指定 半宽。参数"角度"(以度为单位)可将矩形顺时针方向旋转到任何所需的位置。可选参数nx和ny定义将要在x和y方向使用的段数。使用数量较多的线段可以更好地渲染在矩形孔径上陡峭弯曲的 非序列模式物面。 |
| ! comment | 注释。忽略任何以!符号为开头的行,并且可作为注释放置在UDA 文件中。 |
多边形的结束通过BRK实体或LIN实体且同时将X和Y设为零来指定。因此,不能定义多边形具有位于(0,0)处的顶点,或者位于在原点坐标1.0E-06阶的公差距离内。如果必须在(0,0)处定义顶点,解决的方法是用一些非常小(但大于公差)的值来近似这些点,如(1.0E-05,0)。只要有一个坐标不为零,则这个点就被认为是一个顶点而不是多边形结束的标志。最后列出的多边形顶点会被连接到第一个点。请注意,由于最后的顶点将会自动接连到第一个顶点,因此不可以将最后的顶点定义为与第一点相同,这是多余的顶点。在同一个位置的四舍五入误差内定义多个点可能会导致在光学追迹和孔径渲染中出现错误。
请注意,当实体LIN和ARC定义多边形,其以BRK定义结束,UDA的实体REC和CIR定义的"孤立"孔径不能连接到任何其它孔径实体。当使用LIN和ARC实体时,应将第一个实体定义为LIN,用于定义多边形的第一个点。可以通过BRK实体分别定义多个孔径。
在UDA文件中定义的最大线段数仅受限于可用内存。但是,在使用非常复杂的UDA数据文件时,光线追迹和渲染表面和物体的速度较慢。有关UDA示例,请参阅以下部分。
UDA示例
定义一个边长为20镜头单位的正方形,它的UDA文件如下所示:
LIN -10, -10 LIN -10, 10 LIN 10, 10 LIN 10, -10 BRK

注意,BRK表示多边形定义的结束,假设最后一个点与第一个点连接,从而定义正方形的最后一条边。可以使用单个REC命令定义与此相同类型的孔径:
REC 0 0 10 10 0
注意,REC命令不要求BRK命令定义孔径的结束。
可以通过单个BRK命令分开定义多个多边形。例如,要定义一个由两个狭缝组成的孔径,宽度为 5镜头单位,且内侧间距10镜头单位,UDA文件如下:
LIN -10, -10 LIN -10, 10 LIN -5, 10 LIN -5, -10 BRK LIN 10, -10 LIN 10, 10 LIN 5, 10 LIN 5, -10 BRK
或者,相当于如下
REC -7.5 0 2.5 10 0 REC +7.5 0 2.5 10 0

要创建一个具有圆角的正方形,则可以同时使用ARC和LIN命令。以下是创建该正方形的UDA文件,每条边长为4镜头单位,且具有圆角。每个圆角由ARC与1镜头单位的半径和沿弧线的12段线段组成。
LIN -1 2 LIN 1 2 ARC 1 1 90 12 LIN 2 -1 ARC 1 -1 90 12 LIN -1 -2 ARC -1 -1 90 12 LIN -2 1 ARC -1 1 90 12

第一个LIN命令定义了左上角附近的起点。随后命令定义了该孔径的8个部分。注意,如果只定义单个孔径,则不需要BRK命令。
多个多边形也可以是嵌套的。如果光线与位于另一个多边形内的多边形中的点相交,则将该点视为在孔径外部。这项约定就可以在孔径内定义成遮阑的"孤岛",反之亦然。嵌套的层数可以是任意的,每层紧接着点的内部/外部状态。
请注意,当定义多个多边形时,这些多边形可以时分开的或嵌套的。但是,它们都不能与相邻边界相交或共享。
以下是具有前面示例中具有圆角的正方形UDA文件,其中内部嵌套了5个小子孔径:五边形、六边形、椭圆形、矩形和圆形。注意,不需要执行BRK命令来将REC、ELI、POL和CIR实体与ARC和LIN实体隔开,因为REC、ELI、POL和CIR都可定义独立孔径:
LIN -1 2 LIN 1 2 ARC 1 1 90 12 LIN 2 -1 ARC 1 -1 90 12 LIN -1 -2 ARC -1 -1 90 12 LIN -2 1 ARC -1 1 90 12 REC 1 1 .3 .5 -30 ELI -1 -1 .6 .2 15 POL 1 -1 .5 5 0 POL -1 1 .5 6 0 CIR 0 0 .3

下一部分: