ZPL からソルブを設定する方法

この記事では、光学系の効率的なソルブ設定を実現する簡単な ZPL コードを紹介します。

著者 Mark Nicholson

Introduction

大規模で複雑な光学系では、ソルブを定義することで設定や計算に要する時間を短縮でき、効果的です。ソルブは手作業でも設定できますが、必要なソルブが多くなると面倒で長時間を要する作業になります。このような負担を削減するには、手作業を Zemax プログラミング言語 (ZPL) によるマクロに置き換えます。この記事では、そのような機能を実現するマクロ コードを紹介します。この記事は、「複雑なフレネル レンズをモデル化する方法」の姉妹編です。

 ZPL によるソルブの設定

ソルブの作成では、エディタの次のようなダイアログ ボックスで目的の設定を手動入力します。
 

thickness solve on surface 1

 

この操作に相当する 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

この記事は役に立ちましたか?
8人中1人がこの記事が役に立ったと言っています

コメント

0件のコメント

サインインしてコメントを残してください。