Commit Graph

61 Commits

Author SHA1 Message Date
209268ee18 fix: 还原 cmd /c type 读取并移除路径字符黑名单 — 加密钻带文件只能用 cmd type 读取
b75439c 以"命令行是多余的"为由把读取改成 FileStream+StreamReader,是错误前提:
项目存在无法用标准文件 I/O 读取的加密 txt/钻带文件(CLAUDE.md "Encrypted file reading"、
Docs/readme.md "读取加密钻带(使用cmd命令type读取)"、
Docs/刀具列表拖动排序功能说明.md "加密文件:使用 cmd 命令读取"均有记录),
该改动会导致这些文件读取失败。本次回退。

改动:
- 还原 CommandTypeFileReader.cs:cmd.exe /d /c type(ANSI/936 解码),
  失败时退出码与 stderr 保留在异常消息里
- 删除 ForbiddenPathChars 与两处字符校验(本次报错根因):
  ( ) & ^ @ 空格在双引号内对 type 安全,黑名单只会误伤 (D2-f)、(1) 等正常文件名
- 保留"非空路径""文件存在"校验与 ReadAllText(path, encoding) 重载
- 删除 AnsiFileReader.cs,15 处调用点改回
- CLAUDE.md / .trellis/spec/:恢复"加密文件必须用 cmd type"的说明,
  并标注为不可优化掉的硬约束(含 b75439c 反例)

验证:demo_drl 全部 36 个文件与 2335894 实现逐字符一致、行数一致;
含 ( ) & 空格路径实测可读(旧黑名单实现抛"文件路径包含不允许的命令行特殊字符");
cmd 失败消息含退出码与 stderr;dotnet build -p:Platform=x86 0 错误,
警告集与 HEAD 基线完全一致。
2026-09-20 13:28:37 +08:00
b75439cff4 fix: 修复含特殊字符路径的钻带文件读取失败 — 移除 cmd /c type,改为 AnsiFileReader 直接文件IO
问题:路径含 ( ) & % ! ^ @ 等字符时报"文件路径包含不允许的命令行特殊字符",
(D2-f)、(1) 这类正常业务文件名直接命中。

根因:读取统一入口把路径拼进命令行(cmd.exe /d /c type "..."),为"防炸"在 03d9b8b
引入 ForbiddenPathChars 黑名单——并非业务需求,是实现的自我约束。
实测:真正会坏的只有 %VAR%(必坏) 与延迟展开开启时的 !VAR!,而 ( ) & ^ @ 空格在
双引号内均正常;且 type 是字节透传,这层 cmd 对当初的编码问题毫无帮助。

改动:
- 新增 AnsiFileReader.cs:FileStream + StreamReader(默认 936 解码 + BOM 探测,
  与旧 StreamReader 解码路径逐字符等价),不经命令行
- 删除 CommandTypeFileReader.cs 及其 ForbiddenPathChars 字符校验
- 路径只保留"非空"与"文件存在"校验;IO 异常包装为
  InvalidOperationException("读取文件失败:{路径}({原因})")并保留 InnerException
- 15 处调用点同步改名;更新 CLAUDE.md 与 Docs 说明

