Files
envi-code/SourceCode
company-desktop 9e5f093ecb feat: cad_mcp_aec 支持造型(PL_DTYG)与异形构筑物(PL_YXGZ)
两者是同一套机制的两个入口:往 AecDbBDPipeBase 派生实体(墙/板/梁/柱/堰/异形构筑物)
上叠 AcDbX3dSolid,靠 AecDbBDPipeBase::AddX3dPart(part, kBoolUnite/kBoolSubtract) 做并/挖。

新工具(cad_mcp_aec/aec_mcp_shape_tools.cpp,5 个):
- add_aec_multipart:新建空的 AecDbMultiPartEntity(PL_YXGZ)。截面/基准线照命令用
  1mm 占位圆 + 1mm 竖线,SetOrg/SetXDir/YDir/ZDir,图层 LAY_YGDT。
- add_aec_shape:向 AecDbBDPipeBase 加一个造型(PL_DTYG)——建 AcDbX3dSolid、
  包一层 AecDbX3dPart(DTYG_TYPE + BIM 名称/颜色/统计类型 + SetAxis),再 AddX3dPart。
  支持 box/cylinder/cone/pyramid/sphere/drum/wedge 七种基本体(参数顺序照抄命令的
  makeSolid),mode=unite/subtract,返回 part_guid。
- list_aec_shapes / update_aec_shape / delete_aec_shape:列出、改造型、删造型。

三处与命令不同的处理(都是坑):
1. Create() 传的是**中心**(立方体 +H/2、球体 +R、球台 +len2),命令的 ptOrg 却是
   用户拾取的**插入点**。工具对外统一插入点,部件里多记一条 DTYG_INS;老数据没有这条
   就按中心反推,否则 update 会按 H/2 一路漂。
2. 命令的"修改"是 pPart->RemoveAt(0) + AddX3dSolid,只能改尺寸;工具改成整块部件重建
   (RemoveX3dPart + AddX3dPart(新, mode)),于是尺寸/插入点/方向/并差模式/名字/颜色/
   造型种类都能改。
3. 改完必须重建 3D 缓存:命令用 acedPostCommand("regen "),工具调母体 ReCreateDraw3d()
   + recordGraphicsModified,否则母体包围盒直接变空。

mcp_config.json 一并补 5 条(含 backend: c++_dll + factory_function,缺了不会被注册)。

实测(R230 Debug,pcf_1.dwg):
- 墙(6000x3000 厚300) 在 z=3000 加 800x300x1000 立方体 → 母体 3D 包围盒 z 0~3000 变 0~4000;
- 同墙加 cylinder + subtract 当预留洞,list_aec_shapes 读回 type/mode/position/params;
- 板 + pyramid(挖) + sphere(并) 正常;
- add_aec_multipart → 加 1000x1000x1500 立方体 → 通用包围盒 (39500,29500)~(40500,30500),图层 YGDT;
- 改造型:height 1200→2400、radius 300→450 且 subtract→unite、改名均生效;
  delete_aec_shape 单删/全删(removed=N)正常。
2026-10-30 21:00:54 +08:00
..
2026-09-28 15:38:57 +08:00