ログイン    検索  



新しいトピックを投稿する トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
 記事の件名: ユーザー定義面のコンパイル方法
 投稿記事 Posted: 2009年6月01日(月) 15:15 
管理人

登録日時: 2008年8月01日(金) 16:43
記事: 136
ユーザー定義面とは?
面は光学材料の境界を定義します。面は屈折、反射、回折、または勾配屈折率などを有することができます。ZEMAXは65種類以上の異なる面タイプをサポートしています。これらには多項式面、バイコーニックゼルニケ面などごく一般的な面形状を含みます。

しかし、時にはユーザー自身のニーズに合わせてカスタマイズしたものが望ましい場合もあります。このような場合にユーザー定義面が非常に有用です。ZEMAX社に機能追加として新たな面タイプをリクエストすることはいつでも可能ですが、ZEMAX社ではバージョンアップを行う際、世界中のユーザーから寄せられた要望の中からより多くのユーザーにご満足いただけるものを選び、優先順位の高いものから開発を進めております。よって、いただいた要望の全てに対して必ず追加されるという確約は非常に困難なため、ZEMAXではこれをユーザー自身でも行えるインタフェースを提供しています。

ユーザー定義面は、ユーザーが望む任意の面形状、位相、伝達関数、勾配屈折率、およびこれらの任意の組み合わせを実現可能にするコンパイルされた関数であるWindows DLLを使用します。ユーザー定義面はパラメトリック手法を用いるか、データファイルに基づく手法を用いるか、あるいはこれら両方を組み合わせた手法を用いることができます。

このトピックではZEMAXと共に提供されているサンプルをスタート点として、ユーザー定義面をコンパイルするのに必要な手順を説明いたします。ここでは面のコーディングに含まれる個別問題に言及するものではありません。本トピックの最後に参照先リストがありますので、そちらをご覧ください。

ユーザー定義面は、所望の面形状の数学的な表現が明確で、わずかなプログラミングの経験があれば比較的容易に作成できます。ZEMAXでは簡単に始めることができるようにサンプルファイルを同梱しております。ここでいつも困難な点は、所望の面を定義するために必要な数学的関数を理解することです。

最初の作業は仕様を定義することです。次にZEMAXの中で希望する面に最も近い面タイプを選び、マニュアルの該当する面タイプの記述をお読みください。同様の形式で必要な面の仕様を作ります。その面のテキストベースの説明を書き、サグの式、位相式などを必要に応じて与え、レンズデータエディタ、エクストラデータエディタ中の各パラメータがそれぞれ何をするかをリスト化します。最後に、その面が最初に使われるときのパラメータの初期値を考えます。例えばStandard Surfaceを最初に挿入すると曲率半径は無限大、厚さはゼロ、コーニック定数はゼロに設定されています。この”セーフデータ”があなたの面では何であるべきかを考えます。

次にマニュアルのユーザー定義面のセクションを再び参照します。多くのサンプルファイルがありますので、希望するものに最も近いサイプルファイルを見つけ出し、これをスタート点として使います。提供されているサンプルをスタート点とすることにより、ZEMAXと通信させるためのコードが既に記述されていますので、面のプログラミングだけに集中することができます。

要件に最も近いサンプルファイルが見つけたら、そのソース ファイル(拡張子.cで終わるファイル)をコピーし、新しい名前で保存します。この例ではus_arrayeven.cが、今回の要件に最も近いファイルです。このファイルは{zemaxroot}/dllフォルダにあります。この面は偶数次非球面の矩形アレイを定義します。このファイルのコピーを作り、これにmyarray.cと名前をつけます。


トップへ 
   
 
 記事の件名: Microsoft Visual C++ Version 6によるユーザー定義面のコンパイル方法
 投稿記事 Posted: 2009年6月01日(月) 15:21 
管理人

登録日時: 2008年8月01日(金) 16:43
記事: 136
Microsoft Visual C++ Version 6によるユーザー定義面のコンパイル方法
まずMicrosoft Visual C++ version 6を起動します。File > NewをクリックしてWin32 Dynamic Link Libraryを選択します。プロジェクトに名前をつけ、オブジェクト ファイルを保存するディレクトリを選択します:
添付ファイル:
user1.gif
user1.gif [ 13.53 KiB | 表示回数: 744 回 ]


今回はプロジェクト名をMy_asphereとして、OKをクリックし、空のプロジェクト作成を選択します:
添付ファイル:
user2.gif
user2.gif [ 11.17 KiB | 表示回数: 744 回 ]


これはこのプロジェクトがファイルの追加を待つ空の状態であることを意味します。左のエクスプローラツリーで“File View”を選択し、“Source Files”で右クリックし、“Add Files from Folder”を選択します:
添付ファイル:
user3.gif
user3.gif [ 11.14 KiB | 表示回数: 744 回 ]


