Array (non-sequential geometry objects)



This object is a collection of identical objects, based upon a single parent object, arranged in a 3D array. The individual array elements are all functionally identical to the parent object, just as if a copy of the parent object had been placed in each array location. The 3 Axes of the array need not be orthogonal, and are user definable; see the discussion below. The Array object is generally faster to trace and more memory efficient than the equivalent system created using the replicate tool (see " Replicate Object " ) or using an array of similar objects as supported by the Lenslet 1 and Lenslet 2 objects. The Array object is defined by the following parameters:

Parameter # Description Face Name Face #
1 The parent object #. The parent object must precede the array object in the NSC Editor. NA NA
2-4 The number of array elements in the X', Y', and Z' directions NA NA
5-7 The element spacing in the X', Y', and Z' directions in lens units. See the discussion for non-uniform spacing. NA NA
8-10 The direction cosines of the X' axis of the array. NA NA
11-13 The direction cosines of the Y' axis of the array. NA NA
14-16 The direction cosines of the Z' axis of the array. NA NA
17-19 The element tilt in degrees about the X, Y, and Z directions. Note these tilts are about the "normal" local X, Y, and Z axes, and not the user defined X', Y', and Z' axes. NA NA
20

Draw Limit. If the product of the number of elements in each direction (Nx x Ny x Nz) exceeds the Draw Limit, the individual array elements will not be drawn. Instead, a simple box that approximates the size of the array is drawn. This feature is intended to speed up the rendering of the array object when the number of elements is large.

Note that the size of the bounding box is based on the distance between array elements as well as the radius of a sphere that would encapsulate the parent object of the array. For cases in which the parent object is highly asymmetric (e.g. long and skinny), the radius of the encapsulating sphere can be very large and the resulting size of the bounding box can be much bigger than the actual size of the physical array.

NA NA
21 Draw Boundary NA NA
22-30 The non-linear spacing coefficients, see the discussion below. NA NA
31-33 The maximum dimensions of the array in the X', Y', and Z' directions. These values are not set by the user. The values are computed based upon the spacing coefficients and the number of elements defined. The optimization operands NPGT, NPLT, and NPVA may be used to constrain the overall size of the array while optimizing the non-linear spacing coefficients. The maximum dimensions reported in these parameter values is the center-to-center spacing from the first to the last array element in each direction, and does not consider the size of the individual array elements. NA NA

The parent object may be any object type, except for a source, detector, or another array object. If the parent object has the "Object Is A Detector" box checked, this property will be ignored in the array elements. To create an array of sources, see the " Sources " settings in the Object Properties.

The number of array elements in the 3 directions may in principle be any number, however, very large arrays may require excessive computation time or computer memory to ray trace or render (see parameters 20 and 21 for settings to eliminate the rendering of large arrays).

The array elements are arranged on a 3D grid where the grid axes are not necessarily the usual orthogonal XYZ axes. The X', Y' and Z' axes default to the normal orthogonal local axes, however, any non-parallel orientation for the axes may be defined by specification of the direction cosines for the primed axes. The array positions are computed for the element with index ijk (i for X', j for Y', k for Z') according to the following expression:

, where



and the Xx, Xy, Xz values are cosines defining the X' axis (parameters 8, 9, and 10), and similarly for Y' and Z', and the Δ1 values are the element spacings along the axes (parameters 5, 6, and 7). Note that the direction cosine vectors are always normalized automatically. Once the array element is located, the local rotation about the X, Y, and Z axis is performed, in a manner identical to the usual coordinate rotations (see "Object Placement").

The Δ1 values in the three directions are used to define a uniform spacing of the array elements. However, a non-uniform spacing may also be defined using parameters 22-30. The position of the array elements along the X' direction is in general defined as

where Δ1  is the uniform spacing (defined by parameters 5, 6, and 7 for X', Y', and Z', respectively), the index "i" goes from 0 to nx-1 (nx is the number of elements in the X' direction), and the Δk  coefficients are the kth order terms measured in lens units. If any of the Δk  coefficients are non-zero, the array spacing will be non-uniform. A similar expression and set of coefficients is available for the Y' and Z' directions. The net spacing between any two adjacent elements cannot be negative. Be careful not to define the non-linear coefficients in such a way that the spacing between the elements changes sign causing the array to fold back on itself.

Most properties of the Array object are defined by the parent object. The exceptions, which may be distinct for the array object and the parent object, are the "Rays Ignore This Object" and the "Do Not Draw Object" settings. All other properties, including face definition, material, coatings, scattering, diffraction, or gradient index proper- ties, are as defined for the parent object, and the array object settings will be ignored. If the parent object is not needed, use the "Rays Ignore This Object" and "Do Not Draw Object" settings on the parent object (See "Type tab" and "Draw tab"). The array will still be created and ray traced even if the parent object is not drawn or ray traced. Note that rays striking an array object will report hitting the parent object number, not the array object number. For this reason, when using ZRD files, optimization operands, or filter strings, the object number used to refer to ray data should be the parent object number.

When nesting array objects inside or outside other objects, the usual nesting rules apply. For more information see "Nesting volumes". However, it is the placement of the parent object in the NSC Editor, and not the array object, that determines the nesting rules. Specifically, if an array object is to be nested inside of another, outermost object, the parent object must follow the outermost object in the editor.

Next: