From bed6556adf283143781d46c524a638146b30dbdf Mon Sep 17 00:00:00 2001 From: company-desktop-computer Date: Thu, 22 Oct 2026 10:43:45 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=98=8E=E7=A1=AE=E9=98=B6=E6=AE=B5?= =?UTF-8?q?=E4=B8=89=E5=8D=95=E5=90=91=E5=85=BC=E5=AE=B9=E2=80=94=E2=80=94?= =?UTF-8?q?=E8=80=81=E7=89=88=E7=9C=8B=E4=B8=8D=E5=88=B0=E6=96=B0=E5=9B=BE?= =?UTF-8?q?=20region=20=E5=87=A0=E4=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 兼容方案定为第一项:不升 kCurrentVersionNumber,新版能完整读旧版图纸, 旧版打开新图时 region 类型的 AcDbX3dSolid 几何不可见。 补充说明 m_pSatBuffer 在旧版也会原样读写,所以旧版另存后回新版仍能恢复; 非 region 类型(点串、SubDMesh、管廊脚本)不受影响。 文档开头的原则、4.3.4 的不升版本理由同步。 --- AcDbX3dSolid-refactor-plan.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/AcDbX3dSolid-refactor-plan.md b/AcDbX3dSolid-refactor-plan.md index 5bcaa6c..5abecac 100644 --- a/AcDbX3dSolid-refactor-plan.md +++ b/AcDbX3dSolid-refactor-plan.md @@ -4,7 +4,7 @@ > > 范围:`SourceCode/Code2026/CoreLibrary/AcDbX3dSolid.cpp`(5596 行)、`inc/AcDbX3dSolid.h`、`CoreCommand/CoreTools.cpp`。 > -> 原则:**老图纸必须能读**;写入统一新格式;不改对象模型(`AcDbX3dSolid` 仍是可平凡复制的数据类)。 +> 原则:**单向兼容——新版必须能读老图纸,老版不保证能显示新图的 region 类型几何**(见 11.1);写入统一新格式;不改对象模型(`AcDbX3dSolid` 仍是可平凡复制的数据类)。 --- @@ -245,7 +245,7 @@ else if (!m_sScr.IsEmpty()) 写入:只写新格式。 -**不升 `kCurrentVersionNumber`**。理由:字段都在,靠"哪个非空"即可判别;升版本会让老版本 CAD 读新图时走 `eMakeMeProxy`。 +**不升 `kCurrentVersionNumber`**。理由:字段都在,靠"哪个非空"即可判别;升版本会让老版本 CAD 读新图时走 `eMakeMeProxy`,新图在所有老版本上彻底不可编辑。代价是老版本看不到 region 类型的几何,这是已定的取舍,见 11.1。 #### 4.3.5 `kLoftReducer` 纳入统一容器 @@ -371,21 +371,22 @@ void SetSweepData(const CString& sReg, const AcDbCurve* pCurve); **决定:暂不实施。** 阶段一(临时文件唯一化、越界读)、阶段二(懒重建)已合并,主要痛点已经解决;阶段三剩下的收益只有「region 部分 DWG 体积减半」,代价是新图在老版本插件里 region 几何不可见。当前时机未到。 -### 11.1 核心取舍 +### 11.1 兼容方向(已定) -`m_sScr` 停写后,老版本插件打开新图会走 `StringToRegion("")`,返回 NULL,region 类型建不出几何。数据没有丢——仍在 `m_pSatBuffer` 里,装回新版插件即可恢复。 +**单向兼容**:新版插件完整读取旧版图纸(`m_sScr` 老路径永久保留);旧版插件打开新图时,region 类型的 `AcDbX3dSolid` 几何不可见。 + +不可见不等于丢数据:`m_pSatBuffer` 老版本也会原样读写(版本 > 1 的通道一直都在),所以旧版打开后另存、再回新版打开,几何仍能恢复。非 region 类型(`m_sszPoint2ds` 点串、SubDMesh、管廊脚本)不受影响。 | 选项 | 后果 | 结论 | | --- | --- | --- | -| 不升版本号,接受老插件缺几何 | 老插件能开图、参数都在,region 几何不显示;换新版可恢复 | 若重启阶段三,选这个 | +| 不升版本号,接受老插件缺几何 | 老插件能开图、参数都在,region 类型几何不显示;换新版可恢复 | **已定,选这个** | | 升到 5,老插件显式 proxy | 不会静默缺几何,但新图在所有老版本上彻底不可编辑,且不可回退 | 不选 | | 保留双写(`m_sScr` 仍写老格式) | 体积变成 2N + N,比现状更差 | 否决 | -### 11.2 重启前必须先定的事 +### 11.2 重启前还要定的事 -1. 11.1 的表格选哪一行 -2. `TransformBy`、`ToJson` 是否一起改——这两处在运行时会反复导出/解析 SAT,是阶段三改动量的大头 -3. 老图纸里 region 类型的实际占比——占比低的话体积收益有限,可以永久搁置 +1. `TransformBy`、`ToJson` 是否一起改——这两处在运行时会反复导出/解析 SAT,是阶段三改动量的大头 +2. 老图纸里 region 类型的实际占比——占比低的话体积收益有限,可以永久搁置 ### 11.3 实施时的技术前提(已核对)