コプトン光学設計(ロゴ)

レンズ設計・製作、技術・ノウハウ移転サポート

コプトン光学設計コプトン光学設計




設計者コラム

#028 ZEMAXユーザ定義面

ZEMAXには標準で色々な面が用意されています。
通常球面の標準面、レンズ設計で良く使われる偶数次非球面などです。
大抵は用意されている面で何とかなるのですが複数の面タイプが複合している場合など、時々ムリな場合があります。
そのような時の解決法の一つとして、ユーザ定義面(UDS : User Defined Surface)機能を使う方法があります。
今までノータッチだったのですが興味半分、必要半分で仕様詳細を見てみました。
CかC++のソースとして面定義を行うのですが、ソースコード中で基本的には面のサグ、近軸光線追跡、実光線追跡の計算をやれば良いようですね。
実際には初期化やエラー処理なども必要です。これらをコンパイルしてDLL作成すればOKです。
ZEMAXでは開発環境として暗に?MicrosoftのVisual Studioを推奨している節があるのですが、ちょっと試しにDLL作成をするだけですので今回はgccを使ってみました。
gccは元々UNIX系環境のコンパイラですが、Windowsにも移植されています。私もgccに関しては20年以上の使用経験があるので使い勝手が良いという理由もあります。
Windows版のgccはMinGWと呼ばれていますが、WindowsもZEMAXも最近は64bit化していますので、DLLもそれに合わせて64bitコンパイラで作成する必要があります。
そのようなわけで今回はMinGW-w64というパッケージを使用しました。
下図はMinGW-w64のインストール時の設定画面です。

MinGW-W64

このパッケージでは32bit版のgccもインストールすることが出来てしまうので、設定画面のArchtectureでは必ずx86_64を選択します。
私の場合、その他の設定は図のようにしています。ThreadやExceptionはこの設定でなくてもちゃんと動作するDLLが出来るかも知れません。
取りあえずZEMAXに付属するUDSのソースコードから、us_stand2.cを選んでコンパイルしてみます。
コンパイル時のコマンドラインは以下のとおりです。

> gcc -shared -o us_stand2.dll us_stand2.c

エラーも発生せずDLL作成が完了するので、DLLファイルを適切に配置すれば使用可能になります。
特にgccでDLLを作成しても問題ないようです。
色々とZEMAXの自由度が増すので、時間を見つけて様々な定義面を作ろうと思います。