ZOS-APIを使用してユーザー オペランドを作成する方法

この記事では、ZOS-APIを使用して面の間の絶対距離の合計を計算するユーザー オペランドを作成します。このオペランドは、TTHIオペランドを複製します。ユーザー オペランドは、UDOC メリットファンクションオペランドを使用して呼び出して、パラメーターを制御し、最適化を実行できます。

著者 Haosheng Hu

Downloads

添付ファイル

序論

OpticStudio用のアプリケーション プログラミング インターフェイス (ZOS-API) が開発されており、最新のソフトウェア テクノロジを使用して、アプリケーションへの接続とカスタマイズが可能です。ZOS-API は COM インターフェイスに依存していますが、それは .NET ライブラリに根ざしているため、API を使用したプログラミングは多くの言語で実行できます。

アプリケーションプログラムと OpticStudio 間の接続は、4つのプログラムモードの1つに分類されます。これらのモードは通常、2つのカテゴリに分類できます。

1) フルコントロール ( スタンドアロン モードとユーザー拡張モード )。 ユーザーはレンズ設計とユーザーインターフェイスを完全に制御できます。

2) 制限付きアクセス (ユーザー オペランドおよびユーザー分析モード )。ユーザーは、既存のレンズファイルのコピーを使用して作業することができません。

この記事では、ユーザー オペランド モードに説明します。このモードは、カスタム データ計算用のユーザー定義のオペランドを作成するために使用されることを除き、ユーザー分析モードとほぼ同じです。ユーザー オペランドは、メリット ファンクション エディターでUDOCオペランドを使用して呼び出されます。ユーザー分析モードと同様に、このモードでは現在のレンズ システムやユーザー インターフェイスを変更できません ( つまり、このモードではシステムのコピーの変更のみが許可されます)。ユーザー オペランドは、C ++(COM) または C#(.NET) のいずれかを使用して記述できます。これは、ユーザーがどちらの言語に慣れているかによって異なります。

 

新しい定型テンプレートを開く

C#でユーザー オペランドを作成しましょう。まずはプログラミングCユーザー オペランドを選択します。

 

 

ソリューションフォルダー{Zemax} \ ZOS-API Projects \ CSharpUserOperandApplication1 'でWindowsエクスプローラーが開きます。また、新しいソリューションでVisual Studioが開きます。ソリューションには、ユーザー オペランドの基盤として使用できる定型コードが含まれています。

 

レンズデータエディターでの読み取り

ダブル ガウス サンプルファイルでこのユーザー オペランドを使用して、定義された範囲の面の合計厚みを計算します。サンプルファイルは {Zemax}\Samples\Sequential \Objectives\Double Gauss 28degree field.zmx'にあります。
ユーザー オペランドを使用して、オブジェクト面と絞り面の間にある面の中心の厚みの値を読み取り、それらの値を合計して、ダブル ガウス システムの前のグループの全長を計算します。これは、TTHI組み込みオペランドを使用して行うこともできます。

 

 

コードの上部に2行あります。これらの2行には、アプリケーションが頻繁に使用する名前空間がリストされています。名前空間内のインターフェイスは、フルパスを指定せずに使用できます。

using System;
using ZOSAPI;

 

定型テンプレートでは、4つの引数を使用できます。

double Hx = TheApplication.OperandArgument1;
double Hy = TheApplication.OperandArgument2;
double Px = TheApplication.OperandArgument3;
double Py = TheApplication.OperandArgument4;

 

 

引数の名前はカスタマイズできません。そのうちの2つを使用して、計算で面範囲を定義します。

定型テンプレートで、"// Add your custom code here..."を見つけてコーディングを開始します。

surf1とsurf2を定義して表面範囲を定義し、上記の最初の2つの引数に接続します。この例では、引数3と4を使用していないことに注意してください。

int surf1 = (int)TheApplication.OperandArgument1;
int surf2 = (int)TheApplication.OperandArgument2;

 

ZOSAPI.Editors.LDE.ILDERowインターフェースのインスタンスであるオブジェクト「surf」を定義して、レンズデータエディター内のパラメーター値を読み取ります。C# は厳密にデータ タイプ指定されていることをご注意ください。つまり、変数を宣言するときに変数のデータ タイプを指定する必要があります。

ZOSAPI.Editors.LDE.ILDERow surf;
double thic = 0;

 

厚みの絶対値の合計

