首页 > 编程语言 >Zemax and Python联用

Zemax and Python联用

时间:2024-06-04 10:12:36浏览次数:32  
标签:OpticStudio Python 厚度 Surface TheSystem Zemax 透镜 联用 表面

透镜面的厚度与材料

单透镜:两个面组成,第一个面赋予材料和厚度——即该透镜的材料和厚度;第二个面不需要赋予材料,其厚度为下一个透镜的空气间隔——即下一个物体的起始点以此厚度末端为原点

胶合透镜:三个面组成,第一个面和第二个面赋予材料和厚度——即该胶合透镜第一个和第二个的材料和厚度;第三个面不需要赋予材料,其厚度为下一个透镜的空气间隔

所以,当一个表面被赋予材料后,说明其下一个表面与其共属于同一个透镜,连续n个表面被赋予材料,则就是n胶合透镜;当一个表面没有赋予材料,说明该表面后面是空气层

曲率半径:无限大为平面,正值表示曲率圆心在该表面的右边,负值表示曲率圆心在该表面的左边

光阑:视作一个表面,一般为平面

像面:没有厚度,曲率一般为无限大

净口径:通过口径,例如光阑(光圈),用半径表示,clear radius

机械半直径:edge radius,大于等于clear radius

使用COM组件控制Zemax

COM控制Zemax,会有模板,参考

![](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml300\wps1.jpg)

|独立应用程序(Standalone Application )|在此模式下,应用程序会启动全新的OpticStudio例程(其他模式依赖于已经打开的现有例程而存在)。因此,在以这种模式启动应用程序之前,必须注意确保OpticStudio已打开至少一个例程(以满足OpticStudio的许可证验证)。在此模式下,OpticStudio实际上是作为服务器运行的,没有自定义界面。
|交互扩展(Interactive Extension)|交互扩展模式连接到OpticStudio的已经打开的例程。在此模式下运行时,OpticStudio界面随着程序的变化进行实时更新。它几乎与自定义扩展相同,除了这个功能可以从脚本环境(如MATLAB或Python)进行连接,这些脚本环境中没有可编译的可执行文件来使OpticStudio启动。

序列模式下,启动独立应用程序然后会自动生成一个模板,文件名称为(xxx数字)PythonStandaloneApplicationxxx.py

C:\Users\Administrator\Documents\Zemax\ZOS-API Projects

前期准备-依赖包和环境

使用Vscode打开编辑该文件

看到文件开头需要win32com包,你需要win+r执行cmd命名,启动conda,通过pip安装pywin32

pip install pywin32

编辑python独立交互程序

程序中的zosapi.TheApplication.SamplesDir的地址为:

C:\Users\Administrator\Documents\Zemax\Samples

第95行处有注释:

# Insert Code Here;

在下面插入代码,控制Zemax的COM组件

设计规格如下的单透镜:

  • 光线来自无限远,半视场角为5°,单一波长(d光,0.587mm)。
  • 准直的入射光被聚焦为最小的RMS光斑半径,均匀射入视场中。
  • F 数为10,入瞳直径为 40 mm。
  • 材料为 N-BK7。
  • 光阑为位于透镜之后单独的表面,可以自由移动。
  • 至少3片透镜,并且中心厚度不超过15mm。
  • 透镜的边缘厚度最小为3mm,空气间隙最小为 0.5 mm

系统基本数据

系统:新建文件,视场,光圈,波长

接下来,前期文件设置

