命令参考
同一套命令同时出现在 CLI(lb <命令>)、MCP 工具与桌面端(命令面板、命令行)中。标 会修改设计 的命令都支持 dry_run(CLI 为 --dry-run):只返回 diff 与改前改后指标。标 证据 的命令结果会登记证据 id;它们都接受 config(CLI 为 --config):多重结构的设计在该组态上算,组态号进证据键。标 长任务 的命令在 MCP 里多一个 background 参数:为 true 时立即返回任务句柄,之后用 job_status / job_result / job_apply / job_cancel。标 付费 的命令(或其中一部分)免费版不能用:档位不够时回诊断 E-TIER,说明怎么升级。
| 类别 | 命令 | 说明 |
|---|---|---|
| 文件 | export_zmx | 导出为 Zemax .zmx(曲率的角度 / F 数 solve、±1 倍 pickup 与曲率、厚度、二次曲面、非球面系数的变量原样写出,其余 solve 按当前有效值固化)。默认在旁边附一张「这个设计在 Zemax 里应该看到的数」 |
| 文件 | feedback | 导出反馈复现包(.lbfb):版本、引擎构建号、操作系统、你的描述、最近的命令与结果(报错、诊断码、崩溃的调用栈)、 |
| 文件 | feedback_replay | 重放反馈复现包:用包里的设计新建会话,把「在这一版设计上失败 / 崩溃过」的命令按原参数再跑一遍, |
| 文件 | fmt | 把镜头文本整理成规范格式(对齐列、规范数字、压缩变量范围)。 |
| 文件 | import_zmx | 导入 Zemax .zmx(序列模式)为 .lens,并在当前会话打开。 |
| 文件 | merge_disk | 把磁盘上别人存的改动并入当前设计。另一个窗口、AI 或外部编辑器改了同一个 .lens 并存盘后用:以你载入 / 上次保存的版本 |
| 文件 | new | 从模板新建一个 .lens 文件,并在当前会话中打开它。 |
| 文件 | open | 打开一个 .lens 文件作为当前会话(MCP / GUI 用;CLI 直接把文件当参数)。 |
| 文件 | save | 保存当前镜头文本。文件在你载入之后被别人(另一个窗口、AI、外部编辑器)存过时不覆盖,先用 merge_disk 把别人的改动并进来。 |
| 编辑 | delete | 删除一个面(后续面号、var、pickup 自动重编号;被 pickup 引用或是光阑时拒绝)。 |
| 编辑 | fix | 取消优化变量。 |
| 编辑 | insert | 在某面之后插入新面(后续面号、var、pickup 自动重编号)。 |
| 编辑 | mc_set | 改多重结构里一个单元格:mc 行 ref 在第 config 个组态的值(只动那一个数)。组态 1 的值应与 surf 等行相同, |
| 编辑 | patch | 用一段完整的新文本替换当前镜头(AI 大改时用;同样会先校验、给出 diff)。 |
| 编辑 | set | 设置某个面的参数(只改动对应的数字,注释和排版不动)。 |
| 编辑 | stop | 把光阑移到指定面。 |
| 编辑 | system | 替换系统设置语句:aperture / field / wave / catalogs / ray_aim / title / units。 |
| 编辑 | vary | 把参数设为优化变量(LDE 里的 V)。 |
| 分析 | calc | 算一个表达式(像在 MATLAB 的命令窗口里算一句):MATLAB 风格的向量化表达式,可直接调用操作数、引用 op 行的 name= 与 |
| 分析 | check | 全面检查:DSL 语法/语义(含反射镜之后的厚度符号)、玻璃解析、引擎构建、装夹余量(穿模 / 负边厚)、 |
| 分析 | encircled_energy | 包围能量(Zemax Diffraction / Geometric Encircled Energy):以参考点为圆心、半径 r 的圆内能量占比,各视场一条曲线, |
| 分析 | field_curvature | 场曲(子午/弧矢焦点偏移,mm)与畸变(%,f·tanθ)随视场的变化。 |
| 分析 | field_map | 全视场像质图(Zemax Full-Field Aberration / RMS Field Map):二维视场网格上的复色 RMS 弥散斑或 RMS 波前(热图 + 等值线), |
| 分析 | focal_shift | 色焦移:近轴焦点随波长的移动(相对主波长,µm),给出波段内最大焦移范围与衍射极限焦深 4λF#²(Zemax Chromatic Focal Shift)。 |
| 分析 | footprint | 足迹:各视场光束(主波长)在某个面上的落点范围(本面局部坐标,mm)、光束最大半径与通光半口径之比、 |
| 分析 | glass | 搜索玻璃库(牌号子串或通配符 + nd/vd 范围)。解析 .lens 时永远精确匹配,只有这里允许模糊搜索。 |
| 分析 | glass_map | 玻璃图(nd–vd 图,Zemax Glass Map):厂商目录里每个牌号的 nd 与阿贝数 vd,叠本设计用到的玻璃。换玻璃时看附近有哪些 |
| 分析 | grid_distortion | 网格畸变(Zemax Grid Distortion):物方正方形网格(半宽 = 最大视场;角度视场按 tan 等距)的主光线像点与理想(近轴) |
| 分析 | huygens_mtf | 惠更斯 MTF(Zemax Huygens MTF):每个视场在实际像面上算惠更斯 PSF,由线扩散函数求子午 / 弧矢 MTF。像面倾斜 / 弯曲、 |
| 分析 | huygens_psf | 惠更斯 PSF(Zemax Huygens PSF,默认复色):从出瞳参考球面上的每个采样点向实际像面上的每个像素做惠更斯–菲涅耳求和, |
| 分析 | image_sim | 图像仿真(Zemax Image Simulation):测试图经镜头成的像。每个波长按自己的 PSF 卷积,三通道按波长的颜色合成; |
| 分析 | lateral_color | 垂轴色差:各波长主光线像高相对主波长的差(µm)随视场的变化;最短与最长波长之差即 Zemax 的 LACL。 |
| 分析 | layout | 2D 布局图(YZ 截面)存为 PNG,并做装夹余量检查(穿模 / 负边厚);在 MCP 里会把图片直接返回给 AI 看。 |
| 分析 | longitudinal | 纵向像差:轴上子午光线与光轴的交点相对像面的距离(mm)随归一化光瞳高度的变化,各波长(Zemax Longitudinal Aberration)。 |
| 分析 | mtf | FFT MTF(复色按波长权重合成),给出指定频率处各视场的子午/弧矢 MTF 与衍射极限。取样默认自动:取各视场与波长的 |
| 分析 | mtf_vs_field | MTF 随视场(Zemax FFT MTF vs. Field):几个空间频率上,子午 / 弧矢 MTF 随视场(0 到最大视场)的变化;口径同 lb mtf |
| 分析 | opd_fan | OPD 扇:各视场 × 各波长的光程差(相对主光线参考球面,单位:波长)。 |
| 分析 | paraxial | 近轴量(Zemax System Data 口径):EFFL、BFL、F/#、入瞳/出瞳、总长、放大率。 |
| 分析 | psf | FFT PSF(默认复色,按波长权重合成):像面上的点扩散函数,按衍射极限峰值归一(峰值即 Strehl),以主波长主光线像点为中心;给出 Strehl、峰值位置、 |
| 分析 | ray | 单光线追迹(Zemax Single Ray Trace):给出每个面上的交点与方向余弦。 |
| 分析 | ray_fan | 光扇图:各视场 × 各波长的横向像差(相对主波长主光线,µm),子午 ey(Py)、弧矢 ex(Px)。 |
| 分析 | relative_illumination | 相对照度(Zemax Relative Illumination):像面照度与轴上之比随视场的变化,= 出瞳在像方方向余弦空间里的面积之比; |
| 分析 | rms_field | RMS 随视场(Zemax RMS vs. Field):沿 +y 从轴上到最大视场,各波长与复色的 RMS 弥散斑半径(µm)或 RMS 波前(波长), |
| 分析 | sag | 矢高表(Zemax Sag Table):某个面从顶点到半口径的矢高 z(r)、过顶点与边缘的最佳拟合球(BFS)半径、相对它的偏离 |
| 分析 | seidel | 三阶(Seidel)像差系数:逐面 S_I…S_V、C_I、C_II(mm)及总和,波像差系数 W040…(波长)。 |
| 分析 | show | 处方表(相当于 Zemax 的 Lens Data Editor 视图)。 |
| 分析 | spot | 点列图 RMS / GEO 半径(µm),各视场 × 各波长,以及按波长权重合成的复色值。 |
| 分析 | spot_density | 点密度图:大量光线(光瞳分层抖动采样,按面积均匀,每个波长都追)落在像面上的能量密度,每视场一张; |
| 分析 | spot_diagram | 点列图图像(PNG,每视场一个子图,各波长分色,µm);在 MCP 里会把图片直接返回给 AI 看。 |
| 分析 | strehl | 各视场的 Strehl 比(主波长,FFT PSF 峰值 / 衍射极限峰值)。 |
| 分析 | through_focus | 离焦点列图:像面前后若干位置的复色 RMS 弥散斑(µm);默认步长取衍射焦深 2λF#² 向上取整(Zemax Through Focus Spot)。 |
| 分析 | through_focus_mtf | 离焦 MTF(Zemax Through Focus MTF):一个空间频率上各视场子午 / 弧矢 MTF 随像面离焦的变化,给出各视场的最佳焦面 |
| 分析 | tolerance | 公差分析(Zemax Tolerancing)。设计本身不动;分析前 solve / pickup 固化成当前值(含坐标断点的系统不支持 solve), |
| 分析 | wavefront | 波前图:光瞳上 OPD(波长)的分布,相对主光线参考球面(与 OPD 扇、RWCE 同一口径),给出 RMS 与 P-V(Zemax Wavefront Map)。 |
| 分析 | zernike | Zernike 系数(Zemax Zernike Fringe / Standard Coefficients):光瞳上的 OPD(相对主光线参考球面,与波前图同一组采样) |
| 优化 | default_merit | 设置默认评价函数(Zemax 优化向导);写 off 删除。 |
| 优化 | glass_substitute | 把模型玻璃换成最接近的目录玻璃(Zemax 用模型玻璃优化之后的玻璃替换):按 (nd, vd) 距离找最近的牌号——nd 差 0.01 |
| 优化 | let_delete | 删除一个 let。还有别的 let 或 op EXPR 行用到它时拒绝,并列出用到它的行(按依赖关系查,写在它前面后面的都算)。 |
| 优化 | let_set | 设置评价函数里的中间量 let 名 = 表达式(已有就改、没有就加)。表达式是 MATLAB 风格:向量 [0 0.5 1]、区间 0:0.25:1、 |
| 优化 | merit | 评价函数表(Zemax MFE 视图):每行的值、目标、权重、贡献百分比,以及评价函数总值。 |
| 优化 | mf_export | 把评价函数(default + op 行)导出为 .mf 文件,供其他镜头复用(类似 Zemax 的 .MF)。 |
| 优化 | mf_import | 从 .mf 文件导入评价函数,替换当前的 default/op 行。也认 Zemax 的文本评价函数(每行「操作数 Int1 Int2 Data1–4 目标 |
| 优化 | op_add | 追加一行评价函数(op 行)。 |
| 优化 | op_delete | 删除评价函数第 row 行(序号见 merit 命令的 # 列)。 |
| 优化 | op_set | 改写评价函数第 row 行。 |
| 优化 | optimize | 优化:调整 var 变量使评价函数最小。结果以补丁形式提出——先 --dry-run 看 diff 与评价函数变化,再应用。 |
| 任务 | job_apply | 把后台任务算出的补丁应用到当前设计(与直接运行该命令的效果相同:同样做错误比对、进撤销栈)。 |
| 任务 | job_cancel | 取消后台任务。优化会尽快收尾并保留目前最好的结果(仍是补丁,可以 job_result 查看、job_apply 应用)。 |
| 任务 | job_result | 取后台任务的完整结果:修改类命令给出 diff 预览与改前改后指标(尚未应用,用 job_apply 应用); |
| 任务 | job_status | 查后台任务的状态与进度;不给 id 列出本会话的全部任务。 |
| 历史 | compare | 版本对比:任意两版设计并排比较一阶量(EFFL、BFL、F/#、总长、入瞳 / 出瞳…)、处方差异(只列变了的面与参数) |
| 历史 | diff | 当前文本与磁盘上已保存版本的差异。 |
| 历史 | evidence | 按证据 id 查回某次分析的输入与输出(AI 引用数值时给出的 id)。 |
| 历史 | history | 改动日志(桌面端复核):经命令落到设计上的每一次改动——来源(mcp / gui / cli)、命令、说明、关键指标的变化, |
| 历史 | history_restore | 回到改动日志里第 entry 条改动之前(或之后)的那一版:整段文本换成当时的快照,同样先给 diff、可 dry_run、能撤销, |
| 历史 | redo | 重做被撤销的修改。 |
| 历史 | signoff | 签核:把磁盘上的这一版标记为「已复核」,记下复核人、时间、备注、模型哈希与验收结论(有 spec 时)。 |
| 历史 | signoff_status | 签核状态:当前设计是不是签核过的那一版;签核后改过的,分「只改了名称 / 注释 / 格式」与「光学改了(签核失效)」。 |
| 历史 | undo | 撤销上一次修改。 |
| 帮助 | bench | 跑分:在双高斯与广角两个固定镜头上跑一套大批量计算,测这台机器跑 LensBench 有多快,折算成分数并估计在线榜名次。 |
| 帮助 | bench_board | 跑分榜:在线榜(连不上时用随包的快照),每条按本版的参照值重新记分、重新校验后排名,同一台机器只留最好的一次。 |
| 帮助 | bench_submit | 把跑分结果提交到在线跑分榜(不提交就不录入)。默认提交本机最近一次 lb bench 的结果。 |
| 帮助 | commands | 列出所有命令(按类别)。 |
| 帮助 | docs | 从命令注册表与 DSL 规格重新生成参考文档(docs/reference/)。 |
| 帮助 | golden | 运行金标准验证套件(golden/ 下的 YAML 案例:解析解、商业软件算出的值、文献值),逐项给出偏差。 |
| 帮助 | help | DSL 与命令的速查。不带参数列出全部主题;topic 可以是 .lens 语句名(surf / field …)、 |
| 帮助 | license | 登录与登录凭证的状态:登录了没有、档位(试用中到几号)、凭证几时到期、这个版本停用了没有、几时到期、计算前检不检查。 |
| 帮助 | login | 登录 optic.chat 账号:在浏览器里打开登录页,登录或注册后自动回到这里(本机临时开一个端口接回调;密码不经过本程序)。 |
| 帮助 | logout | 退出 optic.chat 账号:作废这台电脑上的登录令牌、删掉登录凭证(桌面端的 AI 页同时退出)。 |
| 帮助 | mcp_config | 生成 MCP 客户端的配置(启动命令带 --root,把工具的文件读写限定在项目目录里)。默认只打印;--write 合并写入配置文件 |
| 帮助 | settings | 用户级设置(CLI、MCP、桌面端共用,存在用户配置目录的 LensBench/settings.json):不带参数列出全部;给 key 看一项; |
| 帮助 | update | 检查新版本:取 optic.chat 上签过名的版本文件,有新版本时显示版本号与更新说明;--download 再下载安装包并校验。 |
| 出图 | check_report | 报告草稿数字核对:外部 AI 写完的报告草稿(Markdown / 文本)交回来,按句中引用的证据 id,到素材包里该证据的 |
| 出图 | gallery | 出图画廊:把一组设计的全部图型渲染成一页本地 HTML(reports/gallery/index.html),供人眼审图。 |
| 出图 | pack | 导出报告素材包:图(PNG + SVG,带图框与证据 id)+ 数字页(CSV / JSON)+ 处方 / 一阶量 / 验收 / 可制造性表 + |
| 出图 | pack_status | 查素材包是否过期:按清单里每条素材的证据键,在当前设计上重算证据 id,对不上的就是过期(设计、规格或引擎变了)。 |
| 出图 | plot | 出版级出图:带图框(标题 + 信息块:镜头、视场、波长、证据 id、模型哈希、时间)的 PNG / SVG / PDF, |
| 出图 | view_set | 设置某种图的视图选项(写成 .lens 里的 view 语句;同一图型已有的选项合并,新值覆盖旧值)。 |
| 验收 | spec_add | 追加一条验收规格(spec 语句)。有量纲的数值必须写单位;只写绝对目标值。 |
| 验收 | spec_delete | 删除第 row 条规格(按 spec 语句在文件里的顺序,从 1 起;lb verify 的 # 列)。 |
| 验收 | verify | 按 spec 逐条验收:用固定的规范取样独立复算(不读 view,不用优化器自报的数),给出每条的值、界限、过 / 不过与来源 |
| 编排 | action_add | 给动作加一步(一行 action 语句,插在同名动作的最后一步之后;没有这个动作就新建)。 |
| 编排 | action_delete | 删掉动作的第 row 步(按书写顺序,从 1 起);row = 0 删掉整个动作。 |
| 编排 | action_move | 调动作里步骤的顺序:第 row 步挪到第 to 步(从 1 起)。步骤按这个顺序执行。 |
| 编排 | action_run | 执行一个动作(.lens 里 action 行写的若干步),把结果以补丁提出:先 --dry-run 看 diff 与改前改后的指标,再应用。 |
| 编排 | materials | 材料数据:设计里每种玻璃的 nd、vd、密度、线膨胀系数、dn/dT、ΔPgF、供货状态与化学稳定性(厂商目录:随包材料库或 AGF)。 |
| 编排 | report_add | 给报告加一个评估项(一行 report 语句,插在同名报告的最后一行之后;没有这份报告就新建)。 |
| 编排 | report_delete | 删掉报告的第 row 项(按书写顺序,从 1 起);row = 0 删掉整份报告。 |
| 编排 | report_move | 调报告里评估项的顺序:第 row 项挪到第 to 项(从 1 起)。汇总按这个顺序出。 |
| 编排 | report_run | 按报告设计出评估汇总:当前设计(基线)和每个动作的结果(在副本上执行,不改当前设计)逐项评估——光学、热效应、重量、 |
| 编排 | report_set | 改报告第 row 项(从 1 起)的选项:只动这一行里对应的 key=value;写成 key=(不给值)或 key=default 删掉这个选项、回到默认值。 |
| 编排 | thermal | 热分析:温度范围内各点上,镜片按自己玻璃的线膨胀系数、空气间隔按镜筒材料伸缩,折射率按厂商目录的热色散系数(Schott |
| 编排 | weight | 镜片质量:各片玻璃的体积、密度(厂商目录)与质量,总质量。外径取两面半口径中较大的,小的一面按平面延伸 |
文件
export-zmx
付费:个人基础版起 · 入口:CLI / GUI / MCP
导出为 Zemax .zmx(曲率的角度 / F 数 solve、±1 倍 pickup 与曲率、厚度、二次曲面、非球面系数的变量原样写出,其余 solve 按当前有效值固化)。默认在旁边附一张「这个设计在 Zemax 里应该看到的数」
(<名字>_zemax_check.md / .csv:System Data、点列 RMS、FFT MTF、最大畸变、Seidel 总和,写明在 Zemax 哪个窗口看、 取样设置与证据 id),用户在 Zemax 里打开就能半分钟核完。
lb export-zmx <镜头.lens> [<out>] [--check]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
out | str | '' | 输出 .zmx 路径;留空则与 .lens 同名(同一目录) |
check | bool | True | 同时写出 Zemax 对照表(默认是;命令行 --no-check 不写) |
示例:
lb export-zmx cooke.lens
lb export-zmx cooke.lens out/cooke.zmx --no-checkfeedback
入口:CLI / GUI / MCP
导出反馈复现包(.lbfb):版本、引擎构建号、操作系统、你的描述、最近的命令与结果(报错、诊断码、崩溃的调用栈)、
当前诊断码。设计文件默认不带;with_design=true 才带(仅用于复现,修复后删除)。可附一张截图(PNG / JPG,≤ 10 MB; 截图可能露出设计内容,默认不带)。不联网,导出成文件由你自己发。 收到的人用 lb feedback-replay 无界面重放,一条命令判定复现 / 不复现。
给 AI:用户说「跟 Zemax 对不上 / 崩了 / 结果不对 / 报错看不懂」时,主动提出导出反馈包;description 按「做了什么 / 期望什么 / 实际怎样」三段代填(数字带证据 id),先给用户看一遍再导出。with_design 与 screenshot 会带出设计内容,必须先问用户、得到同意才带。
lb feedback [<description>] [--with-design] [--screenshot <str>] [--out <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
description | str | '' | 问题描述(做了什么、期望什么、实际怎样) |
with_design | bool | False | 附上设计文件(.lens 全文)——默认不带 |
screenshot | str | '' | 附一张截图(PNG / JPG 文件路径)——默认不带 |
out | str | '' | 输出文件;留空写到 <镜头目录>/reports/feedback-<时间>.lbfb |
示例:
lb feedback "优化后 MTF 反而变差" --with-designfeedback-replay
入口:CLI / GUI / MCP
重放反馈复现包:用包里的设计新建会话,把「在这一版设计上失败 / 崩溃过」的命令按原参数再跑一遍,
逐条判定复现(还是同样失败)/ 不复现(现在跑通了)/ 变了(失败得不一样)。没附设计文件的包只能列出报错,不能重放。
lb feedback-replay <path>| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
path | str | 必填 | 复现包文件(.lbfb) |
示例:
lb feedback-replay feedback-20261016-101500.lbfbfmt
会修改设计 · 入口:CLI / GUI / MCP
把镜头文本整理成规范格式(对齐列、规范数字、压缩变量范围)。
规范化会丢掉 # 注释;文件里有注释时需要 --force。
lb fmt <镜头.lens> [--force] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
force | bool | False | 文件含 # 注释时仍然规范化(注释会丢失) |
import-zmx
入口:CLI / GUI / MCP
导入 Zemax .zmx(序列模式)为 .lens,并在当前会话打开。
LensBench 自带 zmx 解析(玻璃牌号与厂商原样保留)。曲率、厚度、二次曲面与非球面系数上的变量标记导入为 var,边缘 / 主光线角度、F 数与 pickup 导入为 solve——构建后与 Zemax 存的数值核对,对不上的按数值固化(W-ZMX-SOLVE);厚度 pickup 导入为 T=pickup(…),边缘光线高度 solve(zmx 的 MAZH)导入为 T=solve(marginal_height, …),同样核对; 其余 solve 按数值导入。单面偏心倾斜展开成坐标断点。牌号在自带材料库里找不到(多是停产牌号)、本机 Zemax 的 Glasscat 里按文件的 GCAT 能找到时,在 .lens 里加一行 agf 指向它(I-ZMX-GLASSCAT);没解析的面指令合成一条提示。
lb import-zmx <zmx_path> [<out>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
zmx_path | str | 必填 | .zmx 文件路径(UTF-8 / UTF-16 均可) |
out | str | '' | 输出 .lens 路径;留空则与 zmx 同名 |
示例:
lb import-zmx cooke.zmx
lb import-zmx cooke.zmx designs/cooke.lensmerge-disk
会修改设计 · 入口:CLI / GUI / MCP
把磁盘上别人存的改动并入当前设计。另一个窗口、AI 或外部编辑器改了同一个 .lens 并存盘后用:以你载入 / 上次保存的版本
为基准做三方合并,两边改的不是同一行时自动合上;改了同一行且不一样是冲突,用 prefer 选一边。你这边没有未保存的改动时, 等于重新载入磁盘上的版本。
lb merge-disk <镜头.lens> [--prefer <str>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
prefer | str | '' | 冲突时取哪一边:disk(磁盘上的)/ mine(当前的);留空则有冲突就报错、不改设计 |
示例:
lb merge-disk my.lens --dry-run
lb merge-disk my.lens --prefer disknew
入口:CLI / GUI / MCP
从模板新建一个 .lens 文件,并在当前会话中打开它。
lb new <path> [--template <str>] [--force]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
path | str | 必填 | 新文件路径(.lens) |
template | str | 'singlet' | 模板:singlet(单片,带焦点 solve)/ cooke(Cooke 三片式)/ blank(空白) |
force | bool | False | 文件已存在时覆盖 |
示例:
lb new my.lens --template cookeopen
入口:GUI / MCP
打开一个 .lens 文件作为当前会话(MCP / GUI 用;CLI 直接把文件当参数)。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
path | str | 必填 | .lens 文件路径 |
save
入口:GUI / MCP
保存当前镜头文本。文件在你载入之后被别人(另一个窗口、AI、外部编辑器)存过时不覆盖,先用 merge_disk 把别人的改动并进来。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
path | str | '' | 另存为路径;留空则保存到原文件 |
force | bool | False | 磁盘上的文件被别人改过时仍然覆盖(会丢掉别人的改动) |
编辑
delete
会修改设计 · 入口:CLI / GUI / MCP
删除一个面(后续面号、var、pickup 自动重编号;被 pickup 引用或是光阑时拒绝)。
lb delete <镜头.lens> <surf> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
surf | str | 必填 | 面号 |
fix
会修改设计 · 入口:CLI / GUI / MCP
取消优化变量。
lb fix <镜头.lens> <refs...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
refs | list | 必填 | 变量引用(同 vary);写 all 取消全部 |
insert
会修改设计 · 入口:CLI / GUI / MCP
在某面之后插入新面(后续面号、var、pickup 自动重编号)。
lb insert <镜头.lens> <after> [<values...>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
after | str | 必填 | 插在哪个面之后(数字或 OBJ / STO) |
values | list | [] | 新面的参数 key=value;不写 T 时默认 T=0 |
示例:
lb insert cooke.lens 6 R=-100 T=2 glass=SCHOTT:N-BK7mc-set
会修改设计 · 入口:CLI / GUI / MCP
改多重结构里一个单元格:mc 行 ref 在第 config 个组态的值(只动那一个数)。组态 1 的值应与 surf 等行相同,
改组态 1 时记得用 set 同步改 surf 行(不同时 check 报 W-MC-BASE)。
lb mc-set <镜头.lens> <ref> <config> <value> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
ref | str | 必填 | mc 行的引用,如 T5、glass@6、tx@4、field@3、aperture、weight |
config | int | 必填 | 组态号(从 1 起) |
value | str | 必填 | 新值(写法同 mc 行,如 12.5、N-SF6) |
示例:
lb mc-set zoom.lens T5 2 13.981
lb mc-set zoom.lens glass@6 3 N-SF6patch
会修改设计 · 入口:CLI / GUI / MCP
用一段完整的新文本替换当前镜头(AI 大改时用;同样会先校验、给出 diff)。
lb patch <镜头.lens> [<text>] [--text-file <str>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
text | str | '' | 新的完整 .lens 文本 |
text_file | str | '' | 或者从文件读取新文本 |
set
会修改设计 · 入口:CLI / GUI / MCP
设置某个面的参数(只改动对应的数字,注释和排版不动)。
值写 DSL 取值:数字、牌号、solve(...)、pickup(...);值留空表示删除该参数。
lb set <镜头.lens> <surf> <values...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
surf | str | 必填 | 面号:数字,或 OBJ / STO / IMA |
values | list | 必填 | 若干 key=value,如 R=25 T=4 glass=SCHOTT:N-BK7 k=-1 a4=1e-6 |
示例:
lb set cooke.lens 6 T=solve(marginal_height,0)
lb set cooke.lens 3 glass=CDGM:H-ZF52A --dry-runstop
会修改设计 · 入口:CLI / GUI / MCP
把光阑移到指定面。
lb stop <镜头.lens> <surf> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
surf | str | 必填 | 面号 |
system
会修改设计 · 入口:CLI / GUI / MCP
替换系统设置语句:aperture / field / wave / catalogs / ray_aim / title / units。
field、wave 可以多行(用换行分隔),会整体替换原有的同名语句。
lb system <镜头.lens> <statement> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
statement | str | 必填 | 新语句文本,如 "aperture FNO 4"、"wave F, d*, C"、"field angle 0, 10, 14" |
示例:
lb system cooke.lens "aperture FNO 4"
lb system cooke.lens "catalogs SCHOTT, CDGM"vary
会修改设计 · 入口:CLI / GUI / MCP
把参数设为优化变量(LDE 里的 V)。
lb vary <镜头.lens> <refs...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
refs | list | 必填 | 变量引用:R3、T6、K2、a4@5,范围 R1..R6 |
示例:
lb vary cooke.lens R1..R6 T6分析
calc
证据 · 入口:CLI / GUI / MCP
算一个表达式(像在 MATLAB 的命令窗口里算一句):MATLAB 风格的向量化表达式,可直接调用操作数、引用 op 行的 name= 与
let。结果是一个数或一个向量;带证据 id(证据键含表达式与评价函数)。值用操作数自己的单位(长度 mm、波前 λ、角度 °、畸变 %)。
lb calc <镜头.lens> <expr> [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
expr | str | 必填 | 表达式,如 "max(RSCE(ring=3, Hy=0:0.25:1))" |
示例:
lb calc cooke.lens "EFFL(wave=1) - EFFL(wave=3)"
lb calc cooke.lens "RSCE(ring=3, Hy=0:0.25:1) * 1000"
lb calc cooke.lens "max(CTVA(1:6)) - min(CTVA(1:6))"check
证据 · 入口:CLI / GUI / MCP
全面检查:DSL 语法/语义(含反射镜之后的厚度符号)、玻璃解析、引擎构建、装夹余量(穿模 / 负边厚)、
探测光线(每个视场的主光线与边缘光线能否到达像面)。
lb check <镜头.lens> [--config <int>]encircled-energy
证据 · 入口:CLI / GUI / MCP
包围能量(Zemax Diffraction / Geometric Encircled Energy):以参考点为圆心、半径 r 的圆内能量占比,各视场一条曲线,
叠衍射极限;给出 50 / 80 / 90 % 能量半径(µm)。出图:lb plot <镜头> encircled_energy。
lb encircled-energy <镜头.lens> [--method <str>] [--ref <str>] [--wave <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
method | str(diffraction / geometric) | 'diffraction' | diffraction = 由 FFT PSF 积分(含衍射)/ geometric = 光线落点(不含衍射) |
ref | str(chief / centroid) | 'chief' | 圆心(chief = 主波长主光线像点 / centroid = 复色能量质心) |
wave | int | 0 | 波长序号(0 = 全部波长按权重合成) |
示例:
lb encircled-energy cooke.lens
lb encircled-energy cooke.lens --method geometric --ref centroidfield-curvature
证据 · 入口:CLI / GUI / MCP
场曲(子午/弧矢焦点偏移,mm)与畸变(%,f·tanθ)随视场的变化。
lb field-curvature <镜头.lens> [--num <int>] [--out <str>] [--plot] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num | int | 33 | 视场采样点数 |
out | str | '' | PNG 输出路径;留空写到 reports/<名字>_fieldcurv.png |
plot | bool | True | 是否出图 |
field-map
证据 · 入口:CLI / GUI / MCP
全视场像质图(Zemax Full-Field Aberration / RMS Field Map):二维视场网格上的复色 RMS 弥散斑或 RMS 波前(热图 + 等值线),
一眼看出整幅画面哪里最差(包括角落);偏心 / 倾斜系统的不对称直接可见。旋转对称系统按视场半径算再展开(等价、快), 其余逐点算;取样同 lb rms-field。出图:lb plot <镜头> field_map(--view "area=sensor data=wavefront")。
lb field-map <镜头.lens> [--data <str>] [--ref <str>] [--area <str>] [--n <int>] [--rings <int>] [--arms <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
data | str(spot / wavefront) | 'spot' | spot(复色 RMS 弥散斑半径,默认)/ wavefront(复色 RMS 波前) |
ref | str(centroid / chief) | 'centroid' | centroid(相对质心,默认)/ chief(相对主光线) |
area | str(circle / sensor) | 'circle' | circle(整个视场圆,默认)/ sensor(内接的 3:2 传感器矩形) |
n | int | 15 | 网格每边点数(5–61) |
rings | int | 6 | 高斯求积环数 |
arms | int | 0 | 高斯求积臂数(0 = 自动) |
示例:
lb field-map cooke.lens --area sensorfocal-shift
证据 · 入口:CLI / GUI / MCP
色焦移:近轴焦点随波长的移动(相对主波长,µm),给出波段内最大焦移范围与衍射极限焦深 4λF#²(Zemax Chromatic Focal Shift)。
lb focal-shift <镜头.lens> [--num <int>] [--wmin <float>] [--wmax <float>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num | int | 41 | 波长采样点数 |
wmin | float | 0.0 | 波长下限 µm(0 = 最短系统波长) |
wmax | float | 0.0 | 波长上限 µm(0 = 最长系统波长) |
footprint
证据 · 入口:CLI / GUI / MCP
足迹:各视场光束(主波长)在某个面上的落点范围(本面局部坐标,mm)、光束最大半径与通光半口径之比、
落在固定口径(semi=)之外的光线数(Zemax Footprint Diagram);all = 逐面列出口径占用。 光束轮廓是真实的边界光线(渐晕系数、被挡的光线都算进去),不是拟合的圆。出图:lb plot <镜头> footprint。
lb footprint <镜头.lens> [<surface>] [--rings <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
surface | str | '' | 面号,或 all(所有面);留空 = 按 .lens 里的 view footprint 设置(默认第 1 面) |
rings | int | 6 | 六角形采样环数(单面时用) |
示例:
lb footprint cooke.lens 4
lb footprint cooke.lens allglass
入口:CLI / GUI / MCP
搜索玻璃库(牌号子串或通配符 + nd/vd 范围)。解析 .lens 时永远精确匹配,只有这里允许模糊搜索。
lb glass [<pattern>] [--catalogs <str>] [--nd-min <float>] [--nd-max <float>] [--vd-min <float>] [--vd-max <float>] [--limit <int>] [--agf <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
pattern | str | '' | 牌号子串或通配符,如 BK7、N-SF*、H-ZF* |
catalogs | str | '' | 只搜这些厂商(逗号分隔),留空搜全部 |
nd_min | float | 0.0 | nd 下限(0 表示不限) |
nd_max | float | 0.0 | nd 上限(0 表示不限) |
vd_min | float | 0.0 | vd 下限(0 表示不限) |
vd_max | float | 0.0 | vd 上限(0 表示不限) |
limit | int | 30 | 最多返回条数 |
agf | str | '' | 改为搜索这个 Zemax AGF 文件(nd/vd 按 AGF 的色散公式计算) |
示例:
lb glass N-SF* --catalogs SCHOTT
lb glass --nd-min 1.8 --vd-max 25 --catalogs CDGM
lb glass "N-*" --agf SCHOTT.AGFglass-map
证据 · 入口:CLI / GUI / MCP
玻璃图(nd–vd 图,Zemax Glass Map):厂商目录里每个牌号的 nd 与阿贝数 vd,叠本设计用到的玻璃。换玻璃时看附近有哪些
牌号;按 nd / vd 精确找牌号用 lb glass。出图:lb plot <镜头> glass_map(--view "catalogs=all")。
lb glass-map <镜头.lens> [--catalogs <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
catalogs | str(design / all) | 'design' | design(本设计 catalogs 里的厂商,默认)/ all(全部厂商) |
示例:
lb glass-map cooke.lensgrid-distortion
证据 · 入口:CLI / GUI / MCP
网格畸变(Zemax Grid Distortion):物方正方形网格(半宽 = 最大视场;角度视场按 tan 等距)的主光线像点与理想(近轴)
网格比较,给出每点的径向畸变、最大畸变与 SMIA TV 畸变。出图:lb plot <镜头> grid_distortion(--view "exaggerate=10" 放大偏离看形状)。
lb grid-distortion <镜头.lens> [--n <int>] [--wave <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
n | int | 11 | 网格每边点数(奇数,5–41) |
wave | int | 0 | 波长序号(0 = 主波长) |
示例:
lb grid-distortion wide.lenshuygens-mtf
证据 · 入口:CLI / GUI / MCP
惠更斯 MTF(Zemax Huygens MTF):每个视场在实际像面上算惠更斯 PSF,由线扩散函数求子午 / 弧矢 MTF。像面倾斜 / 弯曲、
主光线斜入射时与 FFT MTF 不同(像面绕 x 倾斜 θ,子午 MTF(f) = 正入射的 MTF(f / cos θ))。复色按复数 OTF 加权合成 (即复色 PSF 的 MTF,含垂轴色差),与 FFT MTF 同一口径。 出图同 mtf:lb plot <镜头> huygens_mtf。
lb huygens-mtf <镜头.lens> [<freqs...>] [--max-freq <float>] [--sampling <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
freqs | list | [] | 要列表的空间频率(cycles/mm),默认 10 20 30 50 和截止频率的一半 |
max_freq | float | 0.0 | 曲线最高频率;0 表示到衍射截止频率 |
sampling | int | 32 | 光瞳采样(16–128;越大越准、越慢) |
示例:
lb huygens-mtf cooke.lens 20 40 60
lb huygens-mtf tilted.lens --sampling 64huygens-psf
证据 · 入口:CLI / GUI / MCP
惠更斯 PSF(Zemax Huygens PSF,默认复色):从出瞳参考球面上的每个采样点向实际像面上的每个像素做惠更斯–菲涅耳求和,
倾斜 / 弯曲像面、大视场主光线斜入射时 PSF 在像面上的拉伸都算进去(FFT PSF 算的是垂直于主光线的平面);各波长共用同一张 物理网格。按「同一光瞳、零像差」的峰值归一(峰值即 Strehl),以主波长主光线像点为中心。比 FFT PSF 慢(像素² × 采样²)。 出图同 psf:lb plot <镜头> huygens_psf(--view "scale=log")。
lb huygens-psf <镜头.lens> [--field <int>] [--wave <int>] [--sampling <int>] [--pixels <int>] [--delta <float>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
field | int | 1 | 视场序号(1 起) |
wave | int | 0 | 波长序号(0 = 全部波长按权重合成,即复色;k = 第 k 个波长) |
sampling | int | 32 | 光瞳采样(16–128;越大越准、越慢) |
pixels | int | 128 | 像面网格边长(16–256,取奇数) |
delta | float | 0.0 | 像素间距(µm;0 = 自动:窗口包住几何弥散 95 % 半径 × 1.3 加一个艾里半径) |
示例:
lb huygens-psf cooke.lens --field 3
lb huygens-psf tilted.lens --sampling 64 --delta 0.2image-sim
证据 · 入口:CLI / GUI / MCP
图像仿真(Zemax Image Simulation):测试图经镜头成的像。每个波长按自己的 PSF 卷积,三通道按波长的颜色合成;
patch(默认)看某视场点附近一小块的像差模糊与垂轴色差彩边,full 看整个视场的畸变与相对照度。 出图(理想像与仿真像并排):lb plot <镜头> image_sim(--view "mode=full pattern=grid")。
lb image-sim <镜头.lens> [--mode <str>] [--pattern <str>] [--field <float>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
mode | str(patch / full) | 'patch' | patch = 某视场点附近一小块 / full = 整个视场 |
pattern | str(star / grid / bars / checker) | 'star' | 测试图:star 西门子星 / grid 网格 / bars 条纹组 / checker 棋盘 |
field | float | 0.7 | patch 中心的相对视场(0–1,沿 +y) |
示例:
lb image-sim cooke.lens --field 1
lb image-sim wide.lens --mode full --pattern gridlateral-color
证据 · 入口:CLI / GUI / MCP
垂轴色差:各波长主光线像高相对主波长的差(µm)随视场的变化;最短与最长波长之差即 Zemax 的 LACL。
lb lateral-color <镜头.lens> [--num <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num | int | 21 | 视场采样点数 |
layout
证据 · 入口:CLI / GUI / MCP
2D 布局图(YZ 截面)存为 PNG,并做装夹余量检查(穿模 / 负边厚);在 MCP 里会把图片直接返回给 AI 看。
lb layout <镜头.lens> [--out <str>] [--rays <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
out | str | '' | PNG 输出路径;留空则写到 <镜头目录>/reports/<名字>_layout.png |
rays | int | 7 | 每个视场的子午光线数 |
longitudinal
证据 · 入口:CLI / GUI / MCP
纵向像差:轴上子午光线与光轴的交点相对像面的距离(mm)随归一化光瞳高度的变化,各波长(Zemax Longitudinal Aberration)。
lb longitudinal <镜头.lens> [--num <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num | int | 33 | 光瞳采样点数 |
mtf
证据 · 入口:CLI / GUI / MCP
FFT MTF(复色按波长权重合成),给出指定频率处各视场的子午/弧矢 MTF 与衍射极限。取样默认自动:取各视场与波长的
FFT 窗口 ≥ 4 倍几何弥散斑直径的最小一档(128 / 256 / 512 / 1024);并检查取样够不够,不够时提示(结果可能偏差大)。
lb mtf <镜头.lens> [<freqs...>] [--max-freq <float>] [--sampling <str>] [--out <str>] [--plot] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
freqs | list | [] | 要列表的空间频率(cycles/mm),默认 10 20 30 50 和截止频率的一半 |
max_freq | float | 0.0 | 曲线最高频率;0 表示到衍射截止频率 |
sampling | str | 'auto' | FFT 取样:auto = 自动(各视场与波长的 FFT 窗口 ≥ 4 倍几何弥散斑直径的最小一档);32–1024 的整数 = 固定 |
out | str | '' | PNG 输出路径;留空写到 reports/<名字>_mtf.png |
plot | bool | True | 是否出图 |
示例:
lb mtf cooke.lens 20 40 60
lb mtf cooke.lens --sampling 256mtf-vs-field
证据 · 入口:CLI / GUI / MCP
MTF 随视场(Zemax FFT MTF vs. Field):几个空间频率上,子午 / 弧矢 MTF 随视场(0 到最大视场)的变化;口径同 lb mtf
(复色按波长权重)。出图:lb plot <镜头> mtf_vs_field(--view "f1=20/mm f2=40/mm")。
lb mtf-vs-field <镜头.lens> [<freqs...>] [--num <int>] [--sampling <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
freqs | list | [] | 空间频率(cycles/mm,最多 3 个);不写 = 截止频率的 1/16、1/8、1/4 取整 |
num | int | 21 | 视场采样点数(3–41) |
sampling | str | 'auto' | FFT 取样:auto = 自动(同 mtf,看这 num 个视场点);32–1024 的整数 = 固定 |
示例:
lb mtf-vs-field cooke.lens
lb mtf-vs-field cooke.lens 20 40 60opd-fan
证据 · 入口:CLI / GUI / MCP
OPD 扇:各视场 × 各波长的光程差(相对主光线参考球面,单位:波长)。
lb opd-fan <镜头.lens> [--num <int>] [--out <str>] [--plot] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num | int | 41 | 每条扇的采样点数 |
out | str | '' | PNG 输出路径;留空写到 reports/<名字>_opd.png |
plot | bool | True | 是否出图 |
paraxial
证据 · 入口:CLI / GUI / MCP
近轴量(Zemax System Data 口径):EFFL、BFL、F/#、入瞳/出瞳、总长、放大率。
lb paraxial <镜头.lens> [--config <int>]psf
证据 · 入口:CLI / GUI / MCP
FFT PSF(默认复色,按波长权重合成):像面上的点扩散函数,按衍射极限峰值归一(峰值即 Strehl),以主波长主光线像点为中心;给出 Strehl、峰值位置、
工作 F 数与艾里半径(Zemax FFT PSF)。数字页是过峰值的 x / y 剖面;出图(伪彩 + 剖面,叠衍射极限艾里剖面): lb plot <镜头> psf(--view "scale=log" 看旁瓣)。
lb psf <镜头.lens> [--field <int>] [--wave <int>] [--sampling <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
field | int | 1 | 视场序号(1 起) |
wave | int | 0 | 波长序号(0 = 全部波长按权重合成,即复色;k = 第 k 个波长) |
sampling | str | 'auto' | FFT 取样(越大像素越细、越慢):auto = 自动(同 mtf,看本视场与所选波长,最高 512);32–1024 的整数 = 固定 |
示例:
lb psf cooke.lens --field 3
lb psf cooke.lens --sampling 256ray
证据 · 入口:CLI / GUI / MCP
单光线追迹(Zemax Single Ray Trace):给出每个面上的交点与方向余弦。
lb ray <镜头.lens> [<hx>] [<hy>] [<px>] [<py>] [--wave <float>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
hx | float | 0.0 | 归一化视场 Hx(-1..1) |
hy | float | 1.0 | 归一化视场 Hy(-1..1) |
px | float | 0.0 | 归一化光瞳 Px(-1..1) |
py | float | 1.0 | 归一化光瞳 Py(-1..1) |
wave | float | 0.0 | 波长 µm;0 表示主波长 |
示例:
lb ray cooke.lens 0 1 0 1ray-fan
证据 · 入口:CLI / GUI / MCP
光扇图:各视场 × 各波长的横向像差(相对主波长主光线,µm),子午 ey(Py)、弧矢 ex(Px)。
lb ray-fan <镜头.lens> [--num <int>] [--out <str>] [--plot] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num | int | 41 | 每条扇的采样点数 |
out | str | '' | PNG 输出路径;留空写到 <镜头目录>/reports/<名字>_rayfan.png |
plot | bool | True | 是否出图 |
relative-illumination
证据 · 入口:CLI / GUI / MCP
相对照度(Zemax Relative Illumination):像面照度与轴上之比随视场的变化,= 出瞳在像方方向余弦空间里的面积之比;
渐晕、光瞳像差、像方 F 数随视场的变化、遮拦都计入(畸变不计入,与 Zemax 一样)。另给透过的光瞳占比与有效 F 数。 出图:lb plot <镜头> relative_illumination。
lb relative-illumination <镜头.lens> [--wave <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
wave | int | 0 | 波长序号(0 = 主波长) |
示例:
lb relative-illumination cooke.lensrms-field
证据 · 入口:CLI / GUI / MCP
RMS 随视场(Zemax RMS vs. Field):沿 +y 从轴上到最大视场,各波长与复色的 RMS 弥散斑半径(µm)或 RMS 波前(波长),
叠衍射极限参考(弥散斑:艾里半径;波前:Maréchal 0.072 λ)。高斯求积光瞳,与评价函数 RSCE / RSCH / RWCE / RWCH 同一做法 (取样同 Zemax:默认每环 2 × 环数条臂,与 Ring = 环数的 RSCE / RSCH / RWCE / RWCH 逐位相同)。出图:lb plot <镜头> rms_field(--view "data=wavefront")。
lb rms-field <镜头.lens> [--data <str>] [--ref <str>] [--num <int>] [--rings <int>] [--arms <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
data | str(spot / wavefront) | 'spot' | spot(RMS 弥散斑半径,默认)/ wavefront(RMS 波前) |
ref | str(centroid / chief) | 'centroid' | centroid(相对质心,默认)/ chief(相对主波长主光线) |
num | int | 21 | 视场采样点数(3–101) |
rings | int | 6 | 高斯求积环数(1–20) |
arms | int | 0 | 高斯求积臂数(0 = 自动:2 × 环数,同 Zemax) |
示例:
lb rms-field cooke.lens
lb rms-field cooke.lens --data wavefront --ref chiefsag
证据 · 入口:CLI / GUI / MCP
矢高表(Zemax Sag Table):某个面从顶点到半口径的矢高 z(r)、过顶点与边缘的最佳拟合球(BFS)半径、相对它的偏离
(非球面度,µm)与面形斜率(°)——给加工方的数。出图(上:矢高与 BFS;下:偏离):lb plot <镜头> sag --view "surface=3"。
lb sag <镜头.lens> [<surface>] [--num <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
surface | int | 0 | 面号;0 = 默认(第一个非球面 / 二次曲面,没有就第 1 面) |
num | int | 101 | 采样点数(5–1001) |
示例:
lb sag phone.lens 3seidel
证据 · 入口:CLI / GUI / MCP
三阶(Seidel)像差系数:逐面 S_I…S_V、C_I、C_II(mm)及总和,波像差系数 W040…(波长)。
按 Welford 公式自行计算,已用抛物面镜、同心镜、 实际光线球差、双波长近轴追迹核对。正透镜欠校正球差 S_I > 0(与 Welford / Zemax 同号)。 逐面柱状图:lb plot <镜头> seidel(--view "unit=waves" 改看波像差系数)。
lb seidel <镜头.lens> [--config <int>]show
证据 · 入口:CLI / GUI / MCP
处方表(相当于 Zemax 的 Lens Data Editor 视图)。
值后标记:V = 优化变量,S = solve,P = pickup;厚度、半径显示 solve 求解后的有效值, 半口径为自动计算值(带 U 表示 semi= 固定)。
lb show <镜头.lens> [--config <int>]spot
证据 · 入口:CLI / GUI / MCP
点列图 RMS / GEO 半径(µm),各视场 × 各波长,以及按波长权重合成的复色值。
lb spot <镜头.lens> [--rings <int>] [--ref <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
rings | int | 6 | 六角形采样环数(Zemax 默认 6) |
ref | str(chief / centroid) | 'chief' | 参考点:chief = 主波长主光线(Zemax 默认),centroid = 质心 |
spot-density
证据 · 入口:CLI / GUI / MCP
点密度图:大量光线(光瞳分层抖动采样,按面积均匀,每个波长都追)落在像面上的能量密度,每视场一张;
比点列图多看得出「哪里亮」。数字页给各视场 RMS 半径、99.5 % 能量半径、方框内能量;出图(伪彩): lb plot <镜头> spot_density(--view "scale=log" 看弱的弥散,"norm=all" 各视场共用刻度)。
lb spot-density <镜头.lens> [--rays <int>] [--ref <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
rays | int | 301 | 光瞳每边采样数(51–801;rays × rays 落在圆内的约 78 %) |
ref | str(chief / centroid) | 'chief' | 参考点(chief = 主波长主光线 / centroid = 复色质心) |
示例:
lb spot-density cooke.lens
lb spot-density cooke.lens --ref centroidspot-diagram
证据 · 入口:CLI / GUI / MCP
点列图图像(PNG,每视场一个子图,各波长分色,µm);在 MCP 里会把图片直接返回给 AI 看。
lb spot-diagram <镜头.lens> [--out <str>] [--rings <int>] [--ref <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
out | str | '' | PNG 输出路径;留空则写到 <镜头目录>/reports/<名字>_spot.png |
rings | int | 6 | 六角形采样环数 |
ref | str(chief / centroid) | 'chief' | 参考点:chief / centroid |
strehl
证据 · 入口:CLI / GUI / MCP
各视场的 Strehl 比(主波长,FFT PSF 峰值 / 衍射极限峰值)。
lb strehl <镜头.lens> [--num-rays <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
num_rays | str | 'auto' | FFT 取样:auto = 自动(同 psf,最高 512);32–1024 的整数 = 固定 |
through-focus
证据 · 入口:CLI / GUI / MCP
离焦点列图:像面前后若干位置的复色 RMS 弥散斑(µm);默认步长取衍射焦深 2λF#² 向上取整(Zemax Through Focus Spot)。
lb through-focus <镜头.lens> [--step <float>] [--steps <int>] [--rings <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
step | float | 0.0 | 离焦步长 mm(0 = 自动) |
steps | int | 5 | 离焦位置个数(奇数,中间为像面) |
rings | int | 4 | 六角形采样环数 |
through-focus-mtf
证据 · 入口:CLI / GUI / MCP
离焦 MTF(Zemax Through Focus MTF):一个空间频率上各视场子午 / 弧矢 MTF 随像面离焦的变化,给出各视场的最佳焦面
((T + S)/2 最大处)。口径同 lb mtf;像面沿自身法线移动、顺传播方向为正(只在拷贝上移动,不改设计)。 出图:lb plot <镜头> through_focus_mtf。
lb through-focus-mtf <镜头.lens> [<freq>] [--step <float>] [--steps <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
freq | float | 0.0 | 空间频率(cycles/mm);0 = 主波长截止频率的 1/8 取整 |
step | float | 0.0 | 离焦步长(mm);0 = 按 λF#² 取整 |
steps | int | 21 | 离焦位置个数(奇数,5–41,中间为像面) |
示例:
lb through-focus-mtf cooke.lens
lb through-focus-mtf cooke.lens 30 --step 0.05tolerance
证据 · 长任务 · 付费:蒙特卡洛(mode=montecarlo)与自定补偿器(comp 行):个人基础版起 · 入口:CLI / GUI / MCP
公差分析(Zemax Tolerancing)。设计本身不动;分析前 solve / pickup 固化成当前值(含坐标断点的系统不支持 solve),
对焦交给补偿器(comp;不写 = 后截距);判据见 tol criterion(RMS 弥散斑、RMS 波前或 MTF),名义值也先优化补偿器。
sensitivity(灵敏度):每项公差(tol 行展开成逐面 / 逐元件、x / y 各一项)取上限与下限,重新优化补偿器后算判据, 列出每项的判据与变化,按影响排序,给出均方根合成的估计(每项取上下限中变化大的那个);--out 出龙卷风图。 montecarlo(蒙特卡洛):每次试验所有公差同时随机取值(正态分布,上下限 = ±2σ,截断在上下限内),补偿后算判据, 统计均值、标准差、分位数(x% 的试验不超过该值);--out 出直方图 + 累计良率曲线。随机种子相同结果相同。 MTF 判据(tol criterion mtf freq=30/mm …):衍射 FFT MTF(复色,同 lb mtf),所选视场按视场权重平均,越大越好—— 灵敏度报 ΔMTF(负 = 变差),估计 = 名义值 − 均方根合成;蒙特卡洛的分位数读作「x% 的试验不低于该值」,写了 min= 再给 达标率(所选各视场都不低于阈值的试验比例),另列各视场的统计。补偿器先按 RMS 波前粗调、再按 MTF 细调。
lb tolerance <镜头.lens> [--mode <str>] [--trials <int>] [--seed <int>] [--cycles <int>] [--mtf-sampling <int>] [--out <str>] [--lang <str>] [--dpi <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
mode | str(sensitivity / montecarlo) | 'sensitivity' | sensitivity 灵敏度 / montecarlo 蒙特卡洛 |
trials | int | 100 | 蒙特卡洛的试验次数 |
seed | int | 0 | 蒙特卡洛的随机种子(可复现) |
cycles | int | 10 | 每次优化补偿器的最大迭代轮数 |
mtf_sampling | int(32 / 64 / 128 / 256 / 512 / 1024) | 64 | MTF 判据的 FFT 取样(固定,各次扰动同一取样;默认 64,越大越准、越慢);别的判据不用 |
out | str | '' | 出图(.png / .svg / .pdf);留空不出图 |
lang | str | '' | 出图语言 zh / en;留空跟随界面语言 |
dpi | int | 300 | PNG 分辨率 |
示例:
lb tolerance cooke.lens
lb tolerance cooke.lens --out tol.png
lb tolerance cooke.lens --mode montecarlo --trials 200 --seed 1 --out mc.png
lb tolerance cooke.lens --mode montecarlo --trials 100 --mtf-sampling 128wavefront
证据 · 入口:CLI / GUI / MCP
波前图:光瞳上 OPD(波长)的分布,相对主光线参考球面(与 OPD 扇、RWCE 同一口径),给出 RMS 与 P-V(Zemax Wavefront Map)。
数字页是粗网格上的 OPD;完整网格在数据里。出图(伪彩 + 干涉图):lb plot <镜头> wavefront。
lb wavefront <镜头.lens> [--field <int>] [--wave <int>] [--grid <int>] [--remove <str>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
field | int | 1 | 视场序号(1 起) |
wave | int | 0 | 波长序号(0 = 主波长) |
grid | int | 65 | 光瞳采样网格每边点数(16–256) |
remove | str | 'none' | 去掉的项:none(原样,主光线处为 0)/ piston(平移)/ tilt(平移 + 倾斜) |
示例:
lb wavefront cooke.lens --field 3
lb wavefront cooke.lens --field 3 --remove tiltzernike
证据 · 入口:CLI / GUI / MCP
Zernike 系数(Zemax Zernike Fringe / Standard Coefficients):光瞳上的 OPD(相对主光线参考球面,与波前图同一组采样)
按最小二乘拟合成 Zernike 多项式。fringe:Zemax Fringe 排序(Z4 离焦、Z9 球差),不归一;standard:Noll 序号与归一, 系数就是该项的 RMS(波长)。另给 P-V / RMS(对主光线 / 对质心)、拟合残差、Strehl 估计。 出图(系数柱状图,正负分色、标出最大的几项):lb plot <镜头> zernike。
lb zernike <镜头.lens> [--field <int>] [--wave <int>] [--kind <str>] [--terms <int>] [--grid <int>] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
field | int | 1 | 视场序号(1 起) |
wave | int | 0 | 波长序号(0 = 主波长) |
kind | str(fringe / standard) | 'fringe' | fringe(默认)/ standard |
terms | int | 37 | 项数(Fringe ≤ 37,Standard ≤ 66) |
grid | int | 65 | 光瞳采样网格每边点数(16–256) |
示例:
lb zernike cooke.lens --field 3
lb zernike cooke.lens --kind standard --terms 22优化
default-merit
会修改设计 · 入口:CLI / GUI / MCP
设置默认评价函数(Zemax 优化向导);写 off 删除。
lb default-merit <镜头.lens> [<statement>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
statement | str | 'spot centroid' | 如 "spot centroid rings=3 arms=6 glass_min=1 air_min=0.5"、"wave chief"、"off" |
glass-substitute
会修改设计 · 长任务 · 入口:CLI / GUI / MCP
把模型玻璃换成最接近的目录玻璃(Zemax 用模型玻璃优化之后的玻璃替换):按 (nd, vd) 距离找最近的牌号——nd 差 0.01
与 vd 差 1 等价,换上后去掉该面的 nd / vd 变量;reoptimize=true 时换完再对剩下的变量做一次局部优化(同 optimize)。 结果以补丁提出,先 dry_run 看 diff 与每个面的候选表;想要别的候选就用 set 改 glass。
lb glass-substitute <镜头.lens> [<surface>] [--catalogs <str>] [--top <int>] [--reoptimize] [--cycles <int>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
surface | int | 0 | 面号;0 = 全部模型玻璃 |
catalogs | str(design / all) | 'design' | design(本设计 catalogs 里的厂商,默认)/ all(全部厂商) |
top | int | 3 | 每个面列出的候选数(1–10) |
reoptimize | bool | False | 换完对剩下的变量再做一次局部优化 |
cycles | int | 50 | 再优化的迭代上限 |
示例:
lb glass-substitute doublet.lens --dry-run
lb glass-substitute doublet.lens 2 --catalogs all --reoptimizelet-delete
会修改设计 · 入口:CLI / GUI / MCP
删除一个 let。还有别的 let 或 op EXPR 行用到它时拒绝,并列出用到它的行(按依赖关系查,写在它前面后面的都算)。
lb let-delete <镜头.lens> <name> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | let 的名字 |
示例:
lb let-delete cooke.lens hlet-set
会修改设计 · 入口:CLI / GUI / MCP
设置评价函数里的中间量 let 名 = 表达式(已有就改、没有就加)。表达式是 MATLAB 风格:向量 [0 0.5 1]、区间 0:0.25:1、
逐元素运算、max / mean / rms…,可直接调用操作数(RSCE(ring=3, Hy=h));别的 let 与 op EXPR 可以引用它。let 按依赖求值, 能引用写在前后的 let(新加的写在最后一个 let 之后);造成循环引用(E-LET-CYCLE)时拒绝。
lb let-set <镜头.lens> <name> <expr> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 名字(字母或下划线开头) |
expr | str | 必填 | 表达式 |
示例:
lb let-set cooke.lens h "0:0.25:1"
lb let-set cooke.lens r "RSCE(ring=3, Hy=h)"merit
证据 · 入口:CLI / GUI / MCP
评价函数表(Zemax MFE 视图):每行的值、目标、权重、贡献百分比,以及评价函数总值。
评价函数值按 Zemax 的归一化:MF = √(Σ w·(v−t)² / Σ w);只有默认评价函数时约等于加权 RMS 弥散斑(mm)。
lb merit <镜头.lens> [--config <int>]mf-export
入口:CLI / GUI / MCP
把评价函数(default + op 行)导出为 .mf 文件,供其他镜头复用(类似 Zemax 的 .MF)。
lb mf-export <镜头.lens> <out>| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
out | str | 必填 | 输出 .mf 路径 |
mf-import
会修改设计 · 入口:CLI / GUI / MCP
从 .mf 文件导入评价函数,替换当前的 default/op 行。也认 Zemax 的文本评价函数(每行「操作数 Int1 Int2 Data1–4 目标
权重」,与 zmx 内嵌的同一种):支持的操作数换成 op 行,优化向导的默认评价函数换成 default,其余列在提示里。
lb mf-import <镜头.lens> <path> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
path | str | 必填 | .mf 文件路径(LensBench 的 op / default 行,或 Zemax 的文本评价函数) |
op-add
会修改设计 · 入口:CLI / GUI / MCP
追加一行评价函数(op 行)。
lb op-add <镜头.lens> <statement> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
statement | str | 必填 | 操作数语句,如 "EFFL target=50"、"TOTR <= 62"、"MNCT 1..6 >= 1"(开头的 op 可省) |
示例:
lb op-add cooke.lens "EFFL target=50 weight=10"op-delete
会修改设计 · 入口:CLI / GUI / MCP
删除评价函数第 row 行(序号见 merit 命令的 # 列)。
lb op-delete <镜头.lens> <row> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
row | int | 必填 | op 行序号(从 1 起) |
op-set
会修改设计 · 入口:CLI / GUI / MCP
改写评价函数第 row 行。
lb op-set <镜头.lens> <row> <statement> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
row | int | 必填 | op 行序号(从 1 起) |
statement | str | 必填 | 新的操作数语句 |
optimize
会修改设计 · 长任务 · 入口:CLI / GUI / MCP
优化:调整 var 变量使评价函数最小。结果以补丁形式提出——先 --dry-run 看 diff 与评价函数变化,再应用。
local = 阻尼最小二乘(Levenberg-Marquardt,即 Zemax 的 DLS);hammer = 限时的随机扰动 + 局部优化(类似 Zemax Hammer)。
MTF / Strehl 操作数(MTFT / MTFS / MTFA / STRH)的 FFT 取样:优化开始时按起始设计自动判定一次(同 lb mtf),整个优化 不变(每次都重判会让评价函数跳档),并封顶——优化可以粗略,最终结论由 lb mtf / lb verify 按自动取样复算。上限的优先级: 本命令的 mtf_sampling > 用户设置 optimize_mtf_sampling_cap(lb settings,CLI、MCP、桌面端共用)> 默认 256。 被封顶时结果里会提示;结果与证据记的是实际锁定的取样。
有限差分雅可比的各列(n 个变量就是 n 次求值)分给本进程和几个常驻工作进程同时算,结果与单进程逐位相同;默认一共 min(8, ⌈n / 2⌉, 物理核数, 可用内存一半能放下的) 个进程(每个进程约分 2 个点);变量少、一次求值很快或整个优化很短 (工作进程来不及就绪)时单进程;打包版暂时单进程。
lb optimize <镜头.lens> [--mode <str>] [--cycles <int>] [--seconds <float>] [--seed <int>] [--mtf-sampling <int>] [--processes <int>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
mode | str(local / hammer) | 'local' | local(局部)或 hammer(全局,限时) |
cycles | int | 50 | 局部优化的最大迭代轮数 |
seconds | float | 20.0 | hammer 的时间预算(秒) |
seed | int | 0 | hammer 的随机种子(可复现) |
mtf_sampling | int(0 / 128 / 256 / 512 / 1024) | 0 | MTF / Strehl 操作数的取样上限(128 / 256 / 512 / 1024);0 = 用用户设置(默认 256) |
processes | int | 0 | 雅可比一共用几个进程算(含本进程;0 = 自动,1 = 单进程);不影响结果 |
示例:
lb optimize cooke.lens --dry-run
lb optimize cooke.lens --mode hammer --seconds 60任务
job-apply
会修改设计 · 入口:MCP
把后台任务算出的补丁应用到当前设计(与直接运行该命令的效果相同:同样做错误比对、进撤销栈)。
任务启动后设计被改过就拒绝(补丁基于旧版本)。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
id | str | 必填 | 任务句柄,如 job-1a2b3c |
job-cancel
入口:MCP
取消后台任务。优化会尽快收尾并保留目前最好的结果(仍是补丁,可以 job_result 查看、job_apply 应用)。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
id | str | 必填 | 任务句柄,如 job-1a2b3c |
job-result
入口:MCP
取后台任务的完整结果:修改类命令给出 diff 预览与改前改后指标(尚未应用,用 job_apply 应用);
分析类命令给出结果与证据 id。任务还在运行时只报进度。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
id | str | 必填 | 任务句柄,如 job-1a2b3c |
job-status
入口:MCP
查后台任务的状态与进度;不给 id 列出本会话的全部任务。
wait > 0 时最多等这么多秒(上限 30 秒),任务提前结束就立即返回——比反复轮询省事。 since ≥ 0 时附上优化的收敛历史(当前最优值每降一次一点):求值次数不小于 since 的点,每点 [求值次数, 当前最优值, 秒]; 给上次拿到的最后一点的求值次数 + 1 就是增量地取。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
id | str | '' | 任务句柄,如 job-1a2b3c;留空列出全部任务 |
wait | float | 0.0 | 最多等待的秒数(0 = 立即返回;上限 30) |
since | int | -1 | 附上求值次数不小于它的收敛历史点(-1 = 不附;0 = 全部) |
示例:
job_status(id="job-1a2b3c", wait=20)
job_status(id="job-1a2b3c", since=0)历史
compare
入口:CLI / GUI / MCP
版本对比:任意两版设计并排比较一阶量(EFFL、BFL、F/#、总长、入瞳 / 出瞳…)、处方差异(只列变了的面与参数)
与像质(各视场复色 RMS、同一频率的子午 / 弧矢 MTF、最大畸变)。两版各自在临时会话里算,不改当前设计。 版本引用:留空 = 当前文本,saved = 磁盘上的版本,#n = 改动日志第 n 条改完时,#n:before = 第 n 条之前,或 .lens 文件路径。
lb compare <镜头.lens> [<a>] [<b>] [--freq <float>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
a | str | '' | 版本 A(默认当前) |
b | str | 'saved' | 版本 B(默认磁盘上的版本) |
freq | float | 0.0 | MTF 比较的频率(cycles/mm);0 = 版本 A 截止频率的 1/8 取整到 5 |
示例:
lb compare cooke.lens
lb compare cooke.lens "#3:before" ""
lb compare cooke.lens "" other.lens --freq 30diff
入口:GUI / MCP
当前文本与磁盘上已保存版本的差异。
evidence
入口:GUI / MCP
按证据 id 查回某次分析的输入与输出(AI 引用数值时给出的 id)。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
id | str | 必填 | 证据 id,如 ev-1a2b3c4d5e |
history
入口:CLI / GUI / MCP
改动日志(桌面端复核):经命令落到设计上的每一次改动——来源(mcp / gui / cli)、命令、说明、关键指标的变化,
按时间倒序。entry=n 看第 n 条的完整 diff 与改前改后指标。日志在镜头旁边的 .lensbench/ 里,CLI、MCP、桌面端都写; 镜头要先存过盘。回到某条改动之前 / 之后的那一版用 history_restore。
lb history <镜头.lens> [--limit <int>] [--entry <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
limit | int | 20 | 列出最近多少条(默认 20) |
entry | int | 0 | 看第几条的详情(序号见列表;0 = 只列表) |
示例:
lb history cooke.lens
lb history cooke.lens --entry 3history-restore
会修改设计 · 入口:CLI / GUI / MCP
回到改动日志里第 entry 条改动之前(或之后)的那一版:整段文本换成当时的快照,同样先给 diff、可 dry_run、能撤销,
并作为一条新的改动记进日志(不改写历史)。
lb history-restore <镜头.lens> <entry> [--which <str>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
entry | int | 必填 | 改动序号(lb history 的 # 列) |
which | str(before / after) | 'before' | before = 回到这次改动之前 / after = 回到这次改动刚做完时 |
示例:
lb history-restore cooke.lens 3 --dry-runredo
入口:GUI / MCP
重做被撤销的修改。
signoff
付费:个人基础版起 · 入口:CLI / GUI
签核:把磁盘上的这一版标记为「已复核」,记下复核人、时间、备注、模型哈希与验收结论(有 spec 时)。
签核是人的动作,不开放给 MCP(AI 不能替人签核)。之后设计再改,signoff-status 与素材包清单都会标出签核已失效。
lb signoff <镜头.lens> [<note>] [--reviewer <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
note | str | '' | 备注(如「对照 Zemax 已核,送样」) |
reviewer | str | '' | 复核人;留空用当前系统用户名 |
示例:
lb signoff cooke.lens "对照 Zemax 已核"signoff-status
入口:CLI / GUI / MCP
签核状态:当前设计是不是签核过的那一版;签核后改过的,分「只改了名称 / 注释 / 格式」与「光学改了(签核失效)」。
lb signoff-status <镜头.lens>示例:
lb signoff-status cooke.lensundo
入口:GUI / MCP
撤销上一次修改。
帮助
bench
长任务 · 入口:CLI / MCP
跑分:在双高斯与广角两个固定镜头上跑一套大批量计算,测这台机器跑 LensBench 有多快,折算成分数并估计在线榜名次。
负载:每个镜头上实际光线追迹按 1k → 10k → 100k → 1M 条递进(rays/s)、系统求值(优化器每求值一次 = 一个系统, systems/s)、FFT MTF、离焦 MTF、阻尼最小二乘优化。单线程、多线程各在一个新的子进程里跑一遍,共一分钟上下到几分钟,跑的 时候别开别的重计算,分数才准。每项都带校验量,与期望值对不上的结果不计分。参照机三个分都是 1000,规则见 docs/benchmark.md。 跑完只估计名次、不上传;结果存在本机,用 bench-submit(命令行)或桌面端的「提交到榜单」才录入在线榜。
lb bench [--name <str>] [--out <str>] [--offline]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | '' | 榜单上的署名(可留空,留空时榜单显示 CPU 型号;提交时还能改) |
out | str | '' | 同时把结果写成 JSON 文件,如 my-bench.json |
offline | bool | False | 不连在线榜,只和随包的榜单快照比 |
示例:
lb bench
lb bench --name 张三bench-board
入口:CLI / MCP
跑分榜:在线榜(连不上时用随包的快照),每条按本版的参照值重新记分、重新校验后排名,同一台机器只留最好的一次。
不信结果里写的分数:每条都按本版参照值重算,校验量对不上或跑分版本不同的不进榜(列在后面并说明原因)。
lb bench-board [<records>] [--sort <str>] [--snapshot] [--report <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
records | str | '' | 另外要一起排的结果文件或目录(lb bench --out 写出的 JSON) |
sort | str(total / single / parallel) | 'total' | 按哪个分排:total 综合分(默认线程数下全部十项)/ single 单线程分 / parallel 多核分(大批光线追迹) |
snapshot | bool | False | 只看随包的榜单快照(bench/results/),不连在线榜 |
report | str | '' | 同时把榜单写成 Markdown 页(文档站的 docs/benchmark.md 用 --snapshot 生成) |
示例:
lb bench-board
lb bench-board --sort single
lb bench-board --snapshot --report docs/benchmark.mdbench-submit
入口:CLI
把跑分结果提交到在线跑分榜(不提交就不录入)。默认提交本机最近一次 lb bench 的结果。
发出去的只有:CPU 型号、逻辑处理器数、内存、操作系统与软件版本、各项计时与校验量、机器码(系统安装标识的单向哈希) 和署名;没有主机名、用户名、路径。在线榜按同一份规则重新校验、重新记分,同一台机器只留最好的一次。 只在命令行与桌面端(帮助 › 跑分 › 提交到榜单)提供,AI 不能替你提交。
lb bench-submit [--record <str>] [--name <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
record | str | '' | 要提交的结果文件(lb bench --out 写出的);留空提交本机最近一次跑分 |
name | str | '' | 榜单上的署名(留空沿用跑分时填的) |
示例:
lb bench-submit
lb bench-submit --name 张三commands
入口:CLI / GUI / MCP
列出所有命令(按类别)。
lb commands [--category <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
category | str | '' | 只看某一类:文件 / 编辑 / 分析 / 出图 / 验收 / 优化 / 任务 / 历史 / 帮助 |
docs
入口:CLI
从命令注册表与 DSL 规格重新生成参考文档(docs/reference/)。
lb docs [--root <str>] [--check]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
root | str | '' | 仓库根目录;留空自动定位 |
check | bool | False | 只检查文档是否过期,不写文件(CI / 测试用) |
golden
入口:CLI / MCP
运行金标准验证套件(golden/ 下的 YAML 案例:解析解、商业软件算出的值、文献值),逐项给出偏差。
lb golden [<root>] [--report <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
root | str | '' | 案例目录;留空为仓库的 golden/ |
report | str | '' | 同时把 Markdown 报告写到这个路径(如 docs/validation.md);案例目录里有 crosscheck.json(与独立实现 对账的统计)时,报告开头的摘要一并列出 |
示例:
lb golden
lb golden --report docs/validation.mdhelp
入口:CLI / GUI / MCP
DSL 与命令的速查。不带参数列出全部主题;topic 可以是 .lens 语句名(surf / field …)、
solve、glass、命令名。
lb help [<topic>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
topic | str | '' | 主题 |
license
入口:CLI / GUI / MCP
登录与登录凭证的状态:登录了没有、档位(试用中到几号)、凭证几时到期、这个版本停用了没有、几时到期、计算前检不检查。
不显示令牌、凭证、账号 id 与设备码。登录凭证 7 天有效,在后台自动续上(7 天里随机联网验证几次);--refresh 马上向服务器验证一次。 每个发布版本另有到期日(构建后 90 天),到期后要下载新版。
lb license [--refresh]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
refresh | bool | False | 马上联网验证一次、换一张新凭证(要已登录) |
示例:
lb license
lb license --refreshlogin
入口:CLI
登录 optic.chat 账号:在浏览器里打开登录页,登录或注册后自动回到这里(本机临时开一个端口接回调;密码不经过本程序)。
登录后自动领取 7 天的登录凭证、之后在后台定期续上;与桌面端 AI 页是同一个账号、同一份设置。
只开放给 CLI:登录要人在浏览器里操作,不由 AI 经 MCP 做。
lb login [--no-browser]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
no_browser | bool | False | 不自动打开浏览器,只打印登录链接(复制到浏览器里打开) |
示例:
lb login
lb login --no-browserlogout
入口:CLI
退出 optic.chat 账号:作废这台电脑上的登录令牌、删掉登录凭证(桌面端的 AI 页同时退出)。
lb logout示例:
lb logoutmcp-config
入口:CLI
生成 MCP 客户端的配置(启动命令带 --root,把工具的文件读写限定在项目目录里)。默认只打印;--write 合并写入配置文件
(先备份原文件,不动其他服务器的配置)。不给 --client 时列出全部客户端的片段。
lb mcp-config [--client <str>] [--scope <str>] [--root <str>] [--name <str>] [--write] [--toolset <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
client | str( / claude-code / claude-desktop / cursor / cherry-studio / trae) | '' | 客户端:claude-code / claude-desktop / cursor / cherry-studio / trae;留空列出全部 |
scope | str(project / user) | 'project' | project(写进项目目录,claude-code / cursor / trae)或 user(用户级;claude-desktop 只有用户级) |
root | str | '' | 项目根目录(MCP 服务器只读写这个目录里的文件);留空 = 当前目录 |
name | str | 'lensbench' | 配置里的服务器名 |
write | bool | False | 合并写入配置文件(只对官方文档写明可手改的文件);不加只打印 |
toolset | str( / full / core) | '' | 工具集:full 全部工具 / core 精简集(客户端限制工具总数时用);留空 = Trae 用 core、其余用 full |
示例:
lb mcp-config --client claude-code
lb mcp-config --client claude-desktop --write
lb mcp-config --client cursor --scope user --root D:/lens-projects --write
lb mcp-config --client cherry-studio
lb mcp-config --client trae --toolset fullsettings
入口:CLI
用户级设置(CLI、MCP、桌面端共用,存在用户配置目录的 LensBench/settings.json):不带参数列出全部;给 key 看一项;
给 key 与 value 写入(value = default 恢复默认)。只放会影响计算、三个入口都要读到的设置;桌面端界面自己的偏好 (主题、字号……)在偏好设置里。这类设置改变结果,结果与证据里记的是实际生效的值。
只开放给 CLI:写的是项目以外的用户文件,不由 AI 经 MCP 改。
lb settings [<key>] [<value>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
key | str | '' | 设置名,如 optimize_mtf_sampling_cap(不写 = 列出全部) |
value | str | '' | 新值;default = 恢复默认(不写 = 只看) |
示例:
lb settings
lb settings optimize_mtf_sampling_cap 512
lb settings optimize_mtf_sampling_cap default
lb settings network falseupdate
入口:CLI / GUI
检查新版本:取 optic.chat 上签过名的版本文件,有新版本时显示版本号与更新说明;--download 再下载安装包并校验。
先验签(Ed25519,公钥内置在程序里)、再读版本号:签名不对或缺签名就不认这份版本文件。安装包下载后核对大小与 SHA-256, 不符就删掉、不安装。只发 GET 请求,带软件版本号,不带设计、使用数据和机器信息。 安装由桌面端做(? › 检查更新…:有没保存的设计时列出来问你「放弃修改并安装 / 取消」,再运行安装包并退出,装完重新打开); 命令行只下载并告诉你安装包在哪。从源码运行时只报告、不下载。只在命令行与桌面端提供,AI 不能替你装软件。
lb update [--download] [--channel <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
download | bool | False | 有新版本时下载安装包并校验(只在装好的程序里下载) |
channel | str(stable / beta) | 'stable' | 更新通道:stable 正式版 / beta 测试版(测试版也收正式版的更新) |
示例:
lb update
lb update --download
lb update --channel beta出图
check-report
付费:个人基础版起 · 入口:CLI / GUI / MCP
报告草稿数字核对:外部 AI 写完的报告草稿(Markdown / 文本)交回来,按句中引用的证据 id,到素材包里该证据的
数字页、表和确定性结论中逐个核对数字。对不上、引了素材包里没有的证据,都列出来;没引证据的数字只提示。 规则是确定性的:按草稿写出的位数四舍五入后相等即算对上,接受 ×100(比例 → %)与 mm ↔ µm 换算; 只核对至少 2 位有效数字的数。
lb check-report <镜头.lens> <draft> [--dir <str>] [--strict]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
draft | str | 必填 | 报告草稿文件(.md / .txt) |
dir | str | '' | 素材包目录;留空用 <镜头目录>/reports/<名字>_pack/ |
strict | bool | False | 有对不上的数字时命令以失败返回(CLI 退出码 1),用作交付前的关卡 |
示例:
lb check-report cooke.lens report_draft.md
lb check-report cooke.lens report_draft.md --dir reports/cooke_pack --strictgallery
入口:CLI / GUI / MCP
出图画廊:把一组设计的全部图型渲染成一页本地 HTML(reports/gallery/index.html),供人眼审图。
lb gallery [<lenses...>] [--out <str>] [--kinds <str>] [--lang <str>] [--dpi <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
lenses | list | [] | .lens 文件;留空用 7 个参照设计(Cooke、双高斯、Petzval、广角、远摄、折转镜、抛物面) |
out | str | '' | 输出目录;留空写到 <仓库>/reports/gallery/ |
kinds | str | '' | 只渲染这些图型(逗号分隔);留空 = 画廊全部 27 种图(波像差扇除外) |
lang | str(zh / en) | 'zh' | 出图语言 |
dpi | int | 110 | PNG 分辨率(画廊用 110 足够;出版请用 lb plot 的 300) |
示例:
lb gallery
lb gallery my.lens other.lens --kinds spot,mtf --out reports/minepack
付费:个人基础版起 · 入口:CLI / GUI / MCP
导出报告素材包:图(PNG + SVG,带图框与证据 id)+ 数字页(CSV / JSON)+ 处方 / 一阶量 / 验收 / 可制造性表 +
确定性结论 + 清单 manifest.json(每条的含义、单位、文件、证据 id)与 README.md(含写报告的硬约束)。 内核只出素材,报告由外部 AI 组装和撰写。条目取 .lens 里的 pack 语句(没写用默认集合),--items 可临时覆盖。 设计改了用 lb pack-status 查哪些素材过期。
lb pack <镜头.lens> [<out>] [--items <str>] [--dpi <int>] [--lang <str>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
out | str | '' | 输出目录;留空写到 <镜头目录>/reports/<名字>_pack/ |
items | str | '' | 临时指定条目(空格或逗号分隔),如 "layout spot mtf conclusions" |
dpi | int | 300 | PNG 分辨率(默认 300) |
lang | str | '' | 出图语言 zh / en;留空跟随界面语言 |
示例:
lb pack cooke.lens
lb pack cooke.lens reports/cooke_pack --items "prescription layout mtf verify conclusions"pack-status
入口:CLI / GUI / MCP
查素材包是否过期:按清单里每条素材的证据键,在当前设计上重算证据 id,对不上的就是过期(设计、规格或引擎变了)。
只读、不重算任何分析(证据 id 是确定性的)。过期了就重新 lb pack。
lb pack-status <镜头.lens> [<dir>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
dir | str | '' | 素材包目录;留空用 <镜头目录>/reports/<名字>_pack/ |
示例:
lb pack-status cooke.lensplot
证据 · 入口:CLI / GUI / MCP
出版级出图:带图框(标题 + 信息块:镜头、视场、波长、证据 id、模型哈希、时间)的 PNG / SVG / PDF,
并给出同一份数据的表格(数字页)。格式由 out 的扩展名决定;MCP 会把 PNG 直接返回给 AI 看。
选项取自 .lens 里的 view 语句,--view 可临时覆盖;spec 语句里与本图相关的规格画在图上 (过 / 不过按 lb verify 的结论着色)。
lb plot <镜头.lens> <kind> [--out <str>] [--dpi <int>] [--lang <str>] [--svg-text <str>] [--view <str>] [--full-table] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
kind | str(layout / spot / fan / opd_fan / mtf / fieldcurv / longitudinal / lateral_color / focal_shift / through_focus / seidel / footprint / wavefront / huygens_mtf / zernike / rms_field / field_map / sag / glass_map / psf / huygens_psf / spot_density / encircled_energy / relative_illumination / mtf_vs_field / through_focus_mtf / grid_distortion / image_sim) | 必填 | 图型:layout 布局 / spot 点列图 / fan 光扇 / opd_fan 波像差扇 / mtf / fieldcurv 场曲畸变 / longitudinal 纵向像差 / lateral_color 垂轴色差 / focal_shift 色焦移 / through_focus 离焦点列图 / huygens_mtf 惠更斯 MTF / zernike Zernike 系数 / rms_field RMS 随视场 / field_map 全视场像质图 / sag 矢高表 / glass_map 玻璃图 / seidel 逐面 Seidel 柱状图 / footprint 足迹图 / wavefront 波前图 / psf / huygens_psf 惠更斯 PSF / spot_density 点密度图 / encircled_energy 包围能量 / relative_illumination 相对照度 / mtf_vs_field MTF 随视场 / through_focus_mtf 离焦 MTF / grid_distortion 网格畸变 / image_sim 图像仿真 |
out | str | '' | 输出路径(.png / .svg / .pdf);留空写到 <镜头目录>/reports/<名字>_<图型>.png |
dpi | int | 300 | PNG 分辨率(默认 300) |
lang | str( / zh / en) | '' | 出图语言 zh / en;留空跟随界面语言 |
svg_text | str(path / text) | 'path' | SVG 文字:path 转成路径(各处显示一致,默认)/ text 保留文字(Word 里能改字,需要字体) |
view | str | '' | 临时覆盖的视图选项,写法同 view 语句,如 "rings=8 ref=centroid"、"numbers=on fold=on"、"box=100um" |
full_table | bool | False | 文本输出里附完整数字页(默认只附摘要行) |
示例:
lb plot cooke.lens spot --out spot.pdf
lb plot cooke.lens layout --view "numbers=on" --out layout.svg
lb plot cooke.lens mtf --lang en --dpi 600
lb plot cooke.lens footprint --view "surface=4"
lb plot cooke.lens seidel --view "unit=waves"view-set
会修改设计 · 入口:CLI / GUI / MCP
设置某种图的视图选项(写成 .lens 里的 view 语句;同一图型已有的选项合并,新值覆盖旧值)。
取样选项改变数据与证据 id,显示选项只改画法。有量纲的数值必须写单位。
lb view-set <镜头.lens> <kind> <options...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
kind | str | 必填 | 图型(全部图型与选项见 lb help view):如 layout spot fan mtf fieldcurv psf spot_density |
options | list | 必填 | 选项 key=value,如 rings=8 ref=centroid box=100um |
示例:
lb view-set cooke.lens spot rings=8 box=100um
lb view-set cooke.lens layout numbers=on fold=on验收
spec-add
会修改设计 · 入口:CLI / GUI / MCP
追加一条验收规格(spec 语句)。有量纲的数值必须写单位;只写绝对目标值。
lb spec-add <镜头.lens> <spec...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
spec | list | 必填 | 规格写法(可省略开头的 spec),如 efl target=50mm tol=1% |
示例:
lb spec-add cooke.lens efl target=50mm tol=1%
lb spec-add cooke.lens mtf freq=50/mm field=0.7 dir=T min=0.3
lb spec-add cooke.lens distortion max=2%spec-delete
会修改设计 · 入口:CLI / GUI / MCP
删除第 row 条规格(按 spec 语句在文件里的顺序,从 1 起;lb verify 的 # 列)。
lb spec-delete <镜头.lens> <row> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
row | int | 必填 | 规格序号(从 1 起) |
verify
证据 · 入口:CLI / GUI / MCP
按 spec 逐条验收:用固定的规范取样独立复算(不读 view,不用优化器自报的数),给出每条的值、界限、过 / 不过与来源
(哪种分析、什么取样、用哪个命令能单独复算——规范取样都等于该命令的默认取样);末尾附可制造性警告 (装夹违例、透镜边厚小于 0.5 mm;只提醒,不影响 --strict)。
证据 id = 模型哈希 + 规格哈希(有 MTF 规格时再加 MTF 的规范取样):改 spec 只让判定过期,不触发任何分析重算。
多重结构:spec 的 config=k 只在组态 k 上验,config=all 每个组态都验,不写在当前组态上验(--config 换当前组态); 每个(spec, 组态)判一次,每个组态一份证据(证据键再加组态号),列出每个组态的判定与证据 id。
lb verify <镜头.lens> [--strict] [--config <int>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
strict | bool | False | 有未过或无法判定的规格时命令以失败返回(CLI 退出码 1),用作 CI 关卡 |
编排
action-add
会修改设计 · 入口:CLI / GUI / MCP
给动作加一步(一行 action 语句,插在同名动作的最后一步之后;没有这个动作就新建)。
lb action-add <镜头.lens> <name> <step...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 动作名(不带空格) |
step | list | 必填 | 步骤与参数:set <面号> key=value … / system "<语句>" / refocus / optimize [cycles=N] |
示例:
lb action-add cooke.lens 换玻璃 set 3 glass=CDGM:H-ZF52A
lb action-add cooke.lens 换玻璃 refocusaction-delete
会修改设计 · 入口:CLI / GUI / MCP
删掉动作的第 row 步(按书写顺序,从 1 起);row = 0 删掉整个动作。
lb action-delete <镜头.lens> <name> [<row>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 动作名 |
row | int | 0 | 第几步;0 = 整个动作 |
action-move
会修改设计 · 入口:CLI / GUI / MCP
调动作里步骤的顺序:第 row 步挪到第 to 步(从 1 起)。步骤按这个顺序执行。
lb action-move <镜头.lens> <name> <row> <to> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 动作名 |
row | int | 必填 | 要挪的那一步 |
to | int | 必填 | 挪到第几步 |
action-run
会修改设计 · 长任务 · 付费:个人高级版起 · 入口:CLI / GUI / MCP
执行一个动作(.lens 里 action 行写的若干步),把结果以补丁提出:先 --dry-run 看 diff 与改前改后的指标,再应用。
各步就是已有的修改命令(set / system / optimize)与 refocus,按书写顺序执行;有一步没做成就整个不改。
lb action-run <镜头.lens> <name> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 动作名 |
示例:
lb action-run cooke.lens 换玻璃 --dry-run
lb action-run cooke.lens 换玻璃materials
入口:CLI / GUI / MCP
材料数据:设计里每种玻璃的 nd、vd、密度、线膨胀系数、dn/dT、ΔPgF、供货状态与化学稳定性(厂商目录:随包材料库或 AGF)。
结果登记证据 id。
lb materials <镜头.lens>示例:
lb materials cooke.lensreport-add
会修改设计 · 入口:CLI / GUI / MCP
给报告加一个评估项(一行 report 语句,插在同名报告的最后一行之后;没有这份报告就新建)。
lb report-add <镜头.lens> <name> <item...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 报告名(不带空格) |
item | list | 必填 | 评估项与选项,如 thermal temp=-20C..60C housing=titanium;评估项:optics thermal weight material verify manufacturing |
示例:
lb report-add cooke.lens 换玻璃 optics freq=50/mm
lb report-add cooke.lens 换玻璃 thermal temp=-40C..70C steps=12report-delete
会修改设计 · 入口:CLI / GUI / MCP
删掉报告的第 row 项(按书写顺序,从 1 起);row = 0 删掉整份报告。
lb report-delete <镜头.lens> <name> [<row>] [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 报告名 |
row | int | 0 | 第几项;0 = 整份报告 |
report-move
会修改设计 · 入口:CLI / GUI / MCP
调报告里评估项的顺序:第 row 项挪到第 to 项(从 1 起)。汇总按这个顺序出。
lb report-move <镜头.lens> <name> <row> <to> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 报告名 |
row | int | 必填 | 要挪的那一项 |
to | int | 必填 | 挪到第几项 |
示例:
lb report-move cooke.lens 换玻璃 3 1report-run
长任务 · 付费:个人高级版起 · 入口:CLI / GUI / MCP
按报告设计出评估汇总:当前设计(基线)和每个动作的结果(在副本上执行,不改当前设计)逐项评估——光学、热效应、重量、
材料、验收、可制造性(.lens 里的 report 行定评估哪些、按什么顺序、取什么选项;没写用默认报告),并排列出改前 / 改后的值、 变化与好坏(✓ 变好、✗ 变差),开头是每个动作的关键变化。每项结果都登记证据 id。 典型用法:「第 3 片换一种玻璃」写成一个动作,看它对热离焦、像质、重量、化学稳定性的影响;几个候选写成几个动作一起比。
lb report-run <镜头.lens> [<report>] [--actions <str>] [--out <str>] [--save]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
report | str | '' | 报告名(.lens 里 report 行的名字);留空 = 第一份报告,没写报告时用默认报告 |
actions | str | '' | 要比较的动作名(空格或逗号分隔);留空 = 设计里的全部动作;写 none 只评估当前设计 |
out | str | '' | 输出目录:写 summary.md(同命令输出)、summary.json(全部数据)、variants/<动作>.lens(每个动作的结果,可复现) |
save | bool | False | 没给 out 时也写到默认目录 <镜头目录>/reports/<镜头名>_<报告名>/(桌面端的编排窗口每次都写,「产物」里看得到) |
示例:
lb report-run cooke.lens
lb report-run cooke.lens 换玻璃 --actions "cdgm schott_lite"
lb report-run cooke.lens --out reports/glass_study
lb report-run cooke.lens --savereport-set
会修改设计 · 入口:CLI / GUI / MCP
改报告第 row 项(从 1 起)的选项:只动这一行里对应的 key=value;写成 key=(不给值)或 key=default 删掉这个选项、回到默认值。
可用的选项见 lb help report(各评估项不同,如热效应的 temp、steps、housing)。
lb report-set <镜头.lens> <name> <row> <option...> [--dry-run]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | str | 必填 | 报告名 |
row | int | 必填 | 第几项(从 1 起,按书写顺序) |
option | list | 必填 | 选项,key=value 写几个都行;key= 或 key=default 恢复默认 |
示例:
lb report-set cooke.lens 换玻璃 2 temp=-40C..70C housing=titanium
lb report-set cooke.lens 换玻璃 1 freq=thermal
入口:CLI / GUI / MCP
热分析:温度范围内各点上,镜片按自己玻璃的线膨胀系数、空气间隔按镜筒材料伸缩,折射率按厂商目录的热色散系数(Schott
公式)与空气折射率换算,算焦距漂移、热离焦(近轴焦点相对像面,与焦深 ±2λF#² 比较)、像面不动时的 RMS 与 MTF。 与报告里的 thermal 评估项是同一个计算;结果登记证据 id。
lb thermal <镜头.lens> [--temp <str>] [--steps <int>] [--ref <float>] [--housing <str>] [--pres <float>] [--freq <float>]| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
temp | str | '-20C..60C' | 温度范围(°C),如 -20C..60C |
steps | int | 5 | 温度点数(含两端,2–21) |
ref | float | 20.0 | 名义温度(°C,设计所在的温度) |
housing | str | 'aluminum' | 镜筒材料:aluminum / steel / brass / titanium / invar / none(间隔不变) |
pres | float | 1.0 | 气压(相对 1 atm;0 = 真空) |
freq | float | 0.0 | MTF 的空间频率(1/mm);0 = 截止频率的 1/8 取整到 5 |
示例:
lb thermal cooke.lens
lb thermal cooke.lens --temp=-40C..70C --steps 12 --housing titaniumweight
入口:CLI / GUI / MCP
镜片质量:各片玻璃的体积、密度(厂商目录)与质量,总质量。外径取两面半口径中较大的,小的一面按平面延伸
(同 Zemax VOLU / TMAS);只算玻璃。结果登记证据 id。
lb weight <镜头.lens>示例:
lb weight cooke.lens