ZOS-API ユーザー拡張を作成してチェビシェフから拡張多項式に変換する方法

この記事では、ZOS-APIを使用してチェビシェフ多項式面から拡張多項式面に変換するユーザー拡張機能を作成する方法について説明します。変換は最大14 次のチェビシェフ多項式面まで機能します。これは現在OpticStudioで許可されている最大値です。

著者 Sandrine Auriol, Katsumoto Ikeda

ダウンロード

添付ファイル

序章

光学設計用のチェビシェフ多項式はますます普及していますが、現場で製造するのは困難です。これらの多項式は、射出成形中のツーリング CAM ( コンピューター支援製造 ) 方程式、金型補正、および金型収縮補正に実装できません。ただし、拡張多項式面は可能です。したがって、チェビシェフ多項式を拡張多項式に、またはその逆に変換する方法があると便利です。

ユーザー拡張機能とは何ですか?

プログラミング…ZOS-API紹介プラグイン/拡張機能の下の組み込みヘルプファイルで、ZOS-API拡張は次のように定義されています。「ZOS-API 拡張機能は ZPL マクロと非常によく似た概念を持ちます。拡張機能はアクティブな OpticStudio インスタンスを制御し、実行中はユーザーの UI との対話をブロックし、事実上アクティブなレンズ光学系のすべてを変更できます。  OpticStudio に対する初期設定や接続はユーザー オペランド モデルやユーザー解析モデルと同じです。」

拡張機能の場合、PrimarySystem(TheApplicationにあります)は常にOpticStudioに表示されるレンズシステムです。拡張機能の作成者は、PrimarySystemへの変更をユーザーインターフェイスに「live」で表示するかどうかを制御できます。

// Make all changes (i.e. loading a new lens file) immediately

// display in the User interface

TheApplication.ShowChangesInUI = true;

// Do some work

// Do not show any changes in the User interface

TheApplication.ShowChangesInUI = false;

// Do some more work

この設定は、メリットファンクション エディターに多数の行を挿入するなど、多くの急速な変更をもたらすタスクを実行する場合に非常に重要です。この設定に関係なく、拡張機能が完了すると、UIは常に最終システムを表示することに注意してください。また、拡張機能に固有のAPIを介して利用可能な3つの追加プロパティがあります。

  • TheApplication.TerminateRequested: これは、ユーザーが [Cancel] ボタンをクリックしたときに当てはまります。
  • TheApplication.ProgressMessage:  拡張ダイアログに表示される現在のメッセージを設定します。
  • TheApplication.ProgressPercent: 拡張ダイアログで現在の進行状況(0〜100%)を設定します。

したがって、ユーザー拡張モードでは、レンズの設計とユーザー インターフェイスを完全に制御できます。ユーザー拡張は、C ++(COM)またはC#(.NET)を使用して作成できます。この記事のユーザー拡張機能はC#で記述されています。

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

C#でユーザー拡張機能を作成しましょう。プログラミング... C...User Extensionをクリックします。

User Extension New

ソリューションフォルダー{Zemax} \ ZOS-API Projects \ CSharpUserExtensionApplication1でWindowsエクスプローラーが開きます。Visual Studioも新しいソリューションで開きます。このソリューションには、定型テンプレートが含まれています。これは、ユーザー拡張機能の基盤として使用できる定形テンプレートです。Visual Studioでは、ユーザー拡張機能は実行可能ファイルとしてコンパイルされます。その後、実行可能ファイルは{Zemax)\ ZOS-API \ Extensionsフォルダーにコピーされ、OpticStudioで使用できるようになります。 

チェビシェフ フリーフォーム ミラーの例を開く

ファイル「ChebyshevMirror_optimized.zar」がこの記事に添付されています。XおよびYの+/- 10 oの視野内に来る光を集束するフリーフォームミラーとして機能するチェビシェフ多項式が含まれています。

Chebyshev mirror

