凡亿教育-麦麦
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | ZEMAX软件技术应用教程:如何创建ZOS-API自定义扩展将切比雪夫多项式转换为扩展多项式
ZEMAX软件技术应用教程:如何创建ZOS-API自定义扩展将切比雪夫多项式转换为扩展多项式

本文描述了如何使用ZOS-API创建自定义扩展 ( User Extension ),将切比雪夫多项式( Chebyshev Polynomial )表面转换为扩展多项式 ( Extended Polynomial )表面。进行转换的切比雪夫表面为14阶,这是目前OpticStudio中可以设置的最大阶数。

作者 Sandrine Auriol, Katsumoto Ikeda

附件下载

Article Attachments

简介

越来越多的设计者将切比雪夫多项式用于光学设计中,但是很难进行实际加工制作。这些多项式可能无法通过计算机辅助制造 ( 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扩展程序,还有三个附加属性可以使用:

  • TheApplication.TerminateRequested:  当用户单击“取消 ( Cancel ) ”按钮时,将返回“ture”。

  • TheApplication.ProgressMessage:  设置“扩展 Extension ”对话框中显示的当前消息。

  • TheApplication.ProgressPercent: 设置“扩展”对话框中的当前进度 ( 0-100% )。

因此,用户自定义扩展模式使用户完全控制镜头设计和用户界面。自定义扩展可以使用 C++ (COM) 或 C# (.NET)来编写。本文的自定义扩展是用C#编写的。

打开新的编程模板

点击:编程 ( Programming ) > C# >自定义扩展 ( User Extension ),用C#创建自定义扩展

User Extension New

使用Windows资源管理器打开解决方案文件夹: {Zemax}\ZOS-APIProject\CSharpUserExtensionApplication1。Visual Studio 也打开了新的解决方案。该解决方案包含模板代码——可用作任何自定义扩展基础的模板。在Visual Studio中,将自定义扩展编译为可执行文件。然后将可执行文件复制到 {Zemax)\ZOS-API\Extensions 文件夹,以便OpticStudio可以使用。

打开切比雪夫自由曲面反射镜示例

本文附件中的 “ChebyshevMirror_optimized.zar” 文件,该文件中包含切比雪夫多项式自由曲面反射镜,光线聚焦在X和Y方向的+/- 10o视场内。

Chebyshev mirror

有关切比雪夫多项式的更多信息,请参阅: 基于切比雪夫多项式的新型自由曲面的设计与实现

对该系统进行优化和公差分析之后,在将自由曲面反射镜的图纸发送给制造商之前,将切比雪夫多项式转换为扩展多项式,这样设计的系统就可以通过计算机辅助制造方程、模具校正和注塑过程中的模具收缩补偿等工具实现。

OpticStudio有内置的非球面转换工具,但是没有将自由曲面转换为其他面型的工具。幸运的是,可以使用ZOS-API构建工具。

将切比雪夫多项式转换为扩展多项式切比雪夫多项式

切比雪夫多项式由包含X和Y的方程式表示,这使得它们作为直角正交多项式特别实用。

Chebyshev Equation

扩展多项式

扩展多项式切比雪夫多项式的定义之间的主要区别是:

  • 圆锥常数 k

  • 多项式的每个系数包含一个归一化因子,而切比雪夫包含  x0 和 y0

  • 系数随 “i ”变化

Extended Equation

转换

利用Mathematica和上述定义,可以计算得出每个扩展多项式的项等于一个包含切比雪夫多项式的项的方程。结果如下:

Conversion

根据上述结果,生成用户自定义扩展,它将通过读取切比雪夫多项式表面的系数,并计算扩展多项式表面的系数来自动转换。

用户自定义扩展将在切比雪夫多项式之后添加具有计算出的系数的扩展多项式表面,以及包含两个多项式表面之间矢高差的网格矢高 ( Grid Sag ) 表面。得出的结果将满足要求。

File converted

自定义扩展代码

Code explained

文章附件中包含用户自定义扩展的代码,代码中包含:

  • 求切比雪夫多项式表面的循环

// 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);

  • 检查切比雪夫表面。如果在第 i 行找到切比雪夫多项式表面,那么代码将调用名为 ConvertChebyshevToExtended (TheApplication, i) 的转换函数。转换函数将填充两个数据数组:切比雪夫系数数组和计算得到的扩展多项式的系数数组。一旦转换完成,该函数将在新计算的系数用于切比雪夫多项式表面之后,添加新的扩展多项式表面。

//Call the conversion function
ConvertChebyshevToExtended(TheApplication, i);

  • 调用矢高函数 ( TheApplication, i ) ,该函数将返回矢高数组。调用矢高函数两次:一次用于切比雪夫多项式表面,一次用于扩展多项式表面。

//Measure the sag of Chebyshev, Extended       
double[,] chebysag = Sag(TheApplication, i);
double[,] extendedsag = Sag(TheApplication, i + 1);

  • 调用名为 SagDifference(chebysag, extendedsag) 的函数,该函数将返回包含切比雪夫多项式表面和扩展多项式表面之间的矢高差的数组。
    //Make the difference and add a "difference" grid sag surface
    double[,] chebyExtendedsagdiff = SagDifference(chebysag, extendedsag);

  • 调用名为RMS_PV_function的函数 (chebyExtendedsagdiff, out RMSConversion, out PVConversion),该函数将返回矢高差的均方根值 ( RootMean-Square, RMS ) 峰谷( Peak-to-Valley, PV )
    //Calculate the RMS and PV of a matrix
    RMS_PV_function(chebyExtendedsagdiff, out RMSConversion, out PVConversion);

  • 最后,调用名为 CreateGridSag 的函数,将创建带有矢高差的网格矢高表面。得出的结果将满足要求。
    //Make a grid sag of the difference
    //The arguments are the semi-diameter because we need to know the spacing / interval between the sag points
    //the surface number is also an argument: we will add a grid sag below the extended surface
    double semidiameter = TheSystem.LDE.GetSurfaceAt(i).SemiDiameter;
    CreateGridSag(TheApplication, chebyExtendedsagdiff, semidiameter, i);

保存、构建和移动可执行文件

然后可以在发布模式 ( Release Mode ) 中构建解决方案。要将用户自定义扩展作为插件分配,请将其设置为发布模式,因为调试库是不可重新分配的。

Build

然后可以将可执行文件从解决方案文件夹 ( {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 )创建新的扩展。

Run Extension

运行扩展,计算扩展多项式系数:

Extension running

显示运行扩展后的指标:

Fit Quality

然后在切比雪夫多项式表面之后添加两个新的表面:扩展多项式和包含矢高差的网格矢高表面。

LDE

波前图上,转换后的结果为:RMS为1.7423波数,PV为6.9820波数。转换后运行正常!

关于自定义扩展的相关信息:速度、设置和其他技巧
  • UserExtension 是否可以改变文件选项,使软件在每个系数转换后不保存文件?

不可以。

目前无法从自定义扩展中更改文件选项。当运行用户自定义扩展,即转换系数,如果通过点击:配置选项 ( Project Preferences ) > 常规( General ) >  ( Undo ),将撤销设置为“磁盘多步存储 ( Disk Multi-Step ”,OpticStudio将保存每一步的转换。因此,每次修改新系数(超过200次)时,软件都会保存UNDO文件,这会降低执行速度。惟一的解决方法是在运行扩展之前手动更改该设置。

  • 有什么方法可以加快  UserExtension 的运行速度吗?

有!

  1. 将 IZOSAPI_Application.ShowChangesInUI 设置为“false”。这不会影响撤消行为,但是会使扩展运行得更快,例如:调用矢高分析,但并不显示分析结果。

  2. 将 IOpticalSystem.UpdateMode 设置为 ‘LensUpdateMode.EditorsOnly’。

  3. 点击:配置选项( Project Preferences )>常规( General )>撤销( Undo )手动将撤销更改为“无 ( None )”。

  • 可以对 UserExtension 进行设置,以选择要转换的表面吗?

用户自定义扩展是可执行的,因此可以显示设置窗口。

最简单的添加设置的方法是创建新的空Windows窗体项目,然后集成到用户自定义扩展代码中。需要将STA线程特性添加到界面的入口点才能工作。有关设置的更多信息,请参阅文章: "如何使用ZOS-API创建飞行时间自定义分析" 。

  • 当运行 UserExtension 时,弹出带有控制台应用程序格式的黑色窗口 ,可以移除它吗?

可以!

对于自定义扩展,默认的输出格式是控制台应用程序,可以将其更改为windows应用程序。

Project Properties

Windows Application

Ansys Zemax国内可靠代理商



  光研科技南京有限公司是国内可靠的光学软件和仪器光电供应商,提供企业定制化上门培训服务,承接各类光学设计项目,并有一系列自主编写出版的光学设计书籍。公司拥有一支高素质、高水平、实战经验丰富的管理,销售以及研发团队,从成立到现在已经为广大企业,研究所以及高校提供了很多优秀的产品和服务,是光电圈内值得信赖的企业。追光逐梦,研以致用!以用户的需求为起点,为客户提供有价值的光学产品和服务一直都是光研科技南京有限公司的宗旨。

 


  AnsysZemax光学软件咨询与订购联系方式

       联系人:南京光研   徐保平

  手机号:15051861513

  微信号:13627124798

 

       您也可以扫一扫下面的二维码直接咨询

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论