設計者コラム
#123 Zemaxマクロで使える変数領域
Zemaxマクロを作っていると、外部から何かの初期値を設定したい場合ばあります。
例えば光学系の焦点距離を指定値にしたいとか、特性値を一括出力する際のコンフィグレーションの番号などです。
マクロの中に設定値を持たせて、都度これを書き換えるという方法もあります。
これは結構面倒ですし、複数のプロジェクトファイルで同一マクロを使う場合に設定値が干渉する恐れもあります。
回避策はあって、コメント欄を使うとか、相対瞳座標や相対像高の欄を一時的に使用して、マクロ側から読み取るなどの方法です。
これらの場合はプロジェクト間で設定値が干渉する恐れはなくなるのですが、パラメータ値を変数化することができません。
何かの値を設定しつつ、これを最適化時にある程度動かそうとする場合には困ったことになります。
これに対する一つの解決策が面の設定パラメータを使う方法です。
例えば"標準面"では非球面係数を設定することはできません。面のプロパティを偶数次非球面などに設定して初めてこのようなパラメータを入力することが可能になります。
ところがコレ、GUIに設定箇所が現れないだけでどうやら内部的には値の設定が可能なようです。
そしてこのような使われていない&入力できない領域に関して、マクロで読み書きが可能です。
また、例えば"標準面"に対して、マクロ側から偶数次非球面係数を設定しても都合が良いことに光線追跡には全く影響を与えないようです。
設定パラメータを読み出す場合には、
parm(パラメータ番号, 面番号)
とすれば良く、
書き込みにはマルチコンフィグレーションに"PRAM"を加えて、目的の面番号とパラメータ番号を設定すればOKです。
このパラメータ番号ですが、例えば100番などを使用します。
標準面にパラメータ番号100番などは存在しませんが、内部的に変数領域は確保されているらしく読み書き可能です。
またマルチコンフィグレーションにPRAMを設定することで、最適化を行う際の変数属性を付けることも可能になります。
マニュアルにも記載のない方法ですので、保証外です。
また今、この技が可能だとしても将来のバージョンアップなどによって塞がれてしまうこともあるかもしれません。

