通过C# 和 C++ 使用ZOS-API 需要安装什么软件

本文将展示通过C#或C++使用ZOS-API,并创建独立的应用程序、自定义扩展、自定义分析或自定义操作数所需要安装的MS Visual Studio的组件。

作者 Kaleb Niall

免责声明

Zemax LLC未官方支持或认可以下任何软件或产品。本文作者是Zemax的员工,文中所表达的观点和意见仅代表作者本人,本文仅为ZOS-API的用户提供入门指导。

安装Visual Studio

为了使用C++和C#与ZOS-API交互,强烈建议使用集成开发环境(IDE) 编写C++ 或C# 代码。微软提供了社区版的Visual Studio (https://visualstudio.microsoft.com/vs/) IDE,本文作者也使用此版本。Visual Studio提供了代码自动提示、语法错误检查、内置控制台和带有断点的调试工具,最后这个功能是IDE最好的功能之一,可以检查ZOS-API中任何对象的属性。

安装Visual Studio时,请确保安装了三种核心的Windows工作负载和所需的任何其他补充工作负载。

下载过程完成后,启动OpticStudio并尝试完成一些示例 !

C++ 示例

在C++中,尝试编译和运行代码。打开OpticStudio并导航到“编程 ( Programming ) ”选项卡,从 “C++” 项的下拉菜单中打开新的独立应用程序 ( Standalone Application )

此操作能够打开带有C++代码模板的Visual Studio,该代码能够在运行时建立与OpticStudio的连接。可以通过在方案管理器中展开 “CppStandaloneApplication”行,并单击 “CppStandaloneApplication.cpp”来访问这段代码。

现在,能够在第55行,显示 “// Add your custom code here…”的位置添加自定义代码,尝试在该位置粘贴下面的代码。这段代码摘录自API语法帮助 ( API Syntax Help )示例1,可以设置简单的序列系统,然后使用快速聚焦工具使像面聚焦,并将系统另存为: “e01_new_file_and_quickfocus.zmx”,保存在 Documents\Zemax\Samples\API\CPP 中。

// 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中,就可以通过点击“构建 ( Build )>构建解决方案 ( Build Solution ) ”,再点击“调试( Debug ) >非调试模式 ( Start Without Debugging ) ” 来编译和运行它。在代码运行之后,检查保存在CPP文件夹中的新文件。现在可以随意更改代码中的某些值或行,以开始自定义系统。在对代码进行编辑之后,一定要点击“构建 ( Build)> 重新生成解决方案( Rebuild Solution ) ”。

C# 示例

C# 示例的构建过程与C++非常类似。在“编程 ( Programming )”选项卡中C# 的下拉菜单中打开新的独立应用程序 ( Standalone Application ) ”。

Visual Studio将自动打开,通过单击方案管理器中的 “ Program.cs ” 行访问“模板”代码。就像在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();

通过点击:构建 ( Build ) > 构建解决方案 ( Build Solution ),然后点击:调试 ( Debug )> 非调试模式 ( Start Without Debugging ),按相同的方式编译和运行代码。

更多示例

通过点击:编程 ( Programming )> ZOS-API帮助 ( ZOS-API Help ),打开ZOS-API语法帮助 ( ZOS-API Syntax Help ),查看更多示例。

注意,这些都是完整的示例,并且包含“模板”代码,可以将其粘贴到空白的C# / C++编辑器中,连接到OpticStudio。

KA-01817

这篇文章有帮助吗?
2 人中有 0 人觉得有帮助

评论

0 条评论

文章评论已关闭。