C# と C++ でZOS-API を使う方法: IDE のインストール方法

この記事ではC# やC++ にてZOS-API を使ったり、スタンドアロン アプリケーション やユーザー拡張機能、ユーザー解析を作るために、MS Visual Studio のどのコンポーネントをインストールする必要があるかを示します。

著者 Kaleb Niall

免責事項

 

Zemax LLC は、以下のソフトウェアまたは製品を公式にサポートまたは推奨していません。この記事で表明された意見と意見は、Zemax の従業員である著者のみのものであり、これらはユーザーが ZOS-API の導入をを助けるためのガイダンスとしてのみ提供されています。

 

Visual Studio のインストール

 

ZOS-API のためにC ++ およびC# を使用するために、C ++ およびC# のコードを書く際、統合開発環境(Integrated Development Environment : IDE )を使用することを強くお勧めします。Micorsoft 社は筆者が使っているVisual Studio (https://visualstudio.microsoft.com/vs/) IDE のコミ​​ュニティエディションを提供しています。Visual Studio は、コード補完、構文エラーチェック 、組み込みコンソール、およびブレークポイント を備えたデバッグツール を提供します。特に最後の機能は、ZOS-API 環境中でオブジェクトのプロパティを調べる際に便利なので、IDE の中でも最高の機能の中の一つです。

 

インストール時には、3つのコアWindows ワークロード および必要なその他の補助ワークロード を必ずインストールしてください。

ダウンロードが終わったら、OpticStudio を立ち上げて、いくつかの例を試してみましょう!

C++ の例題プログラム

簡単な例題プログラムのコンパイルと実行をC++で行ってみましょう。

下の図の様に、OpticStudio を開き、「プログラミング」タブを選択し、C++ アイコンのプルダウンから、新しいスタンドアロン アプリケーション を開いてください。

 

 

この操作で、実行時にOpticStudioとの接続を確立するための、「Boilerplate」C++ コードとともにVisual Studio が起動します。

以下の図の様に、ソリューション エクスプローラ で、「CppStandaloneApplication 」行を展開して、「CppStandaloneApplication.cpp 」をクリックすることで、「Boilerplate 」C++ コードにアクセスできます。

 

 

これで、「//Add your custom code here...(ここにカスタムコードを追加してください...)」と表示されている、55行目にカスタムコードを追加できるようになりました。以下のコードを貼り付けてみてください。

 

API Syntax ヘルプのExample 1 から取得したこのコードは、単純なシーケンシャルシステムをセットアップし、クイックフォーカスツールを使用してイメージプレーンに焦点を合わせ、「Documents \ Zemax \ Samples \ API \ CPP 」フォルダに「e01_new_file_and_quickfocus.zmx 」としてシステムを保存します。

 

// creates a new API directory

CreateDirectory(_bstr_t(TheApplication->SamplesDir + "\\API"), NULL);

CreateDirectory(_bstr_t(TheApplication->SamplesDir + "\\API\\CPP"), NULL);

 

// Set up primary optical system

_bstr_t sampleDir = TheApplication->SamplesDir;

_bstr_t testFile = sampleDir + (_bstr_t)"\\API\\CPP\\e01_new_file_and_quickfocus.zmx";

 

// Make new file

TheSystem->New(false);

TheSystem->SaveAs(testFile);

 

ISDMaterialCatalogDataPtr(TheSystem->SystemData->MaterialCatalogs)->AddCatalog("SCHOTT");

 

// Aperture

ISystemDataPtr TheSystemData = TheSystem->SystemData;

TheSystemData->Aperture->ApertureValue = 40;

 

// Fields

IFieldPtr Field_1 = TheSystemData->Fields->GetField(1);

IFieldPtr NewField_2 = TheSystemData->Fields->AddField(0, 5.0, 1.0);

 

// Wavelength preset

bool slPreset = TheSystemData->Wavelengths->SelectWavelengthPreset(WavelengthPreset_d_0p587);

 

// Lens data

ILensDataEditorPtr TheLDE = TheSystem->LDE;

TheLDE->InsertNewSurfaceAt(2);

TheLDE->InsertNewSurfaceAt(2);

ILDERowPtr Surface_1 = TheLDE->GetSurfaceAt(1);

ILDERowPtr Surface_2 = TheLDE->GetSurfaceAt(2);

ILDERowPtr Surface_3 = TheLDE->GetSurfaceAt(3);

           

// Changes surface cells in LDE

Surface_1->Thickness = 50.0;

Surface_1->Comment = "Stop is free to move";

Surface_2->Radius = 100.0;

Surface_2->Thickness = 10.0;

Surface_2->Comment = "front of lens";

Surface_2->Material = "N-BK7";

Surface_3->Comment = "rear of lens";

 

// Solver

