この記事では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
コメント
記事コメントは受け付けていません。