この記事では、光学系の効率的なソルブ設定を実現する簡単な ZPL コードを紹介します。
著者 Mark Nicholson
Introduction
大規模で複雑な光学系では、ソルブを定義することで設定や計算に要する時間を短縮でき、効果的です。ソルブは手作業でも設定できますが、必要なソルブが多くなると面倒で長時間を要する作業になります。このような負担を削減するには、手作業を Zemax プログラミング言語 (ZPL) によるマクロに置き換えます。この記事では、そのような機能を実現するマクロ コードを紹介します。この記事は、「複雑なフレネル レンズをモデル化する方法」の姉妹編です。
ZPL によるソルブの設定
ソルブの作成では、エディタの次のようなダイアログ ボックスで目的の設定を手動入力します。
この操作に相当する ZPL マクロのキーワードは SOLVETYPE です。
構文は次のとおりです。
SOLVETYPE surf, CODE, arg1, arg2, arg3, arg4
surf
は、ソルブを設定する面の番号を指定し、CODE
はソルブのタイプを定義します。arg1-4
は、ソルブ ダイアログで現在グレイアウト表示されているフィールドに入力するデータを指します。
この設定はきわめて容易です。
純粋なノンシーケンシャル モードでも、やや難しくなるだけです。ノンシーケンシャル光学系では、独立した面ではなくオブジェクトを使用し、オブジェクト自体に複数の面があるからです。
このことから、surf
には 1 を設定し、CODE
には、ソルブ タイプのほかに、ソルブで参照するオブジェクト番号も指定する必要があります。
さらに、ピックアップ ソルブの場合は、ソルブを適用するオブジェクトのパラメータ番号も参照する必要があります。
この場合の CODE
の構文は NSC_PP_o_p です。o はオブジェクト番号、p はパラメータ番号です。
ZPL には、数値を文字列に変換する $STR() 関数があることから、このコード作成は容易です。
! This macro puts pickup solves on parameters 17-26
! of objects 2-5 so that they pick up from the same
! parameter on object 1
from_object = 1
scale_factor = 1
offset = 0
column = 0 #shorthand for 'same column' as the parameter the pickup is on
FOR object = 2, 5, 1
FORMAT 1 INT
object$ = "NSC_PP_" + $STR(object) + "_"
FOR parameter = 17, 26, 1
code$ = object$ + $STR(parameter)
SOLVETYPE 1, code$, from_object, scale_factor, offset, column
NEXT parameter
NEXT object
END
オブジェクト番号とパラメータ番号を使用するように文字列 code$ を設定したうえで、ピックアップ元オブジェクトをオブジェクト 1 (from_object = 1)、倍率を 1 (scale_factor = 1)、オフセットを 0 (offset = 0) として、ソルブ設定先と同じ列からピックアップするように、SOLVETYPE
を使用してすべてのパラメータにピックアップ ソルブを容易に設定しています。
KA-01490
コメント
サインインしてコメントを残してください。