验证:14 个 demo_drl 样例新旧实现字符串/行数逐字符一致;含特殊字符路径(含 %TEMP% 字面
路径,旧实现 rc=1)可读可解析;UTF-8/UTF-16 BOM 结果与旧实现一致;
dotnet build -p:Platform=x86 0 错误且警告集与基线逐条相同。
2026-09-20 11:30:04 +08:00
2335894be7 fix: 取消PP钻带外框13/15孔规则 — GetPpGenerationRule仅返回Legacy 3孔规则;删除外框规则及专属辅助死代码(SelectPpDrillTapeLocations/ParsePpHolePoints/SelectMiddlePoint/PpHolePoint/PpSideCoordinateTolerance) 2026-08-12 10:25:14 +08:00
5365791acd feat: 铆钉孔4.503作为PP钻带来源孔径 — PpSourceDiameters集合含3.203/4.503,legacy 3孔与外框13/15孔规则不变 2026-08-12 10:11:57 +08:00
ae2916cd6c feat: 铆钉孔孔径新增4.503mm — IsSpecialFixedDiameter 增加 4.503,固定为圆孔且不参与叠板/最小刀径计算 2026-08-12 09:57:02 +08:00
d4ecad6077 fix: DRL无参数文件替换bug — 刀径行无H参数段时追加参数段;M48后非注释行不再覆盖,改为插入描述行 2026-08-07 10:35:24 +08:00
d234bb06dc feat: DRL钻带更改参数功能 — 支持.drl文件从A01-A14参数文件按直径替换H/Z/S/F/U参数段 2026-08-07 07:18:23 +08:00
8a0222e903 fix: ROU重复直径去重 — 两遍扫描分配参数槽位 + 输出修改直径文本为三位小数
- 两遍扫描算法:Pass1 收集头部所有刀径并分配参数键,Pass2 重建行并追加参数
- 输出直径文本规范化到三位小数,重复直径依次 +0.001
- 参数字典键和ROU直径均 Math.Round(x,3) 消除浮点精度问题
- 匹配策略:在 [baseDiam, baseDiam+0.01) 内找候选键,按序分配
2026-08-03 20:31:32 +08:00
5ee4fb9c59 feat: 未匹配直径在完成弹窗中提示 — ReplaceParameters 返回 unmatchedDiameters 列表 2026-08-03 18:28:36 +08:00
5c9a70c9f0 feat: ROU成型参数替换功能 — 支持 .rou/.rou1/.rou2/.roux 文件从参数 txt 自动补充 S/F/R/Z/H 2026-08-03 18:19:33 +08:00
b51a5cecf8 fix: 按尾号标准计算最小刀径,排除粉尘刀与去毛刺刀
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-09 17:44:07 +08:00
c20a2c62b8 fix: 排除3.203等特殊孔径参与叠板计算,槽刀统计对齐真实槽孔
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 17:00:56 +08:00
8d6efa9e86 fix: 修复EA刀叠板查表直径区间匹配,叠板区改为折叠输入即算
EA刀/短槽刀列按参数表下限区间 [0.60,0.65)/[0.65,0.70)/[0.70,0.75)/>=0.75 匹配,修复 0.706mm 等刀径查表失败;叠板计算改为 Expander 默认收折、移除计算按钮、输入变化自动计算。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 22:01:15 +08:00
c0e4bb72cd docs: 归档叠板计算 PRD,标记全部 AC 已完成 2026-06-27 16:25:52 +08:00
fa697c9fd0 feat: 基础信息叠板计算功能
- 新增 StackCountCalculator: 数字化规则表(短槽刀/EA刀10×4、槽刀10×4、钻针10×6),公开Calculate方法,输入校验,查表逻辑,16oz铜厚递减
- 新增 StartupSelectionViewModel: 替换匿名DataContext,保留所有显示属性,新增板厚/铜厚输入、计算结果/明细、CanCalculate
- 新增 NonEmptyToVisibilityConverter
- 修改 StartupSelectionWindow.xaml: 增宽680px,新增3行(输入+结果+明细),计算按钮在基础信息内部
- 修改 StartupSelectionWindow.xaml.cs: 构造函数接收ViewModel,新增计算按钮事件
- 修改 App.xaml.cs: 构建ViewModel实例,CalculateStackMinDiameters独立遍历Tools(含0.749mm,排除机台码)
- 修改 App.xaml: 注册NonEmptyToVisibilityConverter
2026-06-27 16:24:45 +08:00
e27636dd93 fix: 二钻涨缩系数记忆在写回钻带后立即落盘
原实现 Save 在'涨缩完成'MessageBox(模态阻塞)之后才执行,配置滞后到用户点掉弹窗。改为写回钻带后立即 Save,失败信息并入完成提示,避免两个连续模态框。
2026-06-14 13:43:59 +08:00
fe3df98297 chore: 将 .mindfs 会话目录加入 git 忽略
.trellis/ 此前已忽略,本次补 .mindfs/。
2026-06-14 12:25:38 +08:00
29c7be3fac feat: 二钻涨缩系数记忆,载入上次系数
涨缩完成后将模式与系数写入 %LocalAppData%\DrillTools\scaling.ini,涨缩窗口新增"载入上次系数"按钮实时读取回填。每次完成涨缩覆盖更新,只保留最新一条记录(含源文件名追溯)。ini 使用 UTF-8 无 BOM,损坏时容错返回空。
2026-06-14 12:16:17 +08:00
906de9e265 chore: 将 demo_drl 目录加入 git 忽略并取消跟踪 2026-06-14 08:00:36 +08:00
0722a6bdf7 fix: 保留涨缩钻带坐标前导零 2026-06-06 22:17:38 +08:00
3e07873636 Exclude 0.749 from minimum diameter display 2026-06-06 08:37:11 +08:00
a08a2dfee4 fix: 调整涨缩窗口输入框高度,按钮和标题更名为二钻涨缩 2026-06-05 23:02:42 +08:00
cacbbe6c33 feat: 增加钻带涨缩功能,支持倍率/PPM模式缩放坐标
- 新增 ExcellonScaler 引擎:普通孔缩放坐标,G85槽孔保护槽长,刀具定义行原样保留
- 新增 DrillScalingWindow 参数设置窗口:倍率/PPM模式切换,X/Y独立输入
- 集成到启动功能菜单:.dr2/.dpin 文件显示"涨缩"按钮
- 输出覆盖原文件 + .bak 备份,GB2312 编码
2026-06-05 22:17:15 +08:00
f050a606ef fix: 启动功能选择菜单窗口强制置顶 2026-05-31 12:20:38 +08:00
c9d2f49eda fix: 3.175外围孔间距算法,兼容轮廓式分布和侧面凸出点
旧算法要求最上/最下排各≥2个点,无法处理角上只有单个孔的板边轮廓分布。
新算法:X间距取上下排边缘点的极值(过滤侧面凸出点),Y间距取所有点极值。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 16:55:03 +08:00
c7f982c145 feat: 增加3.203孔PP钻带生成逻辑 2026-05-25 16:35:41 +08:00
04d4cd84d6 修复主窗口基础信息高度 2026-05-25 11:44:19 +08:00
0b4f55c352 chore: 将 .trellis 加入 .gitignore 并移除已跟踪文件
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 10:24:22 +08:00
ce81e1cf7d 显示 3.175 外围孔间距 2026-05-25 10:15:42 +08:00
41bba7f8aa perf: 启动时合并4次文件读取解析为1次,加速右键打开大钻带
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 17:13:53 +08:00
b009ece1cd feat: 注册右键菜单"用DrillTools打开",新增.dr3/.trg后缀支持
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 16:35:56 +08:00
cb27e8917a feat: PP钻带基础信息显示X/Y间距
检测PP钻带(文件名-pp结尾、4孔、直径4.000),计算上下孔X间距和左右孔Y间距
(欧氏距离),在MainWindow和StartupSelectionWindow的基础信息中显示。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 16:04:51 +08:00
9896e54e93 fix: 排序种子与当前刀序一致时跳过提示
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 15:39:16 +08:00
473b2ca9cf fix: 统一输出文件编码为ANSI,修复.NET 6下Encoding.Default回退为UTF-8的问题
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 15:35:11 +08:00
79021aa86b fix: 将应用并保存按钮移至工具栏末位
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 12:27:33 +08:00
ceb88c216a feat: 在启动功能选择窗口中显示基础信息
在 StartupSelectionWindow 顶部添加基础信息展示模块,
显示文件名、最小钻咀、最小槽刀、最小EA刀直径,
与 MainWindow 中的基础信息面板布局一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 12:23:28 +08:00
cbaac0e034 chore: record journal 2026-05-22 22:51:17 +08:00
783d99a3d8 chore(task): archive 05-22-defer-sort-seed-check 2026-05-22 22:51:09 +08:00
d1cdf081fe 移除主窗口置顶功能 2026-05-22 22:48:37 +08:00
4b2eff1c7e Defer sort seed checks until adjust-order startup 2026-05-22 22:44:56 +08:00
e438386e68 Reuse open Explorer window when selecting files 2026-05-21 13:33:25 +08:00
25a7458db3 Add startup PP drill tape generation 2026-05-21 13:16:39 +08:00
951486202e Add startup drill tape parameter cleanup 2026-05-21 12:49:19 +08:00
21fc6d4c4c Handle G84 circular expansion hole counts 2026-05-21 12:39:46 +08:00
a27cef82b2 新增启动菜单 2026-05-17 21:56:57 +08:00
e006f83a19 优化对齐方式 2026-05-16 16:41:59 +08:00
81a1726557 实现导出孔数量 2026-05-16 12:07:32 +08:00
51de98bd5b Add a splitter to resize the main panes 2026-05-16 11:02:00 +08:00
fc5b2b16fa Hide slot and regular hole columns in main list 2026-05-16 10:56:12 +08:00
03d9b8baa2 Refactor drill tape reading and reorder logic 2026-05-16 10:23:55 +08:00