Files
cad-agent/ai.memory/project_dwg_review_agent.md
gjm e25aa0a650 chore(memory): 新增 ai.memory 记忆库
- MEMORY.md 索引 + 分主题记忆文件
- project: 图纸审查 Agent 工作汇总
- feedback: 协作偏好(含 Git 推送规则:refs/for/main 触发 Gitea PR)
- reference: 环境与外部资源
2026-10-09 09:43:21 +08:00

7.0 KiB
Raw Permalink Blame History

name, description, type
name description type
CADProject 图纸审查 Agent 工作 基于 CadProject MCP 框架实现的 AutoCAD 图纸审查工具集(18 工具)与逐图框审查流程的目标、设计决策、交付物与遗留事项 project

CADProject 图纸审查 Agent 工作总结

目标

在既有 MCP(Model Context Protocol)框架 CadProject 之上,构建一个 让 LLM 能够审查 AutoCAD / 中望 CAD 图纸 的 Agent(前提:CAD 进程已打开并加载插件)。

  • 应用场景:建筑 与 工业厂房 图纸。
  • 审图规则:先让 LLM 自主判断;后期再接入整理好的审图规范(建筑标准、工业管道标准等), 让 LLM 参照规范审核。
  • 约束:所有 DLL 工具 全部实现在 cad_mcp_plugins 工程内;编写时 封装常用函数。
  • 命名:源码前缀由 review_ 改为 dwg_review。
  • 额外需求:实现 图框(drawing frame)识别(参考网上 CAD 分图软件实现)。
  • 交付顺序:先出 详细工具规格 → 逐步实现 → 串联 逐图框审查流程。

Why: 用户希望 LLM 能像审图员一样通读整张图纸;先做工具能力,规范接入是二期。 How to apply: 后续新增审查能力时,继续走 c++_dll 后端 + 公共层复用;规范接入时 把规则做成可配置(见 review_checklist.json)而非硬编码。


关键架构决策

读类工具必须用 C++ DLL

三种后端中,只有 c++_dll 能同步返回数据/图片(lisp_inline / lisp_file 是异步的 sendStringToExecute)。审查 Agent 需同步取回图层/实体/文字/标注/截图,故 全部读类工具走 DLL。

返回值信封(关键)

mcp_server.cpp 的 HandleToolsCall 会 resp.update(payload),把工具返回的 JSON 扁平化 进响应。因此工具必须返回 {"result":{"content":[...]}} 信封,而非裸 JSON。 公共层用 makeJsonResult() 统一包裹 15 个数据类工具。

线程模型(不可改动)

TCP 线程只 recv,把请求封装成 TaskData 后 PostMessage(WM_MCP_EXECUTE_TASK) 投递给 主 UI 消息窗口;ExecuteTaskInMainThread() 运行在 CAD 主线程。任何调用 ARX API 的逻辑 必须在主线程派发链中执行。


交付物

新增源码(src/cad_mcp_plugins/)

文件 作用
dwg_review_common.h / .cpp 核心公共层,所有工具依赖它
dwg_review_overview.cpp 图纸概览类工具
dwg_review_query.cpp 实体/文字/标注/块/多段线查询工具
dwg_review_frame.h / .cpp 图框识别(含分图逻辑)
dwg_review_check.cpp 重复实体 / 零长度实体检查
dwg_review_view.cpp 缩放定位 / 高亮工具

cmakelists.txt:SOURCES 新增上述 6 个 .cpp。

公共层 dwg_review_common

  • 参数解析:parseCommonQuery
  • 实体信息:handleOf、layerOf、entityTypeName、entityBBox、blockNameOf
  • 句柄解析:objectIdFromHandle(AcDbHandle(const ACHAR*) + db->getAcDbObjectId())
  • 过滤:wildcardMatch、layerAccepted、openSpace、forEachEntity
  • 结果构造:pageResult、makeError、makeJsonResult
  • JSON 转换:point2Json / point3Json / bboxJson
  • 编码:wstrToUtf8 / acharToUtf8
  • 错误码:kErrBadParam=-32001、kErrNotFound=-32002、kErrNoDocument=-32003、kErrInternal=-32603

