Skip to content

CAD Edit Service(services/cad) ​

services/cad/ 是 Python FastAPI 服务,基于 ezdxf,默认端口 8200。它与 services/ifc 同构:脚本沙箱、10 步暂存、大版本快照、定位、标量改写、diff 一应俱全,另外负责发布 render.json 给前端画布。和 ifc 侧的差异是模型文件为 uploads/{id}.dxf,且没有内存实体缓存和直改时代的遗留概念。

运行与配置 ​

bash
cd services/cad
uv sync
VIEWER_DATA_DIR="$(cd ../data && pwd)" uv run uvicorn app.main:app --port 8200
环境变量默认说明
VIEWER_DATA_DIR../data与 server 和 edit-service 指向同一目录,必须一致
AIDXF_FLOWS_DIRflowsDXF 沙箱契约层目录
CAD_SERVICE_PORT8200监听端口

沙箱环境变量与 ifc 侧同名同义,见沙箱执行环境。

端点 ​

模型 id 匹配 ^m_[0-9a-f]{16}$。脚本编辑面和 IFC 侧是同一套:

端点语义
GET/PUT /models/{id}/script · script/params · script/undo|redo|discard脚本读取、暂存、暂存导航
POST /models/{id}/script/run · save · rollback试运行、大版本保存、回滚。成功后原子发布 render.json
GET /models/{id}/scripts · script/diff · script/staging/diff版本列表与各层 diff
GET /models/{id}/script/locate?key=按实体 key 定位脚本调用点,key 存在 DXF 的 XDATA 扩展数据里
POST /models/{id}/script/edit-calllibcst 标量改写,仅直连可用
GET /models/{id}/versions · POST /models/{id}/diff版本列表、实体级语义 diff
GET /models/{id}/render.json渲染载荷。已发布时直接读文件,未发布时即时生成

Go server 按模型 kind 分流:dxf 模型的请求代理到 8200,对外路径不变。render.json 另外经 GET /v1/models/{id}/render.json 只读直挂,schema 见 REST API。

实现要点 ​

  • 七个领域模块来自共享包 aibim_sandbox,和 services/ifc 同一事实源,本服务只留薄适配。
  • app/dxf_diffing.py 做实体级 diff;app/dxf_materialize.py 按需重建历史版本;app/render.py 把 DXF 转成 render.json,坐标保持原始 DXF 坐标系。
  • 契约层在 services/cad/flows/,提供脚本校验和确定性 key。

测试 ​

bash
cd services/cad
uv run --group dev pytest

Apache-2.0 · xeokit AGPL 注意事项见项目介绍