Commit Graph
93 Commits
Author SHA1 Message Date
gjm 68b8ca12f0 Merge pull request 'docs: 13.2 按实际实现更新,m_bNeedCreate 懒加载 + Create 保持强制重建' (#44) from company-desktop-computer/docs/x3dpart-lazy-actual into main
Reviewed-on: #44
2026-10-22 15:50:07 +08:00
gjm ae10c51e79 Merge pull request 'refactor: X3dPart 的懒加载标志改名 m_bNeedCreate 并加 mutable' (#43) from company-desktop-computer/refactor/x3dpart-lazy-solid into main
Reviewed-on: #43
2026-10-22 15:49:37 +08:00
company-desktop-computer bca4618125 docs: 13.2 按实际实现更新,m_bNeedCreate 懒加载 + Create 保持强制重建 2026-10-22 15:48:48 +08:00
company-desktop-computer 8ca9519320 refactor: X3dPart 的懒加载标志改名 m_bNeedCreate 并加 mutable
与 AcDbX3dSolid::m_bNeedCreate 对齐:同一个语义(派生几何缓存失效,
首次使用时再算),用同一个名字,避免 m_bDirty 被理解成"参数没写完"。
声明为 mutable,与 AcDbX3dSolid 一致;清标志仍在 Rebuild() 里做。
2026-10-22 15:41:14 +08:00
company-desktop-computer 5a5cd08721 perf: X3dPart 布尔结果改为按需重建,开图不再逐件建体
方案 A(见 AcDbX3dSolid-refactor-plan.md 第 13 节)。开图慢的瓶颈是
AecDbX3dPartEntity::dwgInFields 无条件调 m_pPart->Create(),每个 part 都要
N 次建体 + N 次布尔。

A1:引入 m_bDirty
- AecDbX3dPart 增加 m_bDirty,构造/拷贝构造置 true
- 15 个改参数的接口置脏:AddX3dSolid、RemoveAt、RemoveAll3dSolidRec、
  SetOrgPoint、SetAxis、SetBoolOperFor、SetHide、SetActive、PeelOffTheSkin、
  AddMove×2、ResetMove、AddRotate、ResetRotate、CopyFrom
- 新增 Rebuild()(protected):清标志后无条件重建,原 Create() 的函数体
- 新增 EnsureCreated():m_bDirty 或 m_pSolid 为空时才 Rebuild

Create() 保持「显式调用一律重建」的语义,内部转调 Rebuild()。原因是外部
有 10 处先取 GetX3dSolid(0) 直接改(如 AecDbBDPipeBase:941 调 TransformBy)
再调 Create(),部件感知不到这类改动,做成幂等会漏掉重建。

A2:开图不建几何
- AecDbX3dPartEntity::dwgInFields 去掉 m_pPart->Create(),由
  AecDbX3dPart::dwgInFields 结尾置脏
- 读入口统一先 EnsureCreated:CreateDraw3dSolid、Draw3d、getOsnapPoints、
  GetForHouseSubtract

收益:关闭/冻结图层、视口外、XREF/审核/发布等不绘制的场景完全省掉建体与
布尔;全图可见时开图时间下降、首次 regen 补回。
2026-10-22 15:07:18 +08:00
gjm b75b779518 Merge pull request 'docs: 补开图速度优化方案' (#41) from company-desktop-computer/docs/open-speed-plan into main
Reviewed-on: #41
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-22 14:48:03 +08:00
gjm 6cc08fcca0 Merge pull request 'docs: 阶段三取消,记录理由并补开图速度方向' (#40) from company-desktop-computer/docs/x3dsolid-stage3-cancel into main
Reviewed-on: #40
2026-10-22 14:47:47 +08:00
company-desktop-computer f0bf3f8fe2 docs: 补开图速度优化方案
第 13 节从「两个候选方向」扩写成可执行方案:

- 13.1 成本模型:dwgInFields:1824 无条件 Create();Create() 每次全量重建,
  AddX3dSolid 不置脏,调用方只能靠再调 Create() 保证同步
- 13.2 方案 A(推荐,不改格式),分两步:
  A1 加 m_bDirty,Create() 早退,改参数的 15 个接口置脏
  A2 dwgInFields 去掉 Create(),5 个读入口统一走 EnsureCreated
  附收益边界与四个风险点(副作用延迟、失败重试、const_cast、CopyFrom 冗余)
- 13.3 方案 B 缓存布尔结果:dwg 字段要升版本(不接受)、扩展字典 xrecord
  可兼容但体积膨胀,结论是量完 A 再定
- 13.4 方案 C 降低单次重建成本:bbox 剔除、减少 clone、DrawUserInf3d 热点
- 13.5 度量埋点与验收判据
- 13.6 建议顺序:A1 → A2 → 再决定 B/C
2026-10-22 14:46:18 +08:00
company-desktop-computer 2c374b92e5 docs: 阶段三取消,记录理由并补开图速度方向
决定不做 region 二进制化,两条理由:
1. 主要收益只是图纸体积,而当前图纸大小在可接受范围内
2. 改动会改变存储格式,新图在老插件上读不出 region 几何,要么升版本号
   变 proxy,要么额外做降级导出兜底,性价比不足

文档调整:
- 开头原则改为状态说明,明确格式保持现状、新老插件双向可读
- 第 3、4、12 节标注为存档;第 9、10 节同步阶段三取消
- 第 11 节由「暂缓」改为「取消」,11.1 改为取消后的兼容状态,
  11.2 保留重启前提与改动范围核对结果
- 新增第 13 节:开图速度方向。瓶颈是 X3dPartEntity::dwgInFields:1824
  无条件调用 Create(),成本约 N×(acisIn+clone) + (N−1)×布尔;
  列出懒执行与缓存布尔结果两个候选
2026-10-22 14:42:00 +08:00
gjm a792194aa9 Merge pull request 'docs: TransformBy/ToJson 必须随阶段三改,补 kLoft 丢数据后果' (#39) from company-desktop-computer/docs/x3dsolid-stage3-scope into main
Reviewed-on: #39
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-22 14:10:52 +08:00
company-desktop-computer e5e6fd7d6d 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 读写者,不是生成路径加少量读取点。
2026-10-22 14:09:44 +08:00
gjm ccf90a5882 Merge pull request 'docs: kIntersect/kSliceSolid 是遗留类型,阶段三不迁移' (#38) from company-desktop-computer/docs/x3dsolid-legacy-types into main
Reviewed-on: #38
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-22 13:55:47 +08:00
company-desktop-computer 4bc346640c docs: kIntersect/kSliceSolid 是遗留类型,阶段三不迁移
核对结果:这两种类型全库没有产生路径,新图永远不会出现。

- 枚举只在 AcDbX3dSolid.h:53-54 定义,其它模块零引用
- CreateIntersect / CreateSliceSolid 只有定义、头文件声明、ReCreate 读分支
  调用(:4413、:4451),是纯读路径
- Create() 的 12 个 case 里没有它们;SetSolidData() 全库无调用者,内部也
  没有对应 case
- 没有 (Primitive)28/(Primitive)29 这类数字强转

文档相应调整:
- 3.2 表格加「迁移」列,两种类型标为否,并补核对依据
- 4.3.1/4.3.2 把两处读写点移出迁移表,注明保持现状
- 4.3.3、4.3.6 的停写范围收敛为「迁移的 7 种类型」
- 12.5 降级表改为「不进容器,m_sScr 原样写出」
- 12.6 由「折线后缀待定」改写为「不参与迁移(已定)」,冲突不再存在
- 11.2 删掉折线后缀这条待定项,第 7 节验证清单同步
2026-10-22 13:52:13 +08:00
gjm 11bbf6dbf9 Merge pull request 'docs: 补阶段三的降级导出方案(新格式 → 老格式)' (#37) from company-desktop-computer/docs/x3dsolid-legacy-export into main
Reviewed-on: #37
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-22 13:37:11 +08:00
company-desktop-computer cad5289fae docs: 补阶段三的降级导出方案(新格式 → 老格式)
新增第 12 节。核心结论:降级不需要重建几何,容器里就是 acisOut 的 SAT
ASCII 字节,老 m_sScr 里也是同一批字节,解包后按老规则拼回即可,纯内存、
不调 acisIn、不落临时文件。

- 在 dwgOutFields 里做:AcDbX3dSolid 的持有关系分散在 X3dPart、X3dPartEntity
  以及 Hanger/Roof/Stair 的 m_solids 缓存里,命令层遍历不全,但存盘时每个
  实例必然走 dwgOutFields
- 进程级开关 + RAII 复位,只改写出内容,不改对象状态,导出后当前图仍是新格式
- MakeLegacyScr 按 3.2 的表分四类拼回,容器写出长度 0
- 12.6 指出 4.3.6「region 类型停写 m_sScr」与 kIntersect/kSliceSolid 的折线
  后缀冲突,建议这两种类型继续只写折线后缀
- 12.8 记录限制:导出写的对象版本号是 4,只能被 kCurrentVersionNumber >= 4
  的插件读取;版本号 3 的存量插件靠降级救不回来,需要另写 v3 布局

11.1、11.2、11.4 同步加交叉引用与状态行。
2026-10-22 13:26:51 +08:00
gjm 186431a11e Merge pull request 'docs: 修正 3.2 类型表,kIntersect/kSliceSolid 是 region + 折线' (#36) from company-desktop-computer/docs/x3dsolid-type-table into main
Reviewed-on: #36
2026-10-22 13:21:23 +08:00
company-desktop-computer e693e99f4c 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;降级导出要按这张表拼回。
2026-10-22 11:02:16 +08:00
gjm 266deb16ae Merge pull request 'docs: 阶段三暂缓,补兼容取舍与已核对的技术前提' (#35) from company-desktop-computer/docs/x3dsolid-stage3-deferred into main
Reviewed-on: #35
2026-10-22 10:56:28 +08:00
company-desktop-computer bed6556adf docs: 明确阶段三单向兼容——老版看不到新图 region 几何
兼容方案定为第一项:不升 kCurrentVersionNumber,新版能完整读旧版图纸,
旧版打开新图时 region 类型的 AcDbX3dSolid 几何不可见。

补充说明 m_pSatBuffer 在旧版也会原样读写,所以旧版另存后回新版仍能恢复;
非 region 类型(点串、SubDMesh、管廊脚本)不受影响。

文档开头的原则、4.3.4 的不升版本理由同步。
2026-10-22 10:43:45 +08:00
company-desktop-computer fbb2ca8890 docs: 阶段三暂缓,补兼容取舍与已核对的技术前提
- 新增第 11 节:阶段三暂缓的决定、三个兼容选项的后果、重启前必须先定的事
- 修正过时内容:kCurrentVersionNumber 实际是 4;不需要新增
  CoreTools::RegionToBuffer,现有 RegionToString(char*&) 已输出 ASCII 字节
- 写入点、读取点表格按当前 main 行号更新,标注以函数名定位
- 4.3 开头注明阶段一、二已合并,阶段三暂缓
2026-10-22 10:38:35 +08:00
gjm 8110cad4c0 Merge pull request 'fix: 曲线通道重建截面时防崩溃' (#34) from company-desktop-computer/fix/ewpipebase-curve-read-guard into main
Reviewed-on: #34
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-22 10:26:58 +08:00
company-desktop-computer 4fc910d6fd fix: 曲线通道重建截面时防崩溃
RegionFromCurvesDwgInFields 里两处:

- isRegionNull(pRegion) && isRegionNull(pRegionBig) 改为 ||,原写法要求
  两个都无效才跳过,实际 pRegionBig 此时必非空,条件恒假,无效 region
  照样进布尔运算
- booleanOper 改走已有的 rawBooleanOperWrapper,ACIS 内部异常时由 SEH
  捕获,不再直接崩 CAD

顺带 delete pRegion:arRegPtrs 不拥有对象,原来 subtract 完没有释放。

曲线通道只读,spline 参数在写端从未落盘,几何缺失无法靠读端修复,
本次只处理崩溃路径,重建逻辑与启发式保持原样。
2026-10-22 10:24:54 +08:00
gjm beeb6031e0 Merge pull request 'refactor: 水池截面中转文件改用 CoreTools::getTempFilePath' (#33) from company-desktop-computer/fix/pool-section-sat-name into main
Reviewed-on: #33
2026-10-22 10:09:14 +08:00
company-desktop-computer 4e658a8ae9 refactor: 水池截面中转文件改用 CoreTools::getTempFilePath
删除 Pool3dCmd/PoolSectionTemp.h,JMDBDlg、JMSJDlg、HZQTDlg 共 7 处
改为 CoreTools::getTempFilePath(_T("JMSJ_"), _T(".sat"), 目录)。

同时修 getTempFilePath 自身的问题:
- 传了有效父目录时 sParentPath 没有赋值,会拼出 "\JMSJ_xxx.sat"
- 父目录为空时仍对 pszParentPath 调 _taccess,参数可能是 NULL
- return sPath(); 语法错误
- objId 用 %lu 格式化 Adesk::ULongPtr,64 位下会截断,改 %I64u

temp-file-naming.md 同步改为介绍这个通用函数。
2026-10-22 10:06:51 +08:00
company-desktop-computer 8caea9e6bd fix: 水池截面中转文件 JMSJ.sat 按进程隔离,补临时文件命名文档
JMDBDlg、JMSJDlg、HZQTDlg 共 7 处共用固定的 JMSJ.sat,两个 CAD 实例
同时运行时会互相覆盖,acisIn 可能读到另一个实例写的截面。

新增 Pool3dCmd/PoolSectionTemp.h 的 GetPoolSectionSatPath(),文件名改为
JMSJ_<pid>.sat。同一进程内所有调用点路径一致,acisOut 写、ShowLastSection
读的隐式链路不受影响;进程之间用 PID 隔离。顺带去掉无意义的 MakeLower。

同时新增 temp-file-naming.md,记录临时文件命名规则、全库现状,以及
DGJM.sat 已废弃、不再改造的结论。
2026-10-22 09:03:11 +08:00
company-desktop-computer e3fff2ad66 fix: SAT 临时文件唯一化,修 DGJM.sat 读取越界
1. AcDbX3dSolid::CreateFromSat 的 temp\temp.sat 改为
   temp_<pid>_<原子序号>.sat,用完 DeleteFile。原来固定名且从不删除,
   两个 CAD 实例同时从 SAT 重建时会互相覆盖。

2. DGJM.sat 的读取统一改成「分配时补终止符 + 按实际读到的长度赋值」:
   new char[n] 之后直接赋给 CString 会把未初始化内存当字符串读到终止符,
   现在 new char[n+1] + memset,再用 CString(pszTxt, nRead) 明确长度。
   涉及 AcDbX3dSolid、AecDbEarthWormFitting、DGJMDlg、GJYXJMDlg、
   JMDBDlg、JMSJDlg 共 6 处。

DGJM.sat 本身仍是固定文件名,写读双方靠它隐式传递,本次不改名。
2026-10-21 23:39:47 +08:00
gjm 54f24a93e4 Merge pull request 'fix: 未入库管道实体存截面时临时文件名不再撞车' (#30) from company-desktop-computer/refactor/ewpipebase-region-sat into main
Reviewed-on: #30
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 23:30:13 +08:00
company-desktop-computer 8630e2a499 fix: 未入库管道实体存截面时临时文件名不再撞车
objectId() 为 kNull 时(剪贴板复制、临时序列化等),handle 取不到,
原来拼出来的文件名固定是 Region_<pid>_.dat,同一次存盘里所有截面共用
一个临时文件。

改为:句柄有效时仍用句柄,否则用进程内递增序号 N1/N2/... 作为后缀。
日志里的标识同步从 handle 改成 tag。
2026-10-21 23:22:21 +08:00
gjm a63f5e2693 Merge pull request 'refactor: 管道截面统一存 SAT,曲线写路径退役' (#29) from company-desktop-computer/refactor/ewpipebase-region-sat into main
Reviewed-on: #29
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 23:04:58 +08:00
company-desktop-computer 8941246b16 refactor: 管道截面统一存 SAT,曲线写路径退役
SectionRegionDwgOutFields 不再 explode 后按曲线写,改为固定写 nLen=0 +
RegionAcisoutDwgOutFields。读取端 nLen==0 本来就识别 SAT 通道,因此
kCurrentVersionNumber 保持 7,新图在老插件上仍可还原。

同时修 SAT 通道自身缺陷:
- RegionAcisoutDwgOutFields:临时文件名加进程号;new char[nLen] 补 +1 并
  清零;检查短读,短读或空文件退回原生写法,不再把未初始化内存写进 DWG;
  acisOut/Open 失败分支补 DeleteFile;两个重复的 errorfile 分支合并为
  WriteRegionNativeFallback,顺带修掉 7 字节泄漏
- RegionAcisInDwgInFields:临时文件名只取纯文件名,拒绝 DWG 里夹带的路径
  成分和盘符;errorfile 分支补 delete[];create/dwgInFields/acisIn 失败
  分支加日志并正确释放;acisIn 返回的非 region 实体不再泄漏
- 删除 RegionExplodeDwgOutFields(写路径退役后无调用者)
2026-10-21 22:15:49 +08:00
company-desktop-computer 5692d9010b docs: 补充 AecDbEwPipeBase 截面存 SAT 的落盘实测与不分流决策
- 新增 3.7 落盘实测:SAT 原始字节、DWG 净增、acisIn 与布尔重建耗时,
  并标注该数据来自 accoreconsole 模拟 REGION,非真实实体实测
- 新增 3.8 为什么不分流:createFromCurves 慢、落盘省不下体积、
  写路径缺陷、升版本成本
- 修正体积代价表述:字段级估算 5~20 倍,落盘压缩后实为 4~5 倍
2026-10-21 22:04:16 +08:00
gjm 5543ac42a2 Merge pull request 'fix: AcDbX3dSolid 正确性小修(失败留痕/缓存失效/GSMarker/死代码)' (#27) from company-desktop-computer/fix/x3dsolid-correctness into main
Reviewed-on: #27
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 15:33:32 +08:00
company-desktop-computer f80ec56189 fix: AcDbX3dSolid 正确性小修(失败留痕/缓存失效/GSMarker/死代码)
- StringToRegion 两个重载在 fixACISFormat 拒绝时打印长度与 SAT 首行,
  原来完全静默,现场只表现为构件消失,无法定位
- ReCreate 统一失效绘制缓存:清 m_pSolidDraw、m_arRegionFaces、
  m_pSubDMeshDraw。原来只有 AddMove/ResetMove/AddRotate/ResetRotate 清,
  TransformBy/SetSolidData/SetOrgPoint 调完 ReCreate 后 Draw3d 仍画旧几何
- GSMarker 改用独立成员 m_nGSMarker,不再借用 m_sszPoint2ds。
  后者在 kExtrude/kLoft/kSweep 里存断面/路径串,SetGSMarkerID 会覆盖成数字,
  导致 ReCreate 静默失败、几何丢失
- 删除 GetDrawSubDMesh 中 return 之后的 28 行不可达代码
- GetDraw2d / ByJson 补注释说明现状
2026-10-21 15:31:27 +08:00
gjm 10d1fc00c8 Merge pull request 'fix: fixACISFormat 改为显式长度入参,修正 npos 与越界读' (#26) from company-desktop-computer/fix/acis-format-bounds into main
Reviewed-on: #26
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 14:20:24 +08:00
company-desktop-computer 6e494aeb9e fix: fixACISFormat 改为显式长度入参,修正 npos 与越界读
- 签名加 size_t nLen,内部用 std::string(pszReg, nLen) 构造,
  不再依赖调用方 buffer 的结尾 '\0';StringToRegion(nLen, char*)
  传入的 m_pSatBuffer 是 new byte[m_nSatLen],没有终止符,原写法会越界读
- 首行解析改用 substr(0, find('\n')),去掉 stringstream 对终止符的依赖
- pos == npos(数据里没有 '#')时返回 false,原写法 pos+1 溢出为 0,
  substr(0,0) 得到空串却仍返回 true,调用方会写出 0 字节文件且无提示
- countOfRecord <= 0 时提前返回 false
2026-10-21 14:15:11 +08:00
gjm f12f2ec6ea Merge pull request 'perf: AcDbX3dSolid 几何改为懒重建' (#25) from company-desktop-computer/refactor/x3dsolid-lazy-recreate into main
Reviewed-on: #25
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 10:15:52 +08:00
company-desktop-computer 81215c8fe1 perf: AcDbX3dSolid 几何改为懒重建
- 新增 m_bNeedCreate 标志与 EnsureCreated():dwgInFields 与拷贝构造
  不再立即 ReCreate,延迟到首次访问几何时重建
- 开图时不再对每个单元逐个走 SAT 临时文件(acisOut/acisIn),
  显著降低开图耗时;Clone 也省掉一次重建
- 所有读取 m_pSolid/m_pSubDMesh 的入口统一走 EnsureCreated:
  GetNative3dSolid / GetDraw3dSolid / GetNativeSubDMesh /
  GetDrawSubDMesh / GetDrawSubDMesh2D / GetCentoridPoint
- GetDrawSubDMesh 补 m_pSubDMesh 空指针保护
- TransformBy 保持原有行为(参数变更后必须重建)
2026-10-21 10:01:17 +08:00
gjm fabaca58df Merge pull request 'refactor: MakeTempSatPath 并入已有的 SAT 相关 namespace' (#24) from company-desktop-computer/chore/coding-convention-anon-namespace into main
Reviewed-on: #24
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 09:26:11 +08:00
company-desktop-computer 3ba658ffc5 refactor: MakeTempSatPath 并入已有的 SAT 相关 namespace
- 不再为单个函数新建 namespace 块:把 SAT 相关的
  find_nth_occurrence_reverse / fixACISFormat 整块上移到 RegionToString 之前,
  MakeTempSatPath 并入同一块,文件内 namespace 块数由 7 回到 6
- 编码规范补充:优先复用已有 namespace,整个文件没有时才新建
2026-10-21 09:24:21 +08:00
company-desktop-computer 27cd7111fb chore: 补充编码规范——文件内私有函数用匿名 namespace
- CODEBUDDY.md 新增「编码规范」章节:只在一个 cpp 内使用的函数
  放在该文件的匿名 namespace{} 中,不用文件级 static
- CoreTools.cpp 的 MakeTempSatPath 按新规范改为匿名 namespace
2026-10-21 09:18:09 +08:00
gjm b8ef6ceb2c Merge pull request 'fix: 临时 SAT 文件名唯一化并修正越界读' (#22) from company-desktop-computer/refactor/x3dsolid-tempfile into main
Reviewed-on: #22
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-21 09:11:17 +08:00
company-desktop-computer 1c8068c8cf fix: 临时 SAT 文件名唯一化并修正越界读
- RegionToString/StringToRegion/BodyToString/StringToFace 的临时文件名
  由固定的 Region1/Region2/Region121/Region212/Region312.sat
  改为 x3d_<PID>_<序号>.sat,多 CAD 实例或多线程并发时不再互相覆盖
- 读取缓冲区补 +1 零字节,修复 new char[len] 无结尾 0 导致的越界读
- 检查 file.Read 短读,失败时释放缓冲并返回空
- 用完即 DeleteFile,不残留临时文件
2026-10-21 09:06:36 +08:00
gjm 90f6c115bf Merge pull request 'docs: 新增 AcDbX3dSolid 重构计划' (#21) from company-desktop-computer/docs/acdbx3dsolid-refactor-plan into main
Reviewed-on: #21
2026-10-20 16:21:30 +08:00
company-desktop-computer e65eba26c8 docs: 新增 AcDbX3dSolid 重构计划
- 现状:m_sScr 用 CString 存 ACIS SAT,UTF-16 导致体积翻倍;临时文件名写死;开图逐单元走临时文件
- 否决方案:存构建曲线、自写 AcDbDwgFiler、持有 AcDbRegion 对象、隐藏 BTR、zlib 压缩
- 采用方案:SAT 的 ASCII 字节流存进 m_pSatBuffer(RegionBlobHeader + 长度前缀)
- 三阶段:临时文件唯一化 -> 懒重建 -> region 数据二进制化
- 兼容策略:读兼容老图纸(m_sScr / 0x00c1 切分),写入统一新格式,不自动迁移
- 公开 CString 接口签名不变,内部转换
- kLoftReducer 纳入统一容器;kEarthWorm/kSHEarthWorm 已废弃但 m_sScr 字段暂不删除
2026-10-20 16:20:48 +08:00
gjm 49530b5d8d Merge pull request 'docs: 移除 ai.memory 目录,统一以 CODEBUDDY.md 为唯一项目说明' (#20) from company-desktop-computer/docs/remove-ai-memory into main
Reviewed-on: #20
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-20 10:43:04 +08:00
company-desktop-computer 482c3c3707 docs: 移除 ai.memory 目录,统一以 CODEBUDDY.md 为唯一项目说明
ai.memory 的概览/构建/模块/约定与 CODEBUDDY.md 完全重复且已开始漂移,
03-worklog 的两条决策在 git log(086bb1c 等)中已有完整 Why。
删除 6 个文件,并清掉 CODEBUDDY.md 中对它的引用。
2026-10-20 10:39:56 +08:00
company-desktop-computer 33d5142a7c docs: 校正 CODEBUDDY.md(编码/构建/架构细节)
- 源码编码由 GBK 更正为 UTF-8 with BOM(实测 5996 个 .cpp/.h 全部带 BOM)
- 补全构建命令(--config Debug/Release)、preset 继承链、C++ 标准切换阈值
- 补全输出目录(加密产物落 <PRODUCT>-<MODE> 子目录)、copyarx 仅 Debug 部署
- 更正授权关系:CoreLibrary 同样双版本,业务模块只链 CoreCommand_BAL_REMOTE
- 补 CMake 封装细节(add_def_file_name/target_set_name_and_suffix/ShsGlobalIncludes)
- 新增批量编译、测试/静态检查(无测试框架)、Git 协作说明
2026-10-20 10:39:15 +08:00
gjm 3b2429f894 Merge pull request 'fix #2 bug' (#19) from company-desktop-computer/fix-gjm/issues-requirement-tracker#2 into main
Reviewed-on: #19
2026-10-20 10:07:18 +08:00
company-desktop-computer 581394622a fix #2 bug
补充了对AecDbGuardBar,AecDbArcStair,AecDbLineStair 3种类型的判断.
2026-10-20 10:06:34 +08:00
gjm 555a977336 Merge pull request 'Update AecDbCamera.cpp' (#18) from company-desktop-computer/Remove-HLR-related-comments-from-AecDbCamera.cpp into main
Reviewed-on: #18
Reviewed-by: gjm <littleoldpan@163.com>
2026-10-20 09:31:06 +08:00