插件/扩展程序(Plug-In/Extension)
扩展程序(ZOS-API Extension)在概念上非常类似ZPL宏(ZPL Macro) - 扩展程序控制当前开启的OpticStudio实例,在其运行时阻止用户与UI进行交互,并且可以改变当前镜头系统的几乎所有内容。 初始设置以及与OpticStudio的连接与自定义操作数(User Operand)和自定义分析(User Analysis)模式相同。
对于扩展程序,PrimarySystem(基于TheApplication)始终是OpticStudio中显示的镜头系统。 但是请注意,扩展程序操作者可以控制是否在用户界面中实时显示对PrimarySystem的更改:
// 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扩展程序,还有三个附加属性可以使用:
- TheApplication.TerminateRequested: 当用户单击"取消"按钮时,将会是true。
- TheApplication.ProgressMessage: 设置"扩展程序"对话框中显示的当前消息。
- TheApplication.ProgressPercent: 设置"扩展程序"对话框中的当前进度(0-100)。
这两个属性都与OpticStudio中的"扩展程序"对话框直接相关:

如果您希望在不影响PrimarySystem的情况下处理系统,您可以创建一个新系统,并在新系统上执行所有操作:
// Create a new, temporary, non-sequential system
IOpticalSystem TempSystem = TheApplication.CreateNewSystem(SystemType.NonSequential);
// Add a new non-sequential object
INCERow newRow = TempSystem.NCE.AddObject();
// etc
在扩展程序完成时,这个临时的系统将自动被清理。因此如果您需要继续保留您的工作,就必须明确地保存这个临时系统:
TempSystem.SaveAs(@"C:\Temp\MyNewSystem.zmx");
要连接到具有交互扩展程序(Interactive Extension)的OpticStudio,您需要在一个外部应用程序(如Matlab或Python)中运行ConnectAsExtension。
您可以通过使用实例序号instance作为参数来连接到特定的实例,或者使用0连接到任何可用实例。
连接后,可以通过对话框手动终止连接,也可以在外部应用程序中运行CloseApplication。
另外三个终止/进度属性与交互扩展程序无关。
详述
请注意,API目前不支持从单个客户端进程并发连接到多个OpticStudio实例。
这意味着Matlab不能连接到两个单独的OpticStudio实例。
下一部分: