如何在OpticStudio中创建多边形物体

概述

在OpticStudio中,使用多边形物体 (Polygon Object, POB) 是创建用户自定义几何体的常用方法之一。本文介绍了如何创建多边形物体、定义物体表面以及如何在非序列编辑器中使用该物体。


介绍

多边形物体是由多个三角形或矩形面构成的三维空间几何体,其中三角形或矩形面的顶点由一个ASCII文本文件定义。该文本文件包含有多行数据,并且可以使用任意文本编辑器进行编辑。其中每行数据以单个字母或符号为起始,数据跟随在字母和符号之后。有关所有符号及其语法的详细描述请参考帮助系统中的“Polygon Object”一节。

为了全面展示如何创建多边形物体、定义多边形物体的每个表面、将文件保存在哪里以及如何加载到OpticStudio中,我们将在下文中创建一个立方体来展示多边形物体的功能。一个立方体需要定义6个表面和8个顶点。我们可以使用OpticStudio支持的三角形或矩形符号来连接各个顶点。

首先打开一个空白的文本文档。在POB文件以中叹号 (!) 为起始的行表示该行为备注行。在定义多边形物体时使用备注行来描述该物体是十分有用的,它可以在之后使用时帮助您快速了解该文本文件创建了什么样的物体。

让我们先定义立方体的8个顶点。用来定义顶点的符号为:V。定义顶点的数据行必须以符号V起始,并在符号后定义顶点编号及X, Y, Z坐标:

V number X Y Z

其中number用来讲点编号,它将在之后用于构建三角形或矩形面。对空间坐标点进行编号可以使我们每次使用该空间坐标时无需输入该点的坐标值,这对于定义拥有许多顶点的多边形物体来说是十分方便的。

多边形物体顶点的XYZ坐标是参考于局部原点 (0, 0, 0) 的。需要注意的是多边形物体的(0, 0, 0)坐标在非序列编辑器中是全局位置。

因此,让我们假设将立方体的原点设置为前表面的中心,并设置立方体的尺寸为10*10*10。此处的坐标单位为当前系统的镜头单位。如果当前系统的镜头单位为毫米,则立方体的尺寸为10mm*10mm*10mm;如果当前系统的镜头单位为英寸,则立方体的尺寸为10inches*10inches*10inches。

如上图所示,分别定义8个顶点的坐标。顶点的空间位置关系如下图所示:

需要注意的是我们还未连接任何顶点。上图中的实线只是出于展示目的来帮助我们分辨立方体的外形和顶点的空间位置。

其中立方体前表面上的箭头表示局部坐标轴方向,它位于多边形物体的原点。每个物体的局部坐标轴都可以在对应物体的物体属性 (Object Properties) > 绘图 (Draw) 中选中显示局部坐标轴 (Draw Local Axis) 来显示:


连接顶点

上一节中我们定义了所有的顶点坐标,现在我们需要连接各个顶点组成矩形面来构建立方体。定义矩形面的符号为:R。其中构建矩形面需要四个顶点编号及两个额外参数:

R vertex1 vertex2 vertex3 vertex4 isreflective face

顶点编号必须为整数,并且是文本文件中已经定义顶点的编号。其中编号的定义顺序并不是任意的,编号的顺序必须为所构建矩形顶点的逆时针或顺时针顺序。如下图中右侧显示的交叉顺序是不支持的:

举例来说,如下数据行将连接顶点1,2,3,4来定义立方体的前表面:

R 1 2 3 4 0 0

其中isreflective标识可以为-1, 0, 1三个整数之一。其中标识0表示透射,标识-1表示吸收,标识1表示反射。多边形物体的每个表面都可以根据需要定义为反射、透射和吸收。如果上例中isreflective标识设为1,则所有到达立方体前表面的光线都将发生反射,其语法为:

R 1 2 3 4 1 0

多边形物体的表面属性也可以在物体属性的膜层/散射标签栏中定义:

需要注意的是,在膜层/散射标签中定义的表面属性将覆盖POB文件中定义的表面属性。也就是说,如果POB文件其中一个面设为反射,则可以在不打开编辑文本文件的情况下,在膜层/散射标签中将该表面的表面属性改为吸收。如果该选项选择为“物体默认 (Object Default)”,则OpticStudio将使用POB文件中定义的表面属性。

