ZEMAX Users' Knowledge Base

User Defined Features

This section contains articles on writing and compiling dll based user-defined features, such as user-defined surfaces, scattering functions and NSC objects.

    If you have developed a user-defined surface, object etc for ZEMAX, and need to recompile it to work with the 64-bit version of ZEMAX, it's easy. Changes need to be made to the source code to compile x32 or x64 compatible DLL’s. All that needs to change is a setting in the compiler.

    This article explains how to create user-defined surfaces of revolution for use in the non-sequential mode of ZEMAX. Examples employing the Bezier curve and a cubic spline curve are provided. 

    This article explains how to write a DLL for a user-defined scattering function. An example of a Gaussian X-Y probability function is given.

    This article explains how to read static data from a text file into a user-defined surface.


    How to Compile a User-Defined Surface

    This article explains:
    • What user-defined surfaces are
    • How to compile a user-defined surface using Microsoft Visual C++ version 6
    • How to use other compilers

    This article is also available in Japanese.


    This article describes the BSDF Data Interchange file format, as developed by Radiant Imaging, Inc. This file format is required for the user-defined scattering function RI_BSDF.DLL, which is used to apply a scattering distribution as provided by tabular BSDF data on a non-sequential surface.

    This article illustrates use of the Henyey-Greenstein distribution to model bulk scattering.

    This article describes how to model an unusual surface - in this case an imaging slicing mirror - by using the user-defined surface capability of ZEMAX. In addition, Physical Optics propagation is also used to compute cross-talk between channels.

    This article shows how to create ZEMAX user-defined surfaces using the Waterloo Maple mathematics package.