docs: TransformBy/ToJson 必须随阶段三改,补 kLoft 丢数据后果

11.2 第 1 项从「是否一起改」改为已定。这两处都是 m_sScr 的读者,容器化
后不改不是导出数据不对,而是功能直接坏:

- TransformBy:5 个类型靠 StringToRegion(m_sScr) 取截面,取不到就
  bChanged=false、不 ReCreate。kExtrude2 留下参数与几何不一致;
  kRevolve/kRevolve2/kSweep 整段不执行
- kLoft:vec 为空使 strAll 为空,:5567 把 m_sScr 覆盖成空串,ReCreate
  里 CreateLoft 因空输入直接 return false,一次移动永久丢截面数据
- ToJson:三个分支全靠 m_sScr 解析 __sScr__,不改则导出几何为空

同时记录 m_sScr 的分布(66 处、24 个函数),说明阶段三的范围是所有
m_sScr 读写者,不是生成路径加少量读取点。
This commit is contained in:
company-desktop-computer committed 2026-10-22 14:09:44 +08:00
1 parent ccf90a5882
commit e5e6fd7d6d
1 file changed
+5 -1
+5 -1
View File
@@ -404,7 +404,11 @@ void SetSweepData(const CString& sReg, const AcDbCurve* pCurve);
### 11.2 重启前还要定的事
1. `TransformBy`、`ToJson` 是否一起改——这两处在运行时会反复导出/解析 SAT,是阶段三改动量的大头
1. **已定:`TransformBy`、`ToJson` 必须一起改**(2026-10-22)。这两处都是 `m_sScr` 的读者,容器化后不改不是「导出数据不对」,而是功能直接坏:
- `TransformBy`(`:5488`)5 个类型都靠 `StringToRegion(m_sScr)` 取截面,取不到就 `bChanged = false`,末尾不 `ReCreate`。`kExtrude2` 会留下「参数已变换、几何未变」的不一致;`kRevolve` / `kRevolve2` / `kSweep` 整段分支不执行,完全不动
- `kLoft` 更严重:`vec` 为空导致 `strAll` 为空,`:5567` 把 `m_sScr` 覆盖成空字符串,`ReCreate` 里 `CreateLoft` 因空输入直接 `return false`(`:5006`)——**一次移动就永久丢掉截面数据**
- `ToJson`(`:5211`)三个分支(`kSweep`、单 region、多 region)全靠 `m_sScr` 解析出 `__sScr__`,不改则导出的 JSON 里 region 几何为空
- 因此阶段三的范围是「所有 `m_sScr` 读写者」,不存在「只改生成路径、留着这两处」的做法。`m_sScr` 在 `AcDbX3dSolid.cpp` 共 66 处、24 个函数:`ReCreate` 18、`TransformBy` 10、`ToJson` 9、9 个 `Create*` 各 1、4 组 Get/Set 各 1、`dwgIn/OutFields` 各 1
2. 老图纸里 region 类型的实际占比——占比低的话体积收益有限,可以永久搁置
### 11.3 实施时的技术前提(已核对)