数据行中的face标识用来定义该表面属于哪个表面组。我们将在下文中详细讨论。

因此,为了完成立方体的构建,我们需要定义所有6个矩形表面,其中每个表面的表面属性为透射:


保存和加载POB文件

定义完的多边形物体文件需要保存在Zemax根目录下的Objects > Polygon Objects文件夹中。并且文件的扩展名必须为.POB。我们将前文创建的POB文件保存为KBCUBE.POB文件。

当我们想在OpticStudio非序列模式中使用该POB文件时,我们需要将物体的物体种类设为多边形物体。在数据文件 (Data File) 下拉菜单中选择KBCUBE.POB文件,如下所示:

打开非序列实体模型 (NSC Shaded Model) 视图,我们可以看到前文中所创建的立方体模型:


对表面分组

目前我们定义的立方体只含一个表面分组。换句话说,当我们需要定义立方体的膜层或表面散射属性时只能同时对6个表面进行定义。打开物体属性的膜层/散射标签,我们可以看到在表面下拉菜单中只有一个名为Face 0的分组,它表示立方体的所有表面。

同时,在物体编辑器 (Object Editor) 中选中Face 0表面组会看到立方体的所有表面都被选中并高亮显示为橙色。

我们可以在POB文件中对不同表面进行分组。如此一来,我们可以对不同表面组的表面定义不同的表面属性。表面组的名称和序号需要在POB文件的开头进行定义,其中定义符号为C。该定义的语法如下所示:

C facebumber “任意名称”

其中facenumber为整数,用来定义表面组的序号,该序号用于后续三角形或矩形表面构建时进行分组使用。表面组的名称可以为任意便于区分的名称。

在本例中,我们将定义前表面、后表面和4个侧面为三个表面组。我们需要在定义顶点的数据行之前,定义表面组名称,如下所示:

上文中当我们定义矩形面时,数据行中包含有一个标识用于定义表面组。此处,我们需要更改每个矩形面表面组的标识序号。其中用于定义前表面的矩形,表面组标识为1;用于定义后表面的矩形,表面组标识为2;用于定义侧面的矩形,表面组标识为0:

完成每个面的表面组序号设置后保存文本文件并重新加载该POB物体。我们可以看到表面下拉菜单中包含了三个表面分组:

这样一来,我们可以单独对Side Face分组的表面(POB文件中表面分组序号为0的表面)定义任意表面属性。同样的,当选择其他表面分组时(例如序号1,前表面),我们可以定义不同的表面属性。

我们可以通过物体编辑器查看所选表面分组中包含的表面。其中选中的表面将高亮显示为橙色:


注意事项

在使用多边形物体时有以下几点需要特别注意:

·当使用POB文件表示空间几何体时,确保POB文件中定义的矩形/三角形表面闭合为一个封闭的体积(也可以使用多边形物体在非序列编辑器中的额外数据“是实体? (Is Volume ?)”来定义封闭的空间几何体)。

·在定义矩形时,顶点的定义顺序不能交叉。交叉会导致光线追迹产生错误。

·多边形物体中没有三角形/矩形表面的数量上限。它是由计算机内存的容量决定。其中每个三角形表面大约需要100比特的存储空间。然而OpticStudio通常会在同一时间保多个透镜数据的副本,因此OpticStudio存储一个三角形表面的实际空间约为500比特。

在OpticStudio中内置有一个示例宏程序可以用来生成不同类型的多边形物体,且无需定义每个顶点。该宏程序名称为Polygon.ZPL,它保存在Zemax根目录下的Macros文件夹中。在使用时,宏程序需要用户输入物体的表面半径(表面不一定为圆形)、表面的边数、多边形物体的长度以及长度的分段数量。更多细节信息,请阅读示例宏程序的语法。


小结

在OpticStudio中使用多边形物体是一种非常灵活的创建用户自定义物体的方法。通过简单的ASCII文本文件,您可以定义任意由顶点连成的三角形或矩形所组成的空间几何体。在POB文件中可以对每个表面进行分组,每组中可以包括一个或多个表面。用户可以根据分组,简单快速的定义不同分组表面的表面属性。