ZOS-APIユーザー向けのサンプル コード

この記事では、OpticStudioをインストールする際に提供されるZOS-APIサンプル ファイルの概要を説明します。この機能の初心者に役立ちます。

著者 Tess Jacobs and Sandrine Auriol

Introduction

OpticStudioは、外部プログラムはOpticStudioが開かれたインスタンスと直接通信する (インタラクティブ モード) か、バックグラウンド プロセスとして実行する (スタンドアロン モード) ことを可能にするアプリケーション プログラミング インターフェイス (ZOS-API) を備えています。APIにはたくさんの機能が存在し、OpticStudioの将来のリリースで引き続き構築されます。

この記事では、APIと互換性のある4つの完全にサポートされたプログラミング言語 (MATLAB、Python、C ++、およびC#) で利用可能な資料の概要を説明します。

モード

アプリケーションプログラム(MATLAB、Python、C ++、C#など)とOpticStudioの間の接続は、4つのプログラムモードのいずれかに分類されます。これらのモードは、プログラミング...ZOS-APIヘルプ...ZOS-API紹介のヘルプファイルで説明されています。

これらのモードの説明は以下の通りです。

 

モード

          

説明 CS Cpp Matlab Python
スタンドアロンアプリケーション このモードでは、OpticStudioのまったく新しいインスタンスを起動する必要があります。(他のモードは、既に開いている既存のインスタンスの存在に依存します)。そのため、このモードでアプリケーションを起動する前に、OpticStudioの1つ以下のインスタンスが既に開いていることを確認する必要があります(OpticStudioのライセンスの制約内に留まるため)。このモードでは、OpticStudioはユーザーインターフェイスなしで効果的に実行されます。 v v v v
インタラクティブ拡張

インタラクティブ拡張モードは、既に開いているOpticStudioのインスタンスに接続します。OpticStudioのインターフェースは、このモードで実行されたときにプログラムに加えられた変更により最新の状態に保たれます。
この機能により、OpticStudioが起動できるコンパイル済みの実行可能なファイルがないMATLABやPythonなどのスクリプト環境からの接続が可能になることを除いて、ユーザー拡張とほぼ同じです。

    v v
ユーザー拡張 このモードは、OpticStudioで開いたインスタンスから起動され、レンズ設計とユーザーインターフェイスを完全に制御します。「ユーザー定義ツール」のようなものです。このモードで実行されたときにプログラムで行われた変更でユーザーインターフェイスを最新の状態に保つかどうかを決定するトグルが提供されています。
このモードは、廃止されたDDE拡張機能に近いものです
v v    
ユーザー解析 このモードは、単一の解析ウィンドウにリンクされています。このモードは、カスタム解析用のデータの入力に使用されることを除いて、ユーザーオペランドモードとほぼ同じです。データは、ほとんどの解析でOpticStudioで提供される最新のグラフィックスを使用して表示されます。 v v    
ユーザーオペランド  このモードは、メリット ファンクション エディターのユーザー定義のオペランドにリンクされており、UDCオペランドを使用してエディターに追加されます。このモードでは、現在のレンズシステムまたはユーザーインターフェイスを変更できません(つまり、このモードでは、システムのコピーの変更のみが許可されます)。必要に応じて解析の新しいインスタンスを常に実行できるため、このモードではファイル内の開いている解析のリストへのアクセスは提供されていません。 v v    

 

OpticStudio 17では、ZOS-API用のプログラム内ヘルプシステムがあります。このヘルプファイルは、わかりやすく設計されており、4つの環境 (C#、C ++、MATLAB、およびPython) の例が含まれています。ヘルプファイルにアクセスするには、プログラミング... ZOS-API ヘルプ ... ZOS-API シンタックス ヘルプまたはヘルプ... ZOS-API シンタックス ヘルプをクリックします。 

ZOSAPI Syntax Help File - Examples

 

ZOS-APIシンタックス ヘルプのすべての例は、スタンドアロン アプリケーション モードです。例外はExample 16です。Example 16はユーザー定義のオペランドです。

サンプル コードは、OpticsStudioのすべてのライセンスに含まれています。これらのサンプル コード ファイルは、{Zemax}\ZOS-API Sample Codeフォルダーにあります。これらのフォルダーには、さらに 3 つの例があります。ユーザー定義のオペランド、ユーザー定義の解析、およびユーザー定義の拡張子です。

 

2021年12月31日 付で、SOLIDWORKS と Zemax 製品とのインテグレーションは非推奨となり、今後リリースされる OpticBuilder または OpticStudio のソフトウェアではご利用できなくなります。 詳しくはこちらをご覧ください

スタンドアロン アプリケーション

 

Example# 概要 説明 ファイル名
1

新しいファイルとクイック フォカス

新しいレンズファイルが作成され、サンプル ディレクトリに保存されます。

絞り値が変更され、視野点が追加され、FdCのプリセット波長が選択されます。コメント、厚さ、および半径はLDEで変更されます。F#ソルブは、最後の面の半径に配置されます。最後に、クイック フォーカス ツールが開かれ、実行され、閉じられます。

CSharpStandalone_01_new_file_and_quickfocus.cs

CppStandalone_01_new_file_and_quickfocus.cpp

MatlabStandalone_01_new_file_and_quickfocus.m

PythonStandalone_01_new_file_and_quickfocus.py

2

NSC光線追跡

NSCサンプルファイル(…\Non-sequential\Miscellaneous\Digital_projector_flys_eye_homogenizer.zmx)が開き、光線追跡設定が変更され、光線追跡が実行されます。光線追跡の進行状況が保存および表示されます。追跡後、ディテクタ パラメーター(幅、高さ、ピクセル数など)とピクセルデータが抽出され、ディテクタ ビューアが再作成されてプロットされます。

CSharpStandalone_02_NSC_ray_trace.cs

CppStandalone_02_NSC_ray_trace.cpp

MatlabStandalone_02_NSC_ray_trace.m

PythonStandalone_02_NSC_ray_trace.py
   

3

ファイルを開いて最適化する

APIファイル(…\Samples\API\[language]\e01_new_file_and_quickfocus.zmx)が開き、いくつかの面と半径が変数化になります。空気と材料の厚みを制限し、非点収差とコマ収差をターゲットとするメリットファンクションは、オペランドを挿入してパラメータ値を調整することにより、手動で生成されます。最適化が完了するまで実行され、次にハンマー最適化が10秒間実行されます。

CSharpStandalone_03_open_file_and_optimise.cs

CppStandalone_03_open_file_and_optimise.cpp

MatlabStandalone_03_open_file_and_optimise.m

PythonStandalone_03_open_file_and_optimise.py
 

4

FFT MTFからデータを取得

サンプル ファイル(…\Sequential\Objectives\Cooke 40 degree field.zmx)が読み込まれ、新しいFFT MTF解析ウィンドウが開きます。最大周波数とサンプリングが変更されます。結果が取得され、データ アレーがプロットされます。OpticStudio FFT MTFプロットが再作成されます。

CSharpStandalone_04_pull_data_from_FFTMTF.cs

CppStandalone_04_pull_data_from_FFTMTF.cpp

MatlabStandalone_04_pull_data_from_FFTMTF.m

PythonStandalone_04_pull_data_from_FFTMTF.py
  

5

ZRDファイルの解析

サンプル ファイル(.. \Non-sequential)が開かれ、ZRDファイルの保存中に光線追跡が実行され、ZRDファイルが開かれ、すべての光線セグメント データが読み取られます。

CSharpStandalone_05_Read_ZRD_File.cs

CppStandalone_05_Read_ZRD_File.cpp

MatlabStandalone_05_Read_ZRD_File.m

PythonStandalone_05_Read_ZRD_File.py

6

NSC位相

単純な球面波面を持つファイルは、ディテクタに伝播する点光源を使用して作成されます。ディテクタ ビューアを使用して波面の位相を抽出するのではなく、GetAllCoherentDataSafe()を使用して2Dアレーを抽出し、手動で位相を計算します。GetAllCoherentDataSafe()は、電界の実部と虚部のみを返すため、atan2(image、real)を使用して位相を計算します。C ++では、GetAllCoherentData()を使用して1D アレーを返します。このアレーは、ネストされたFORループで読み取られ、2D位相データを正しい方向で提供します。

CSharpStandalone_06_nsc_phase.cs

CppStandalone_06_nsc_phase.cpp

MatlabStandalone_06_nsc_phase.m

PythonStandalone_06_nsc_phase.py

7

データ一覧からファイルを作成

近日公開…

 
8

光束対波長解析

近日公開…

 
9

NSC CAD

新しいファイルが開き、オブジェクト1がSolidWorksパーツ オブジェクト タイプに変更され、CADファイルが参照されて挿入されます。CADオブジェクトのデータが公開され、フェイス/面データが変更されます。次に、オブジェクトをPOBファイルに直接書き込むことにより、ポリゴン オブジェクト ファイルの作成を示します。キューブはPOB構文を使用して定義され、NSCEに挿入されます。

CSharpStandalone_09_NSC_CAD.cs

CppStandalone_09_NSC_CAD.cpp

MatlabStandalone_09_NSC_CAD.m

PythonStandalone_09_NSC_CAD.py

10

NSC ZRDフィルタ文字列

サンプル ファイルが開かれ、すべてのディテクタがクリアされ、ZRDファイルの保存中に光線追跡が実行されます。ZRDファイルは、ディテクター ビューア ウィンドウで再生され、フィルタ文字列がディテクタに適用されます。光線のヒット数と全光束は、各ピクセルのディテクタから取得されます。Premiumの場合のみ、光路解析ウィンドウが開き、ZRDがロードされ、出力がテキストファイルに保存されます。

CSharpStandalone_10_NSC_ZRD_filter_string.cs

CppStandalone_10_NSC_ZRD_filter_string.cpp

MatlabStandalone_10_NSC_ZRD_filter_string.m

PythonStandalone_10_NSC_ZRD_filter_string.py

11

基本シーケンシャル

新しいシーケンシャル ファイルが作成されて保存されます。システムの絞り値(入射瞳径)とアポダイゼーションタイプが変更されます。厚み、半径、および材料が変更され、長方形のアパチャーが面1に配置されます。レンズのスケーリング ツールを使用して、システム単位をインチに変更します。クイック フォーカスが実行され、ユニバーサル プロットが作成されます。ユニバーサル プロットの設定が変更され、RMSスポットサイズが最後の面の厚みの関数として表示されます。

CSharpStandalone_11_BASIC_SEQ.cs

CppStandalone_11_BASIC_SEQ.cpp

MatlabStandalone_11_BASIC_SEQ.m

PythonStandalone_11_BASIC_SEQ.py

12

シーケンシャルシステムエクスプローラー

新しいファイルが作成され、シーケンシャル システム エクスプローラの各セクションのすべての値が変更されます。調整は、波長、視野、偏光、材料カタログ、システムタイトルと注釈、デフォルトのコーティング/散乱ファイル、レンズユニットに対して行われます。

CSharpStandalone_12_SEQ_SystemExplorer.cs

CppStandalone_12_SEQ_SystemExplorer.cpp

MatlabStandalone_12_SEQ_SystemExplorer.m

PythonStandalone_12_SEQ_SystemExplorer.py

13

シーケンシャルモードで面の最大AOI

近日公開…

 
14

公差

公差ウィザードを使用して、面/エレメントの公差を指定して、シーケンシャル 公差解析(公差データエディタ)をセットアップします。公差ウィンドウのいくつかの設定が変更されます。例えば、感度モード、基準、視野、モンテカルロ実行回数などです。次に、公差解析が実行され、モンテカルロファイルがSamples\API \{language}\e14_seq_toleranceに保存されます。最後に、ファイルはノンシーケンシャルモードに変換されます。

CSharpStandalone_14_Seq_Tolerance.cs

CppStandalone_14_Seq_Tolerance.cpp

MatlabStandalone_14_Seq_Tolerance.m

PythonStandalone_14_Seq_Tolerance.py

15

シーケンシャル最適化

クイック フォーカスおよび最適化ツールが示されています。サンプル ファイルが開き、「すべての変数を削除」ツールと「クイック フォーカス」ツールが使用されます。いくつかの変数と解法ソルブが指定され、最適化ウィザードでメリット ファンクションが生成されます。ローカル、グローバル、およびハンマー最適化はそれぞれ実行され、順番に閉じられます。

CSharpStandalone_15_Seq_Optimization.cs

CppStandalone_15_Seq_Optimization.cpp

MatlabStandalone_15_Seq_Optimization.m

PythonStandalone_15_Seq_Optimization.py

17

バルク散乱

バルク散乱サンプル ファイル(…\ Non-sequential \ Scattering \ Bulk scatter.zmx)のコピーがゼロから作成されます。体積散乱プロファイルは、矩形体積に設定されます。シェーデッド モデルとディテクタ ビューアーの両方が、ModifySettings()を介してユーザー定義の設定 (XYZ方向の回転) で開かれます。散乱を有効にしたノンシーケンシャル光線追跡が実行されます。作成されたZMXファイルで散乱を観察するには、NSCシェーデッド モデルでNSC光線の散乱設定を手動でチェックする必要があることに注意してください。

CSharpStandalone_17_NSC_BulkScatter.cs

CppStandalone_17_NSC_BulkScatter.cpp

MatlabStandalone_17_NSC_BulkScatter.m

PythonStandalone_17_NSC_BulkScatter.py

18

マルチコンフィグレーション

サンプルファイルが開き、MCEオペランドとともにマルチ コンフィグレーションがシステムに追加されます。THICマルチ コンフィグレーション オペランドが作成され、すべてのコンフィグをループしてクイック フォーカス ツールを実行することにより、各コンフィグが再フォーカスされます。適切なすべての熱解析用オペランドと熱解析用ピックアップを使用して、熱解析用にマルチ コンフィグレーション システムが手動で作成されます。

CSharpStandalone_18_SetMultiConfiguration.cs

CppStandalone_18_SetMultiConfiguration.cpp

MatlabStandalone_18_SetMultiConfiguration.m

PythonStandalone_18_SetMultiConfiguration.py

19

プロパティ

一連のプリズムはシーケンシャルモードで構築されます。いくつかの面がLDEに挿入され、各プリズムの前面と背面を傾けるように面プロパティが警告されます。プリズムの周りに座標ブレークが挿入され、その後、座標ブレークとプリズム面のシーケンスがコピーされて、プリズムの半円形チェーンが作成されます。このシステムでは、ローカルからグローバルへのツールとグローバルからローカルへのツールの両方が示されています。このサンプルは、KBAの記事「How to Work in Global Coordinates in a Sequential Optical System」に相当します。

CSharpStandalone_19_Surface_Properties.cs

CppStandalone_19_Surface_Properties.cpp

MatlabStandalone_19_Surface_Properties.m

PythonStandalone_19_Surface_Properties.py

20

CADファイルとしてエクスポート

IExportCADインターフェイスは、ノンシーケンシャル (…\Non-sequential\Miscellaneous\Digital_projector_flys_eye_homogenizer.zmx)をSTEPファイルとしてエクスポートするために使用されます。エクスポートツールの設定がカスタマイズされ、ツールはカスタム タイムアウトで完了まで実行されます。

CSharpStandalone_20_export_CAD_File.cs

CppStandalone_20_export_CAD_File.cpp

MatlabStandalone_20_export_CAD_File.m

PythonStandalone_20_export_CAD_File.py

21

白色LED蛍光体

空のファイルから始めて、ノンシーケンシャル サンプル ファイル…\Samples\Non-sequential\Phosphors and Fluorescence\White LED Phosphor.zmxをゼロから作成します。光源、STEPファイル、レンズ、ディテクタを含むすべての必要なオブジェクトが挿入されます。散乱プロファイルとフォトルミネセンスの両方がレンズに適用され、すべての適切なファイルが体積物理モデルに設定されます。(長い)光線追跡が実行され、完了率が表示されます。2つのディテクタ ビューアが開き、放射照度と放射強度が表示されます。

CSharpStandalone_21_White_LED_Phosphor.cs

CppStandalone_21_White_LED_Phosphor.cpp

MatlabStandalone_21_White_LED_Phosphor.m

PythonStandalone_21_White_LED_Phosphor.py

22

シーケンシャル解析

バッチ光線追跡は、シーケンシャル サンプル ファイルで実行されます。315の光線のリストが生成され、1回の操作で光線追跡するためにZOS-APIに渡されます。これにより、多数の光線を追跡する際のオーバーヘッドが大幅に削減されます。結果の光線データは、OpticStudioの外部に保存および表示されます。元のOpticStudioスポット ダイアグラム解析を使用して、幾何学的およびRMSスポット半径が取得され、表示されます。

CSharpStandalone_22_seq_spot_diagram.cs

CppStandalone_22_seq_spot_diagram.cpp

MatlabStandalone_22_seq_spot_diagram.m

PythonStandalone_22_seq_spot_diagram.py

23

横収差図ユーザー解析

バッチ光線追跡を使用すると、OpticStudioコードとIBatchRayTraceインターフェイスの両方を介して横収差解析が生成されます。適切なスケーリングと実行時間を含む結果は、比較のために表示されます。

CSharpStandalone_23_ray_fan_native_manual_comparison.cs

CppStandalone_23_ray_fan_native_manual_comparison.cpp

MatlabStandalone_23_ray_fan_native_manual_comparison.m

PythonStandalone_23_ray_fan_native_manual_comparison.py

24

ノンシーケンシャル ディテクタ データ

基本的なノンシーケンシャル システムは、いくつかの異なるオブジェクトタイプで構築され、INCERowインターフェイスを介してオブジェクト パラメータに変更が加えられます。面タイプ、コーティング、および散乱プロファイルのプロパティは、体積オブジェクトに設定されます。光線追跡が実行され、OpticStudioのディテクタが参照用に開かれます。次に、ディテクタ ピクセル データが抽出され、OpticStudioの外部でプロットされます。

CSharpStandalone_24_nsc_detectors.cs

CppStandalone_24_nsc_detectors.cpp

MatlabStandalone_24_nsc_detectors.m

PythonStandalone_24_nsc_detectors.py

25

光源スペクトル回折格子

温度が異なる2つの黒体光源と回折格子を備えたノンシーケンシャル システムが構築されます。システムは、各光源に対して追跡される解析光線の数を制御するためのマルチ コンフィグで設定されています。光線追跡中に単一の光源のみが解析光線を持ちます。コンフィグごとにトゥルーカラーの結果がプロットされます。

CSharpStandalone_25_source_spectrum_diffraction_grating.cs

CppStandalone_25_source_spectrum_diffraction_grating.cpp

MatlabStandalone_25_source_spectrum_diffraction_grating.m

PythonStandalone_25_source_spectrum_diffraction_grating.py

26

プロジェクトの設定を変更する

ユーザー指定のOpticStudio.CFGコンフィグレーション ファイルで新しいシステムが開きます。使用可能なすべてのプロジェクト設定が変更されて表示されます。

CSharpStandalone_26_modify_project_preferences.cs

CppStandalone_26_modify_project_preferences.cpp

MatlabStandalone_26_modify_project_preferences.m

PythonStandalone_26_modify_project_preferences.py

 

ユーザー拡張機能

Example# 概要 説明 ファイル名
 

ホイヘンスPSFでダブレットを構築し、最適化し、解析します

ユーザー定義の拡張機能は、新しいシーケンシャル システムを作成します。N-BAF10、可視の SF10(F、d、C波長)で作られた F/5 ダブレットです。入射瞳径は 10 で、最大半画角は 10 度です。拡張機能はメリットファンクションを構築します。ダブレットは最適化され(各サイクルでメリット ファンクションが表示されます)、ホイヘンス PSFおよびホイヘンス MTFが計算されます。ソースコードとコンパイル済みバージョンが提供されます。コンパイルされたバージョンは、プログラミングユーザー拡張機能から実行できます。

SampleExtension1.cs

 

ユーザー解析

 

Example# 概要 説明 ファイル名
 

FFT MTFとフィールド解析の複製

ユーザー解析が作成され、解析...MTF...視野に対する FFT MTFをコピーします。設定ウィンドウから波長にアクセスできます。

ソースコードとコンパイル済みバージョンが提供されます。コンパイルされたバージョンは、プログラミング...ユーザー解析...SampleAnalysis1から実行できます。

SampleAnalysis1.cs

 

ユーザー オペランド

 

Example# 概要 説明 ファイル名
16

合計絶対厚

2つの面間の合計中心厚みを提供するユーザー定義のオペランド(UDOC)が作成されます。面1は Hx 引数で、面2は Hy 引数です。

UDOCはOpticStudioから呼び出す必要がある実行可能ファイルであるため、コードをコンパイルできる言語 (C#/ C ++) でのみUDOCを作成できます。ソースコードは提供されますが、スタンドアロン アプリケーション ソリューションではなく、ユーザー オペランド ソリューションでコンパイルする必要があります。また、EXE には UDOC##.exe という名前を付け、ZOS-API\Operandsフォルダーに配置する必要があります。

CSharpUserOperand_16_SumAbsoluteThickness
 

xyでのサグの計算

このユーザー定義のオペランドは、任意のxおよびy座標(PxおよびPy引数)での面のサグ(Hx引数)を計算します。

Data = 0の場合、サグを計算します。

Data = 1の場合、代替サグを計算します。

詳細については、ZOS-API シンタックス ヘルプのZOSAPI.Editors.LDE.ILensDataEditorインターフェイスでGetSag関数の定義を確認してください。

ソースコードとコンパイル済みバージョンが提供されます。コンパイルされたバージョンを実行するには、メリット ファンクション エディターからUDOC Prog#1と入力します。

UDOC01.cpp

 

KA-01751

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

コメント

0件のコメント

記事コメントは受け付けていません。