越来越多的设计者将切比雪夫多项式用于光学设计中,但是很难进行实际加工制作。这些多项式可能无法通过计算机辅助制造 ( Computer-Aided Manufacturing , CAM ) 方程、模具校正和注塑过程中的模具收缩补偿实现。然而,扩展多项式表面可以。因此,将切比雪夫多项式转换成扩展多项式的方法很实用,反之亦然。
点击:编程( Programming )选项卡>关于ZOS-API ( About the ZOS-API ) >插件/扩展( Plug-In/Extension ),打开内置帮助文件,可看到扩展程序 ( ZOS-API Extension )的定义:在概念上非常类似于ZPL宏 ( ZPL Macro )——扩展程序控制当前开启的OpticStudio实例,在其运行时阻止用户与界面进行交互,并且可以改变当前镜头系统的几乎所有内容。自定义扩展的初始设置以及与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
在执行许多快速更改的任务时(例如:在评价函数编辑器中插入大量的行),此项设置可能非常重要。请注意,无论这项设置如何,当扩展运行完成时,界面中将始终显示最终的系统。通过API扩展程序,还有三个附加属性可以使用:
因此,用户自定义扩展模式使用户完全控制镜头设计和用户界面。自定义扩展可以使用 C++ (COM) 或 C# (.NET)来编写。本文的自定义扩展是用C#编写的。
点击:编程 ( Programming ) > C# >自定义扩展 ( User Extension ),用C#创建自定义扩展:
使用Windows资源管理器打开解决方案文件夹: {Zemax}\ZOS-APIProject\CSharpUserExtensionApplication1。Visual Studio 也打开了新的解决方案。该解决方案包含模板代码——可用作任何自定义扩展基础的模板。在Visual Studio中,将自定义扩展编译为可执行文件。然后将可执行文件复制到 {Zemax)\ZOS-API\Extensions 文件夹,以便OpticStudio可以使用。
本文附件中的 “ChebyshevMirror_optimized.zar” 文件,该文件中包含切比雪夫多项式自由曲面反射镜,光线聚焦在X和Y方向的+/- 10o视场内。
有关切比雪夫多项式的更多信息,请参阅: 基于切比雪夫多项式的新型自由曲面的设计与实现。
对该系统进行优化和公差分析之后,在将自由曲面反射镜的图纸发送给制造商之前,将切比雪夫多项式转换为扩展多项式,这样设计的系统就可以通过计算机辅助制造方程、模具校正和注塑过程中的模具收缩补偿等工具实现。
OpticStudio有内置的非球面转换工具,但是没有将自由曲面转换为其他面型的工具。幸运的是,可以使用ZOS-API构建工具。
切比雪夫多项式由包含X和Y的方程式表示,这使得它们作为直角正交多项式特别实用。
扩展多项式和切比雪夫多项式的定义之间的主要区别是:
利用Mathematica和上述定义,可以计算得出每个扩展多项式的项等于一个包含切比雪夫多项式的项的方程。结果如下:
根据上述结果,生成用户自定义扩展,它将通过读取切比雪夫多项式表面的系数,并计算扩展多项式表面的系数来自动转换。
用户自定义扩展将在切比雪夫多项式之后添加具有计算出的系数的扩展多项式表面,以及包含两个多项式表面之间矢高差的网格矢高 ( Grid Sag ) 表面。得出的结果将满足要求。
文章附件中包含用户自定义扩展的代码,代码中包含:
// Loop to find the Chebyshev polynomial surface
int i = 1;
do
{
TheApplication.ProgressMessage = "Chebyshev Surface at line : " + i.ToString();
if (TheSystem.LDE.GetSurfaceAt(i).Type == ZOSAPI.Editors.LDE.SurfaceType.ChebyShv)
{
break;
}
i++;
} while (i <= TheSystem.LDE.NumberOfSurfaces);
//Call the conversion function
ConvertChebyshevToExtended(TheApplication, i);
//Measure the sag of Chebyshev, Extended
double[,] chebysag = Sag(TheApplication, i);
double[,] extendedsag = Sag(TheApplication, i + 1);
然后可以在发布模式 ( Release Mode ) 中构建解决方案。要将用户自定义扩展作为插件分配,请将其设置为发布模式,因为调试库是不可重新分配的。
然后可以将可执行文件从解决方案文件夹 ( {Zemax}\ZOS-API Projects\...) 复制到 {Zemax}\ZOS-API\User Extension 中。
启动 OpticStudio 并打开镜头文件“ChebyshevMirror_optimized.zar”,检查 ConvertChebyToExtended 自定义扩展。
点击:分析 ( Analyze )> 波前( Wavefront ),打开波前图 ( Wavefront Map )。使用波前图来比较转换前后的结果。开始时,波前图显示均方根值为1.7423波数,PV值为6.9820波数。
点击:编程 ( Programming )>自定义扩展 ( User Extensions )创建新的扩展。
运行扩展,计算扩展多项式系数:
显示运行扩展后的指标:
然后在切比雪夫多项式表面之后添加两个新的表面:扩展多项式和包含矢高差的网格矢高表面。
在波前图上,转换后的结果为:RMS为1.7423波数,PV为6.9820波数。转换后运行正常!
不可以。
目前无法从自定义扩展中更改文件选项。当运行用户自定义扩展,即转换系数,如果通过点击:配置选项 ( Project Preferences ) > 常规( General ) > 撤销 ( Undo ),将撤销设置为“磁盘多步存储 ( Disk Multi-Step ) ”,OpticStudio将保存每一步的转换。因此,每次修改新系数(超过200次)时,软件都会保存UNDO文件,这会降低执行速度。惟一的解决方法是在运行扩展之前手动更改该设置。
有!
用户自定义扩展是可执行的,因此可以显示设置窗口。
最简单的添加设置的方法是创建新的空Windows窗体项目,然后集成到用户自定义扩展代码中。需要将STA线程特性添加到界面的入口点才能工作。有关设置的更多信息,请参阅文章: "如何使用ZOS-API创建飞行时间自定义分析" 。
可以!
对于自定义扩展,默认的输出格式是控制台应用程序,可以将其更改为windows应用程序。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删