「if」ループを使用して、定義された表面範囲内のすべての表面の中心の厚みを合計します。表面範囲の入力が有効な場合、ユーザー オペランドは厚みの合計を返します。それ以外の場合は、無限数を返します。つまり、入力は無効です。

 

if (surf1 <= surf2)
{
         for (int i = surf1; i <= surf2; i++)
         {
                   surf = TheSystem.LDE.GetSurfaceAt(i);
                   thic = thic + Math.Abs(surf.Thickness);                   
         }
         operandResults[0] = thic;
}
else
{
         operandResults[0] = 1e9;
}

 

ここで、サンプルのユーザー オペランドのコーディングが完了しました。この例では、operandResult [0] を使用して、合計された厚み値をデータ フィールド0に配置しました。配置する必要がある計算値が複数ある場合は、これらの値を異なるデータフィールドに配置し、UDCオペランドのデータ引数を使用して、正確な戻り値を制御できます。

 

実行可能ファイルの保存、ビルド、移動

ソリューションをリリースとして構築します。デバッグ モードではデバッグを使用しても問題ありませんが、プラグインを配布する場合は、デバッグ ライブラリを再配布できないため、常にリリース モードを使用する必要があります。したがって、リリース モードに切り替えましょう。

 

 

コンソール アプリケーションとしてコンパイルされるユーザー分析とは異なり、ユーザー オペランドはWindowsアプリケーションとしてコンパイルする必要があります。

そうでない場合、コンパイルされた .exe ファイルは最適化中に複数回呼び出されるため、ユーザー定義のオペランドで最適化するときにコンソールウィンドウがポップアップし続けます。

 

Visual Studioでプロジェクトのプロパティを開き、ユーザー オペランド アプリケーションの出力タイプをWindowsアプリケーションに変更します コンパイルされたユーザー  オペランド アプリケーションは、クライアントプログラムとして  UDOC メリット ファンクション オペランドによって呼び出され、UDCのProg#引数のプログラム番号によって定義されます。このため、アプリケーションのアセンブリ名は UDOCXX として定義する必要があります。XXは00から99までの数字を表します。

 

 

次に、ソリューションをビルドします。

定義されたアセンブリ名を持つ exe アプリケーションは、Visual Studioのプロジェクト プロパティで選択された出力パスに保存されます。

 

 

完成したアプリケーションを見つけて {Zemax}\ZOS-API\Operands' にコピーする必要があります。

 

ユーザー オペランドを使用してシステムを最適化する 

新しいユーザー オペランドを確認するには、OpticStudioを起動し、レンズファイル{Zemax} \ Samples \ Sequential \ Objectives \ Double Gauss 28 degree field.zmxを開きます。

メリット ファンクション エディターを開き、メリット ファンクション エディターにUDOCオペランドを挿入します。

 

  • Prog#は、アプリケーション名の整数値です。
  • Data = 0はクライアント プログラムを実行し、Value列の値を返します。
  • タイムアウトでは、OpticStudioがUDOCが要求されたデータを計算し、OpticStudioに制御を返すまで待機する最大時間をミリ秒単位で設定します。この場合、50000に設定されます。

その後、UDOCオペランドは、組み込みのメリット ファンクション オペランドと同様に機能します。

  • Hx = 1およびHy = 5が引数です。それらは表面範囲を定義します。
  • この値は、前のグループの全長(面1から面6までの厚み)を取得します。
  • ターゲットはその値を制御します。

 

すべての引数が設定されたら、メリット ファンクション エディターの更新ボタンをクリックします。計算された値は、予想どおり、[Value] 列に表示されます。

 

 

計算の実行に加えて、UDCオペランドを使用して、他のメリット ファンクション オペランドと同様に最適化を実行することもできます。

たとえば、前のグループの全長を40 mmに制限し、各面の中心の厚みを妥当な範囲内に保ちましょう。UDOCオペランドでターゲットが40 mmに設定されます。MNCTおよびMXCTオペランドを追加して、中心の厚みを制限します。必要に応じて、RMS スポットサイズや波面収差など、他の最適化基準をメリット ファンクション エディターに追加できます。

 

 

厚みコントロールのみで最適化を実行します。

最適化後、前のグループの全長は正確に40 mmになり、各面の中心の厚みは要件を満たします。

 

 

 

 

KA-01830

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

コメント

0件のコメント

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