チェビシェフ多項式の詳細については、 Design & Implementation of a New Freeform Surface Based on Chebyshev Polynomials. を参照してください。

システムは最適化され、公差解析されました。フリーフォームミラーの図面をメーカーに送信する前に、チェビシェフ多項式を拡張多項式に変換して、設計をツーリングCAM(コンピューター支援製造)方程式、金型補正、および射出時の金型収縮補正に実装できるようにします。

OpticStudioには非球面変換ツールが組み込まれていますが、自由曲面を別の自由曲面に変換するツールはありません。しかしながら、ZOS-APIにより、その目的のために独自のツールを構築できます。

チェビシェフ多項式から拡張多項式への変換

チェビシェフ多項式

チェビシェフ多項式はXとYの積で表されるため、矩形の直交多項式として特に役立ちます。

Chebyshev Equation

拡張多項式

拡張多項式とチェビシェフ多項式の定義の主な違いは次のとおりです。

  • コーニック定数k
  • 拡張多項式には係数ごとに1つの正規化係数が含まれていますが、チェビシェフには と があります
  • 係数は 「i」 によって異なります

Extended Equation

変換

Mathematicaと上記の定義を使用して、各拡張多項式項をチェビシェフ多項式項を含む方程式に等しいものとして計算できます。結果を以下に示します。

Conversion

上記の結果で、チェビシェフ多項式面の係数を読み取り、拡張多項式面の係数を計算することにより、変換を自動化するユーザー拡張を生成しました。

ユーザー拡張は、チェビシェフ多項式の後に、計算された係数を含む拡張多項式面と、2つの多項式面の間のサグ差を含むグリッドサグ面を追加します。それはよりいいフィットできるためです。

File converted

ユーザー拡張のコード

Code explained

ユーザー拡張のコードは添付ファイルにあります。このファイルは下記を含みます。

  • チェビシェフ多項式表面を見つけるループ

// Loop to find the Chebyshev polynomial surface                
                int i = 1;
                do
                {
                    TheApplication.ProgressMessage = "Chebyshev Surface at line : " + i.ToString();
                    if (TheSystem.LDE.GetSurfaceAt(i).Type == ZOSAPI.Editors.LDE.SurfaceType.ChebyShv)
                    {
                        break;
                    }
                    i++;
                } while (i <= TheSystem.LDE.NumberOfSurfaces);

  • チェビシェフ面のチェック。行iでチェビシェフ多項式面が見つかった場合、コードは ConvertChebyshevToExtended(TheApplication、i) という変換関数を呼び出します。変換関数は、チェビシェフ係数の配列と計算された拡張係数の配列の2つのデータ配列を埋めます。変換が完了すると、関数は、新しく計算された係数で満たされたチェビシェフ多項式面の直後に新しい拡張多項式面を追加します。

//Call the conversion function
ConvertChebyshevToExtended(TheApplication, i);

  • サグの配列を返す関数Sag(TheApplication、i)の呼び出し。これは2回呼び出されます。1回はチェビシェフ多項式面、もう1回は拡張多項式面です。

//Measure the sag of Chebyshev, Extended       
double[,] chebysag = Sag(TheApplication, i);
double[,] extendedsag = Sag(TheApplication, i + 1);

  • SagDifference(chebysag、extendedsag) と呼ばれる関数の呼び出し。これは、チェビシェフ多項式面と拡張多項式面間のたるみの差を含む配列を返します。
    //Make the difference and add a "difference" grid sag surface
    double[,] chebyExtendedsagdiff = SagDifference(chebysag, extendedsag);
  • サグ差の RMS (Root-Mean-Square) および PV (Peak-to-Valley)を返す RMS_PV_function(chebyExtendedsagdiff、out RMSConversion、out PVConversion)と呼ばれる関数の呼び出し。
    //Calculate the RMS and PV of a matrix
    RMS_PV_function(chebyExtendedsagdiff, out RMSConversion, out PVConversion);
  • そして最後に、サグの違いでグリッドサグ面を作成するCreateGridSagという関数の呼び出し。これがよりいいフィットできるになります。
    //Make a grid sag of the difference
    //The arguments are the semi-diameter because we need to know the spacing / interval between the sag points
    //the surface number is also an argument: we will add a grid sag below the extended surface
    double semidiameter = TheSystem.LDE.GetSurfaceAt(i).SemiDiameter;
    CreateGridSag(TheApplication, chebyExtendedsagdiff, semidiameter, i);

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

