Skip to content

天正解析完善:通用代理图形解码器拆分 + 多版本对象修复 - #39

Closed
wkslgjx wants to merge 2 commits into
CHMOSE023:mainfrom
wkslgjx:main
Closed

wkslgjx wants to merge 2 commits into
CHMOSE023:mainfrom
wkslgjx:main

Conversation

@wkslgjx

@wkslgjx wkslgjx commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

No description provided.

代理图形:新增厂商无关的通用解码器 src/Import/ProxyGraphics.h(命名空间
MiniCAD::Proxy)。只解记录流、不看对象类名,天正 / 斯维尔 / 浩辰等自定义实体
共用;TchProxyGraphics.h 改为薄封装,只做类型别名与转发。容错按「能解多少算
多少」:不认识的记录、数值不合理的记录只跳过该条(Skipped 计数),坐标超出
|v| < 1e12 的图元丢弃(Discarded 计数),避免脏数据把包围盒撑到 1e70。

天正对象:
- 新增老虎窗 TCH_DORMER(明文 / 加密两个家族;平面朝向取屋面法向在 XY 的方位角)
- 新增房间 TCH_SPACE、曲面网格 TCH_CURVEMESH2
- 墙体:T20 V2~V7 的 rc8 9/10/11 解密与字段顺序;版本 11 几何后多 4 字节标记;
  旧版 T5/T6/T7(基类 2/3/4)的明文 BD 几何
- 老类 TCH_DIMENSION 复用 DecodeDimension;半径 / 直径标注按 Flags 0x10 区分,
  直径画穿心双箭头并写 ⌀
- 坐标标注 TCH_COORD 版本 1 补默认引线(4.2894 / 4.5069 倍字高)
- 箭头 / 矩形楼梯旧版字段子集;索引符号 TCH_INDEXPOINTER 内联文字分支
- T20 基类 6/7/8、文字类版本 3 句柄流、指北针全零尾部

工具:tools/tch_versions_check.ps1 批量核对一组不同天正版本另存的同一张图。
上游 b84cbcf 在 EntityColor::DrawRgba 里用 �uto near = ... 做局部 lambda,
windows.h 定义了同名的 near 宏,apps/Win32 的翻译单元包含 windows.h 后该行被
展开成语法错误(C2513「在 = 前没有声明变量」)。核心库不包含 windows.h 所以没暴露。
改名为 isClose。
CHMOSE023 added a commit that referenced this pull request Nov 8, 2026
整理自 PR #39(只合代码,不带该 PR 的注释、本机核对脚本与真实图纸数据):

- TCH基类版本 6~8(T20 各版):句柄个数偏移、版本 8 的内联 GUID;
  组合门窗子门窗与表格也传 data
- 墙受保护几何类版本 9 / 11、旧版墙(基类 2~4)的明文几何
- 坐标标注、箭头、矩形楼梯、索引符号按类版本分支;指北针接受 2004
  格式与全 0 尾部;加密文字类版本 3;旧类 TCH_DIMENSION;直径标注
- 新增 TCH_DORMER、TCH_SPACE、TCH_CURVEMESH2(代理图形为空,按私有数据解)
- 代理图形解码改名为 Proxy::Decode(src/Import/ProxyGraphics.h),
  Tch::DecodeProxyGraphics 保留为转发;行为与 main 相同,未采纳该 PR
  对裁剪 / 变换记录、颜色字节序、记录 33 的改写,测试保留并补一条
  坐标量级超限的用例

Co-Authored-By: 深悟空 <wkslgjx@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@CHMOSE023

Copy link
Copy Markdown
Owner

感谢贡献!已整理后合入 main:ce4324e。

已合入(只合代码,没带新加的注释):

  • TCH基类版本 6~8、墙类版本 9 / 11、旧版墙的明文几何
  • 坐标标注 / 箭头 / 矩形楼梯 / 索引符号 / 指北针 / 加密文字的多版本分支,旧类 TCH_DIMENSION,直径标注
  • 新增 TCH_DORMER、TCH_SPACE、TCH_CURVEMESH2
  • 代理图形解码移到 Proxy::Decode(src/Import/ProxyGraphics.h),Tch::DecodeProxyGraphics 保留为转发

没有合入:

  • ProxyGraphics.h 的行为改动:这份是从早于 b84cbcf 的版本改写的,会回退 main 上已有的修正——
    • 裁剪 / 变换记录(27~31)跳过后,后面图元的位置会错,所以 main 仍整个放弃
    • 颜色记录 22 先看低字节,会把 0xc30000c1(ACI 193)认成 ByBlock
    • 记录 33 另写了位读取器,丢了逐段线宽和填充的凸度;main 用的 DwgBitReader 本来就是 MSB-first
    • 填充同时加轮廓:白块盖字的根因是颜色解错,main 已经修了
  • 测试改动:被删的颜色、记录 33、厚度、裁剪等用例都保留了;用真实图纸句柄和坐标的用例没合
  • tools/tch_versions_check.ps1:路径写死在本机
  • 文档:已按合入的内容改写,去掉了真实句柄和坐标

另外,文档里提到「测试程序里直接 ImportCad 这些图会栈溢出崩溃」。方便的话可以另开一个 issue,用不含敏感内容的复现图纸或调用栈说明一下。

@CHMOSE023 CHMOSE023 closed this Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants