docs: 修正 3.2 类型表,kIntersect/kSliceSolid 是 region + 折线

原表把 kIntersect(28)、kSliceSolid(29) 归为"2 个 region(外 + 内)",
实际 m_sScr 是 "regionSAT|折线文本":写端用 CurveToString 产出折线
(:2130、:2184),读端用 StringToPolyline 还原(:4403、:4441)。

按原表装容器,解包时第二个 acisIn 必然失败。容器只装 region,折线
部分不进容器。

同时补三条核对结论:切分取第一个 | 且 sScr2 保留分隔符;kSweep 的路径
在 m_sszPoint2ds 不在 m_sScr;降级导出要按这张表拼回。
This commit is contained in:
company-desktop-computer committed 2026-10-22 11:02:16 +08:00
1 parent 266deb16ae
commit e693e99f4c
1 file changed
+15 -7
+15 -7
View File
@@ -77,7 +77,7 @@ if (AcDbX3dSolid::kCurrentVersionNumber > 1) {
### 3.2 多 region 容器
9 种 region 类型里,5 种单 region,3 种双 region,1 种(`kLoft`)N 个 region。统一成一个容器:
9 种类型里,6 种只有 region(5 种单 region、1 种双 region),2 种是 region + 折线,1 种(`kLoft`)N 个 region。容器只装 region,折线部分不进容器:
```cpp
// 16 字节头
@@ -94,13 +94,21 @@ struct RegionBlobHeader {
// char data[len]; // SAT 的 ASCII 字节,不含结尾 0
```
对应关系:
对应关系(按当前代码核对):
| 类型 | nRegions |
| --- | --- |
| `kExtrude2`(27) / `kSlicePipe`(26) / `kRevolve`(21) / `kRevolve2`(38) / `kSweep`(40) | 1 |
| `kConePipe`(30) / `kIntersect`(28) / `kSliceSolid`(29) | 2(外 + 内) |
| `kLoft`(41) | N |
| 类型 | `m_sScr` 实际内容 | nRegions |
| --- | --- | --- |
| `kExtrude2`(27) / `kSlicePipe`(26) / `kRevolve`(21) / `kRevolve2`(38) / `kSweep`(40) | 单个 region 的 SAT | 1 |
| `kConePipe`(30) | `外环SAT` + `\|` + `内环SAT` | 2 |
| `kIntersect`(28) / `kSliceSolid`(29) | `regionSAT` + `\|` + **折线文本** | 1 |
| `kLoft`(41) | N 个 region SAT,`@region@` 连接 | N |
几点必须注意:
- `kIntersect` / `kSliceSolid` 的第二个分量是 `CoreTools::CurveToString` 产出的折线文本,**不是 region**。写端 `:2130`/`:2184`,读端用 `StringToPolyline`(`:4403`、`:4441`)。原文档把它们当成「外 + 内」两个 region 是错的,按那样装容器,解包时第二个 `acisIn` 必然失败
- 切分统一取第一个 `|`,且 `sScr2 = m_sScr.Mid(nPos)` 保留了分隔符本身,靠 `StringToRegion` / `StringToPolyline` 内部找 ACIS 头容错
- `kSweep` 的路径存在 `m_sszPoint2ds`(`AcDbCurveToString`,`:5088`/`:5103`),不在 `m_sScr`
- 将来做降级导出时也要按这张表拼回,`kIntersect` / `kSliceSolid` 的折线文本要原样保留
`magic` 是**必需**的,不是可选项:`m_pSatBuffer` 是公共字节池,当前已有 4 种语义(`kFenceExtrude` 点数组、`kFrom3JS` SubDMesh、`kLoftReducer` 宽字符串、SAT 导入原始字节),必须自校验。