はじめに ZEMAXは他のWindowsプログラムがZEMAXとコミュニケーションリンクを確立し、そのプログラムがZEMAXからレンズに関するデータを取得することのできる非常に強力な機能を提供しています。これはエクステンションと呼ばれます。概念としては光学系の作成やその光線追跡にはZEMAXを使い、そのデータを他のプログラムに送り、更なる解析や計算を行うということです。
アプリケーションとZEMAX間のコミュニケーションはDynamic Data Exchange (DDE)を使っておこなわれます。DDEはプログラム間でのデータの共有のために定義されているWindowsオペレーティングシステムで定義されているプロトコル(手順)です。二つのプログラムがDDEリンクを確立でき、一つのプログラムが“サーバー“として、他方が”クライアント“として動作します。クライアントは通常サーバーから特定のデータを要求し、サーバーはデータをクライアントに返します。ZEMAXはサーバーとなり、あらゆるWindowsプログラムは的確な修正によりクライアントとなることができます。
WindowsのDDEプログラミングが苦手な方には向かないことは明らかです。なぜなら、DDEプログラミングにはかなり高度なプログラミングスキルとメッセージループ、DDE、ポインター、アトム、そしてグローバルハンドルにかなり精通していなければなりません。しかしZEMAXとの通信に使用されるほとんどのコードはあらゆるDDEクライアントプログラムに共通の標準"boiler plate(ボイラープレート)"コードです。このコードの全ては既に書きこまれており、ZCLIENTという単一ソースコードモジュールプログラムに集約されています。ZCLIENTはソースコード形式でZEMAXと共に提供され、(著作権が維持される限り)自由にコピーして新たなエクステンションの中で使用することができます。
ZCLIENTはZEMAXとの全ての通信を透過的に取り扱います。ZCLIENTに埋め込まれているのは"UserFunction"という名前の単一関数への呼び出しです。この関数はユーザーが用意する別のCプログラムで挿入され、ZCLIANTと共にコンパイルされてエクステンション実行ファイルを形成します。
このトピックはZCLIANTを使ってユーザー記述のCプログラムをZEMAXにリンクする簡単な"hello world"プログラムの作成法を説明します。このプログラムはZEMAXからひとつの情報(現在ロードされているファイルの名前)を取り出し、そのファイルにひとつの変更を加えて(フィールド点3番に(x=20, y=20)の値をもたせる)情報の受信とコマンドの送信をデモンストレーションします。
重要点:作成するアプリケーションプログラムはZEMAXのグラフィカルインタフェースに表示されているのと異なるファイルに作用させることができます。もしそのプログラムがレンズデータを変更し、その変更されたデータをグラフィックインタフェースで観察したい場合、アプリケーションが作用するレンズデータをZEMAXの正規ユーザーインタフェースに“Push”する必要があります。その方法はこのトピックに説明があります。しかしながらこれを可能にするためFile -> Preferences -> Editors での設定が必ず必要です:
添付ファイル:
Hello0[1].gif [ 13.57 KiB | 表示回数: 968 回 ]
アプリケーションで、現在開かれているZEMAXセッションのエディタや解析ウインドウのデータを変更したい場合、“Allow Extensions To Push Lenses”をチェックしなくてはなりません。
このコントロールはエクステンションプログラムによる現在のユーザーインタフェースのデータの偶発的な消去を避けるために提供されています。