图框识别 dwg_review_frame

  • 结构体:DrawingFrame、FrameDetectOptions、FrameKind{Block, Polyline, LineLoop}
  • 函数:detectFrames、framesToJson、frameKindName
  • 三类来源:块参照 / 闭合多段线 / 直线闭环
  • 幅面判定:ISO A 系列(A0–A4)、长宽比 √2、扩展幅面、比例推断猜幅面
  • 辅助:isFrameKeyword、guessSheet、finalizeFrame、acceptable、isClosedRect、collectLineLoops
  • 导出工具 detect_drawing_frames(工厂 CreateDetectDrawingFramesTool)

工具全集(18 个)

概览:get_drawing_info、get_layers、get_layouts 查询:query_entities、get_text_content、get_dimensions、get_block_references、 get_polylines_info、get_entity_detail 图框:detect_drawing_frames 检查:find_duplicate_entities、find_zero_length 视图:zoom_to_entity、zoom_to_window、highlight_entities 已有:zoom_window_normalized、zoom_extents、get_viewport_screenshot

配置

  • src/cad_mcp_frame/cad-mcp-frame.json — 模板,更新为 18 工具; plugin_directory = "."、lisp_directory = "."。
  • bin/Debug-R230/mcp_config.json — 运行时注册枢纽(bin/ 已 gitignore,未入库),内容同上。
  • plugin_directory 相对 .arx 所在目录解析 → 设为 "."。

审查脚本与清单

  • dwg_review_agent.py:逐图框审查流程。MODEL_NAME(默认 deepseek-flash)、 CHECKLIST_PATH(默认 review_checklist.json)。 流程:detect_drawing_frames → 每框 zoom_to_window + query_entities(window)
    • get_text_content(window) + get_viewport_screenshot → LLM 审查 → 汇总。
  • review_checklist.json:可配置审查清单,5 大类 (图层规范性 / 文字 / 标注 / 几何 / 图面整体),每类含 checks[] 与 severity。

构建与验证

  • 通过:R243 Release、R230 Release、R230 Debug。
  • DLL 导出确认 16 个工厂函数(Create*Tool),含 CreateZoomToWindowTool、CreateDetectDrawingFramesTool。
  • 曾误以为缺 .arx:因早期只构建 cad_mcp_plugins,基座是独立目标 cad_mcp_frame,需一并构建。
  • 已校验 JSON 配置(18 工具)、Python 语法、清单 JSON。

修复过的坑

问题 修复
acdbGetObjectId 不接受字符串 新增 objectIdFromHandle()
near 是 Windows 遗留宏 重命名 approxEq
getIntoAsciiBuffer(buf) 缺参数 补为 getIntoAsciiBuffer(buf, 64)
AcDbBlockReference 无 name() 改用 blockNameOf()
AcDbDimension::measurement() 用法 改为 measurement(double&)
ACDB_MODEL_SPACE 宽字符宏 用 acharToUtf8 转换
缺 <algorithm> 补 include
无 dbviewport.h AcDbViewport 在 dbents.h
数据工具返回裸 JSON 用 makeJsonResult() 统一包裹

Git

  • 提交 7310f44 feat(review): 新增图纸审查工具集与逐图框审查流程(13 files, +2881/-59)。
  • 首次 push 被拒(非快进);git fetch 见远程多出 5493c06(envi-code/ 的 PCF→ISO 模块), 两边文件无重叠,git pull --rebase origin main 干净完成,git push origin main 成功。

遗留 / 待办

  1. dwg_review_agent.py 仍硬编码 DeepSeek API Key(已推送远程),建议改为环境变量 DEEPSEEK_API_KEY。
  2. review_checklist.json 可补充「检查方法 / 阈值」;可加跨图框统计工具;可把清单移入 MCP 侧。
  3. 后期整理建筑/工业管道等审图规范并接入,让 LLM 参照规范审核。