ISolveDataPtr Solver = Surface_3->RadiusCell->CreateSolveType(SolveType_FNumber);

Solver->_S_FNumber->FNumber = 10;

Surface_3->RadiusCell->SetSolveData(Solver);

 

// QuickFocus

IQuickFocusPtr quickFocus = TheSystem->Tools->OpenQuickFocus();

quickFocus->Criterion = QuickFocusCriterion_SpotSizeRadial;

quickFocus->UseCentroid = true;

ISystemToolPtr baseTool = quickFocus;

baseTool->RunAndWaitForCompletion();

baseTool->Close();

 

// Save and close

TheSystem->Save();

 

ひとたびコードがVisual Studio にコピーされると、メニューバーの「ビルド」タブ→「ソリューションのビルド」の後「デバッグ」タブ→「デバッグなしで実行」をクリックすることでコンパイルとプログラムの実行をすることができます。

コードの実行後にCPPフォルダーに保存される新しいファイルをチェックアウトしてください。コードの値または行の一部を自由に変更して、システムのカスタマイズを開始してください。もちろんコードの編集後には「ビルド」タブ→「ソリューションのリビルド」を行ってください。

C# の例題プログラム

C# でのコンパイル手順はC++  のものと非常によく似ています。今回は、「プログラミング」タブのC# アイコンの スタンドアロン アプリケーション を開きます。

Visual Studio が自動的に立ち上がり、ソリューション エクスプローラ で「Program.cs」行をクリックすることで、「Boilerplate 」コードにアクセスすることができます。

C++ の例題プログラムと同様に、「//Add your custom code here...(ここにカスタムコードを追加してください...)」と表示された行の後にカスタムコードを張り付けてください。

以下のコードは先ほどの例題のC# バージョンになります。

 

// creates a new API directory

string strPath = System.IO.Path.Combine(TheApplication.SamplesDir, @"API\\CS");

System.IO.Directory.CreateDirectory(strPath);

 

// Set up primary optical system

string sampleDir = TheApplication.SamplesDir;

string testFile = sampleDir + "\\API\\CS\\e01_new_file_and_quickfocus.zmx";

 

// Make new file

TheSystem.New(false);

TheSystem.SaveAs(testFile);

 

TheSystem.SystemData.MaterialCatalogs.AddCatalog("SCHOTT");

 

// Aperture

ISystemData TheSystemData = TheSystem.SystemData;

TheSystemData.Aperture.ApertureValue = 40;

 

// Fields

IField Field_1 = TheSystemData.Fields.GetField(1);

IField NewField_2 = TheSystemData.Fields.AddField(0, 5.0, 1.0);

 

// Wavelength preset

bool slPreset = TheSystemData.Wavelengths.SelectWavelengthPreset(WavelengthPreset.d_0p587);

 

// Lens data

ILensDataEditor TheLDE = TheSystem.LDE;

TheLDE.InsertNewSurfaceAt(2);

TheLDE.InsertNewSurfaceAt(2);

ILDERow Surface_1 = TheLDE.GetSurfaceAt(1);

ILDERow Surface_2 = TheLDE.GetSurfaceAt(2);

ILDERow Surface_3 = TheLDE.GetSurfaceAt(3);

 

// Changes surface cells in LDE

Surface_1.Thickness = 50.0;

Surface_1.Comment = "Stop is free to move";

Surface_2.Radius = 100.0;

Surface_2.Thickness = 10.0;

Surface_2.Comment = "front of lens";

Surface_2.Material = "N-BK7";

Surface_3.Comment = "rear of lens";

 

// Solver

ISolveData Solver = Surface_3.RadiusCell.CreateSolveType(SolveType.FNumber);

Solver._S_FNumber.FNumber = 10;

Surface_3.RadiusCell.SetSolveData(Solver);

 

// QuickFocus

IQuickFocus quickFocus = TheSystem.Tools.OpenQuickFocus();

quickFocus.Criterion = QuickFocusCriterion.SpotSizeRadial;

quickFocus.UseCentroid = true;

quickFocus.RunAndWaitForCompletion();

quickFocus.Close();

 

// Save and close

TheSystem.Save();

コードのコンパイルと実行は同様に「ビルド」タブ→「ソリューションのビルド」をクリックした後に「デバッグ」タブ→「デバッグなしで開始」をクリックしてしてください。

 

その他の例題プログラム

ZOS-API Syntax Help (プログラミングタブ→ZOS-API .NET アプリケーション グループ→ ZOS-API ヘルプ) 中には上記以外の例題プログラムが存在します。

 

これ等は完全な例題プログラムであり、既に「boilerplate 」コードが含まれています。これ等のプログラムを空のC# /C++ エディタに張り付けるだけで、OpticStudio に接続させることができます。

KA-01817

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

コメント

0件のコメント

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