その後、ソリューションをリリースモードで構築できます。デバッグ ライブラリは再配布できないため、ユーザー拡張機能をプラグインとして配布するには、リリースモードに設定します。

Build

その後、実行可能ファイルをソリューションフォルダー({Zemax} \ ZOS-API Projects \ ...)から{Zemax} \ ZOS-API \ User Extensionにコピーできます。

ユーザー拡張機能を実行する

ConvertChebyToExtended User Extensionを確認するには、OpticStudioを起動し、レンズファイル「ChebyshevMirror_optimized.zar」を開きます。

解析波面収差で波面収差マップを開きます。これを使用して、変換前後の結果を比較します。まず、波面収差マップはRMSが1.7423波長、PVが6.9820波長を示しています。

プログラミングユーザー拡張機能下に、新しく作成された拡張機能があります。

Run Extension

拡張機能を実行すると、拡張多項式係数が計算されます。

Extension running

拡張機能は、フィットの品質を表示します。

Fit Quality

次に、2つの新しい面が、チェビシェフ多項式面の後に拡張多項式と、差を含むグリッドサグ面に追加されます。

LDE

波面マップでは、変換後の結果は、RMSが1.7423波長、PVが6.9820波長を示しています。変換は正常に実行されます!

ユーザー拡張機能について知っておくべきこと:速度、設定、その他のヒント

    • ユーザー拡張機能は、各係数が変換された後にソフトウェアがファイルを保存しないように、Preferencesファイルを変更できますか?

     

    いいえ。

    現在、Preferencesファイルはユーザー拡張機能から変更できません。ユーザー拡張機能を実行して係数を変換するとき、OpticStudioは、[ プロジェクト環境設定...般...元に戻す ]  ディスク複数手順 ] に設定されている場合、変換の各ステップを保存します。そのため、新しい係数が変更されるたびに(そして200を超える)、ソフトウェアはUNDOファイルを保存します。それは実行を遅くします。唯一の回避策は、拡張機能を実行する前にその設定を手動で変更することです。

     

    • ユーザー拡張機能を高速化するものはありますか?

    はい!

    1. IZOSAPI_Application.ShowChangesInUIを「false」に設定します。これは元に戻す動作には影響しませんが、たとえばサグ分析を呼び出しても分析を表示することにはならないため、拡張機能の実行を大幅に高速化できます。

    2. IOpticalSystem.UpdateModeを 'LensUpdateMode.EditorsOnly'に設定します
    3. プロジェクト環境設定元に戻すを手動で変更

     

    • ユーザー拡張機能には、変換するを選択するための設定がありますか?

     

    ユーザー拡張機能は実行可能ファイルであるため、設定ウィンドウを表示できます。 

    設定を追加する最も簡単な方法は、新しい空のWindowsフォームプロジェクトを作成し、ユーザー拡張コードに統合することです。UIが機能するには、STAスレッド属性をエントリポイントに追加する必要があります。設定の詳細については "How to create a Time-Of-Flight User Analysis using ZOS-API" の記事を参照してください。

     

    • ユーザー拡張機能を実行すると、コンソール アプリケーションの形式の黒いウィンドウがポップアップ表示されます。削除できますか?

     

    はい!

    ユーザー拡張機能の場合、デフォルトの出力形式はコンソールアプリケーションです。これは、Windowsアプリケーションに変更できます。

Project Properties

Windows Application

KA-01824

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

コメント

0件のコメント

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