从制造角度读几何
同一个圆柱面,是折弯、是孔壁、还是去毛刺圆角,取决于它怎么被做出来。折弯认的是「内外两张圆柱面半径差恰好等于料厚」这一对同轴关系——不在配对里的圆柱面,一次性排除掉孔壁与装饰圆角。
关键数走两条独立路径
展开毛坯用体积恒等式兜底:塑性变形材料不增不减,所以毛坯净面积恒等于 V/t。这条式子没有可调参数,对不上就说明漏摊了面板或重复计入——它抓出过 7 处算法缺陷。
不确定的不装懂
K 因子从几何推不出来,所以毛坯给的是区间不是一个数;翻边孔的预冲孔并列给出两条独立算法的结果,标成待裁定项。该由人定的,标出来交给人。
非钣金件也不空手而归
铣削件 / 回转体 / 铸件照样给出类型判断与依据、孔与凸台清单。钣金专用口径此时明确标注「不适用」——而不是填个 0 让人误以为「这是块没折弯的钣金」。
整包 ZIP 传上来,来源不丢
一包图纸拖进来自动解包,目录并进文件名(订单A/支架/左板.step → 订单A__支架__左板.step),并记下它来自哪个包、包内原路径——之后按压缩包一键筛出「这单有哪些件」。路径穿越、解压炸弹、中文名乱码都已处理。
一份数据,多种取用
60+ 字段、10 个分组,一份定义同时供网页表格、Excel/CSV 导出与 JSON API。看到的列就是导出的列,不存在两边对不上。
结果落盘,重启不丢
解析结果与缩略图写到磁盘,重启即用。缓存的钥匙里带着计算代码指纹:改算法必然作废,改样式、改译名不掉——用旧版本算出来的数,比重算慢糟得多。
除几何内核外零依赖
只依赖 OCCT(读 STEP、算几何),其余全部标准库——连 xlsx / CSV 的写出器、ZIP 解包、账号体系都是现写的。装得上、跑得动、好审计。
落地页开更新日志与博客;分支策略与 CI 上闸门(2026-08-17)
用户:"landing 页里面也增加一个 blog 和 changelog 的环节……都是静态的信息, 每次更新发布之前都应该把它们刷新一下"、"未来上线应该有一个 PR 的过程"、 "只有合到 main 上才能正常安装使用,其他的合到 dev 分支在测试环境做"。
/changelog 与 /blog(公开静态页,与 /welcome 同级,不碰用户数据): 更新日志直接读仓库 CHANGELOG.md 渲染——发布带着仓库走,页面天然是 最新的,不存在"忘了刷新"的第二份;博客读 docs/blog/*.md。落地页新增 「最近更新」「博客」两节各列最新三条。服务端 md 渲染器与助手气泡同一条 安全纪律(先整体转义、后替换),slug 走白名单。首发两篇:墨迹一本帐、 助手看得见零件也听得见意见。- 分支策略落成闸门:
deploy/restart.sh 开头查分支,非 main 拒绝部署 (紧急逃生 MM_ALLOW_BRANCH=1);新增 deploy/restart-dev.sh 起测试环境 (/srv/metalmaster-dev :8766,与生产数据根/端口隔开);CI push 触发加 dev;docs/RELEASE.md 写清 PR 流程与发布前清单(含"刷新静态信息")。 规矩不靠自觉——tests/test_release_process.py 5 条钉死,变异 4 刀全红。 - 修一处让 CI 3.10 矩阵必炸的语法:装配页标题用了嵌套 f-string 带转义 引号(PEP 701,3.12+),本机 3.12 完全看不出来。顺手加全仓体检门禁: 按
pyproject 声明的 Python 下限扫,声明支持 3.10 就不许偷用 3.12 语法。
助手顺手收集产品反馈(2026-08-17)
用户:"助手只需要筛选一下是不是跟产品优化有关的问题,如果有的话就直接 存下来。未来你可以通过这些反馈来持续优化。"
- 工具箱第五件
save_feedback:模型在对话里听到产品问题或改进建议 (数据算错、功能不好用、希望增加什么)就提炼成一两句存进反馈本,并告诉 用户已记录——不用等用户点「反馈」按钮。筛选标准写在系统提示里:普通 提问、闲聊、对回答的追问不记。 - 与手动反馈同一本帐(feedback.jsonl)、同一个后台,带页面定位与算法 指纹;来源标
via: copilot,后台显示「·助手代录」——处理时知道这是 模型提炼过的转述,不是用户原文。这是工具箱里唯一的"写",写的只是 反馈登记,不碰分析数据、不触发计算。 - 真机验证:一句"利用率要是能按整张钢板套料算就好了"被提炼落盘 (模型自己补全了"排版嵌套"的术语);紧接着的"板厚是多少"没被误存。 变异 2 刀(不标来源 / 装存没存)全红。
助手看得见缩略图了(2026-08-17)
用户:"应该把 3D 的缩略图也作为助手的上下文,可以用来判断这是个什么东西。" 模型看一眼外形,比读一堆特征数字更快认出"这是个支架/法兰/机箱":
copilot.page_image:当前零件/整机的缩略图 → PNG,随最后一条用户消息喂给 多模态模型。与 page_context 同一条纪律——只读已缓存的那张画 (store.cached_thumb,旧版本算的也认:图画的是几何,文件没变图就对), 绝不为一句聊天触发投影。零件线稿栅格化 200 px(复用 Excel 导出那套 thumb_png,实测 ~1.6 KB / 约 50 token),整机位图原样;目录页没有 "当前这一件",不带图。- 两家方言各自的多模态块(OpenAI 的 image_url data-URI / Anthropic 的 base64 source block),注入只动最后一条用户消息;不带图时纯文本原样—— 老行为不变、不多花一个 token。系统提示仅在带图时附看图指引 (图与数据矛盾时以数据为准)。
- 留痕补
img 字段:回放时知道模型当时看没看到图。 - 真机验证(OpenRouter / sonnet):鱼尾板线稿,模型答出"厚板、右侧两孔、 左侧窄长舌片、连接支架类"。变异 4 刀(两方言注入、零件号透传、handler 递图)全红。
2026-08-17墨迹一本帐:工程图排布的整体避让
出工程图最难的不是画几何,是把标注放对地方:尺寸数字、零件气球、剖切字母、基准符号,每一样都要找一块没被占用的空地。此前我们的避让是零散的——气球看气球的登记,外移数字看数字的登记,视图名看自己的包围盒。各记各的帐,帐本之间就是盲区:右上角
2026-08-17让页面助手看得见零件,也听得见意见
MetalMaster 的每个分析页面右下角有一个对话助手。它了解当前页面已算好的一切:板厚、折弯明细、孔表、工艺类型结论。但直到最近,它有两个短板:认不出零件的长相,也留不住用户随口说出的意见。这周把两块都补上了。