本文将展示通过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
评论
文章评论已关闭。