# Insert Code Here;从这开始

    # Example code to create a new system
    TheSystem = zosapi.TheSystem;
    # Create a new system
    TheSystem.New(False);    # False表示不保存文件

    # Example code to save a file
    fileOut = zosapi.TheApplication.SamplesDir + "\\Sequential\\Objectives\\SEFFL002.zmx";

    # Save the current system as a new file;TheSystemData包含系统的所有基本数据,可以用其设置光圈、视场、波长等。

    zosapi.TheSystem.SaveAs(fileOut); #对同一个文件,不能多次保存SaveAs(fileOut);如需,则应另存为名字不同的文件
    # Set the aperture of the system to 40mm
    TheSystemData = TheSystem.SystemData;
    TheSystemData.Aperture.ApertureValue = 40;

    # Fields
    TheSystemData.Fields.AddField(0,5.0,1.0);
    # Wavelength preset
 TheSystemData.Wavelengths.SelectWavelengthPreset(constants.WavelengthPreset_d_0p587);
    #对于枚举常量,如: WavelengthPreset, Python将每个常量创建为{enum name}_{enum value}.

    # Lens data and surfaces editor
    # 每一行表示系统中定义的一个表面:表面0是物面,最后一个表面是像面。
    # 对于位于光阑前的单透镜,透镜的前表面是表面1,透镜的后表面是表面2,光阑是表面3。

    TheLDE = TheSystem.LDE;     # 打开Lens Data Editor
    TheLDE.InsertNewSurfaceAt(1);    # 在第1个位置插入一个表面
    TheLDE.InsertNewSurfaceAt(1);    # 在第1个位置插入一个表面
    Surface_1 = TheLDE.GetSurfaceAt(1);      # 获取第1个表面
    Surface_2 = TheLDE.GetSurfaceAt(2);
    Surface_3 = TheLDE.GetSurfaceAt(3);
    Surface_1.Thickness = 10.0;      # 前透镜厚度为10mm
    Surface_1.Comment = 'front of lens';    
    Surface_1.Material = 'N-BK7';
    Surface_2.Thickness = 50.0;      # 后透镜厚度为50mm
    Surface_2.Comment = 'rear of lens';    
    Surface_3.Comment = 'Stop is free to move';
    Surface_3.Thickness = 350.0;

    # 可以用5个自变量来实现设计目标——透镜的前后半径、透镜的厚度、光阑的位置和像的位置。
    # Make thicknesses and radii variable
    Surface_1.RadiusCell.MakeSolveVariable();    # 前半径
    Surface_1.ThicknessCell.MakeSolveVariable();  # 前透镜厚度
    Surface_2.RadiusCell.MakeSolveVariable();    # 后半径
    Surface_2.ThicknessCell.MakeSolveVariable();      # 后透镜厚度
    Surface_3.ThicknessCell.MakeSolveVariable();      # 光阑厚度
    # Set the initial values for the variables  

    # 如果想在OpticStudio中打开文件来查看当前的进度,首先需要使用以下代码保存镜头文件:
    # Save and close
    TheSystem.Save(); # 最后会保存,中间可以多次保存
    TheSystem.Close(True); # True表示保存文件;

孔径,入瞳直径40mm

视场和权重

镜头数据结果,该系统的光阑前面有镜头,曲率、厚度和备注,设置材料和变量参数

初始系统,2D视图

设置评价函数编辑器

使用序列优化向导 ( Sequential Optimization Wizard ) 在默认的评价函数中指定最小光斑半径 ( Minimum Spot Radius ) 和玻璃/空气的边界条件的目标值。

标签:OpticStudio,Python,厚度,Surface,TheSystem,Zemax,透镜,联用,表面
From: https://www.cnblogs.com/invo/p/18230251

相关文章

  • ### Python 字典操作详解:从创建、增删改查到高级技巧全解析
    1.创建字典使用大括号{}创建空字典empty_dict={}print(empty_dict)#输出:{}使用dict函数创建字典#通过键值对创建字典person=dict(name="Alice",age=30,city="NewYork")print(person)#输出:{'name':'Alice','age':30,'c......
  • ### Python 列表操作详解:从创建、增删到高级技巧全覆盖
    1.创建列表使用list函数创建空列表:empty_list=list()print(empty_list)#输出:[]从字符串创建列表:string="hello"list_from_string=list(string)print(list_from_string)#输出:['h','e','l','l','o']......
  • python常用语法
    Python是一种非常流行的编程语言,因其简洁和易读性而备受欢迎。以下是一些Python的常用语法,涵盖基本语法、数据类型、控制流、函数、类和模块等内容。1.基本语法1.1打印输出print("Hello,world!")1.2变量赋值x=10y=20name="Alice"2.数据类型2.1数字inte......
  • python代码备忘录
    从斐波那契的递归实现到通用递归函数的实现deffibonacci(_target): if_target==0: return1 else returnfibonacci(_target-1)+fibonacci(_target-2) pass fibonacci(10)从上述算法中我们知道,每进入一层递归,递归函数都会在调用自己两次。故此方法实现的......
  • 【用Python画画】画奥运五环
    本文收录于《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢!文章目录一、前言二、代码示例三、知识点梳理四、总结一、前言本文介绍如何使用Python的海龟画图工具turtle,画奥运五环标志。什么是Python?Python是由荷兰人吉多·范罗......
  • python3 源码阅读-虚拟机运行原理
    原文阅读源码版本python3.8.3参考书籍<<Python源码剖析>>参考书籍<<Python学习手册第4版>>官网文档目录介绍Doc目录主要是官方文档的说明。Include:目录主要包括了Python的运行的头文件。Lib:目录主要包括了用Python实现的标准库。Modules:该目录中包含了所有用C......
  • 【Python】使用 Python 查询域名的 IP 地址
    我们都已经长大好多梦正在飞就像童年看到的红色的蜻蜓我们都已经长大好多梦还要飞就像现在心目中红色的蜻蜓                     ......
  • 【python】python古代玻璃制品的成分数据分析与可视化(源码+数据+课程论文)【独一无二】
    ......
  • 基于python的汽车数据可视化、推荐及预测系统
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • vscode如何添加本地python解释器、解析器 Interpreter?(Python: Select Interpreter),并在
    先安装python扩展然后点ctrl+shift+p搜索python:select,选择解析器(或者也可以直接点左下方的) 然后360报毒了,允许通过,然后选择你想要的解释器  然后就好了20230816文章目录在VSCode中添加本地Python解释器 Python解释器简介为什么要在VSCode中设置Python解释器如......