開いたダイアログで{zemaxroot}/dllを探し、myarray.cを選択します。このトピックの1ページ目の下部のインストラクションに従って作成したus_arrayeven.cのコピーであることに注意してください。

次に、上図プロジェクト ウィンドウ枠中で“Header Files”を右クリックし、“Add Files From Folder”を選択し、{zemaxroot}/dllフォルダにあるファイルusersurf.hを追加します。プロジェクト ウィンドウ枠は次のようになります:
添付ファイル:
user4.gif
user4.gif [ 14.44 KiB | 表示回数: 745 回 ]


最後のステップとして、実際にファイルに変更を加える前にしなくてはならないことは、Microsoft Visual C++ 6のコード生成オプションを選択することです。Project>Settingsをクリックします:
添付ファイル:
user5.gif
user5.gif [ 14.66 KiB | 表示回数: 745 回 ]


左にあるプロジェクトツリーでこのプロジェクト自身を選択し、C/C++タブでCategory > Code Generationを選択し、そしてUse Run-Time Library > Multithreadedを選択します。次にBuild > Set Active Configurationを選択し、“Release”を選択します:
添付ファイル:
user6.gif
user6.gif [ 6.85 KiB | 表示回数: 743 回 ]


これが必要なコンフィギュレーションの全てです。コンパイラが動作することを試験するため、簡単な変更を加えます。プロジェクトエクスプローラでmyarray.cをダブルクリックして開きます:
添付ファイル:
user7.gif
user7.gif [ 24.96 KiB | 表示回数: 47 回 ]


“strcpy(UD->string,"Even Array");”と書いてあるCase 0の行を探し、面の名前を“My Even Array”に変更します。この行は次のようになります:

strcpy(UD->string,"My Even Array");

そしてBuild > Rebuild Allを選択します。このDLLがエラー無しにコンパイルされるはずです:
添付ファイル:
user8.gif
user8.gif [ 4.73 KiB | 表示回数: 742 回 ]


このDLLをproject's /releaseフォルダから{zemaxroot}/dllフォルダに移動します。
ZEMAXを起動し、面タイプからuser definedを選択し、Surface DLLのプルダウンメニューからMy_Asphere.DLLを選択します:
添付ファイル:
user9.gif
user9.gif [ 11.25 KiB | 表示回数: 740 回 ]


レンズデータエディタでは事前に与えられた名前が表示されます:
添付ファイル:
user10.gif
user10.gif [ 8.2 KiB | 表示回数: 741 回 ]


これでユーザー定義面のコンパイルに成功しました。


トップへ 
   
 
 記事の件名: 他のコンパイラの使用方法
 投稿記事 Posted: 2009年6月01日(月) 15:22 
管理人

登録日時: 2008年8月01日(金) 16:43
記事: 136
他のコンパイラの使用方法
他のCコンパイラもマルチスレッドのWindows dllプロジェクトが生成できる限りどんなものでも使用することができます。入手可能なコンパイラは数多く存在し、残念ながらそれら全てについてのテクニカルサポートを提供することはできません。
他のコンパイラをお使いの場合、プログラムのテクニカルサポートへの質問は:

どうしたら空のマルチスレッドWin32 DLL プロジェクトを作成できるか?

他のコンパイラの場合でも前述の手順が役に立つかと思います。


トップへ 
   
 
 記事の件名: まとめと参照文献
 投稿記事 Posted: 2009年6月01日(月) 15:26 
管理人

登録日時: 2008年8月01日(金) 16:43
記事: 136
まとめと参照文献
このトピックではMicrosoft Visual C++ version 6を使用したユーザー定義面のコンパイルのメカニズムを説明しました。
特定の面の記述方法は説明しておりませんが、これらについては以下のZEMAX社Knowledge Baseのトピック(英語)が
ご参考になると思います。

How to Create a User-Defined Scattering Function
http://www.zemax.com/kb/articles/219/1/How-to-Create-a-User-Defined-Scattering-Function/Page1.html
How to Create Binary IMA and BIM Files
http://www.zemax.com/kb/articles/217/1/How-to-Create-Binary-IMA-and-BIM-Files/Page1.html
How To Read a Static Data File into a User-Defined Surface
http://www.zemax.com/kb/articles/214/1/How-To-Read-a-Static-Data-File-into-a-User-Defined-Surface/Page1.html
How to Write User-Defined Surfaces with Waterloo Maple
http://www.zemax.com/kb/articles/87/1/How-to-Write-User-Defined-Surfaces-with-Waterloo-Maple/Page1.html
How to Model a Slicer Mirror Using a User-Defined Surface
http://www.zemax.com/kb/articles/83/1/How-to-Model-a-Slicer-Mirror-Using-a-User-Defined-Surface/Page1.html


トップへ 
   
 
期間内表示:  ソート  
 
新しいトピックを投稿する トピックへ返信する  [ 4 件の記事 ] 


 
トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
cron