二维CAD协作(同步命令)应用场景除了多专业协同外,还可以作为本专业同步三级校审。
毕竟office协作已成为基本,除了性能差点外,其他方面完全替代单机操作。
我们利用office协作代替了很多管理平台——例如人员管理,合同管理,成果登记,交付管理,同理,CAD协作也必将能在更多场景中应用,成为设计师习惯。
持续开发中,目前支持同步命令的有:

1. 已实现同步的命令

  • 绘图命令

    • LINE(直线)
    • CIRCLE(圆)
    • ARC(圆弧)
    • DONUT(DO):圆环
    • ELLIPSE(EL):椭圆
    • RECTANG(矩形)
    • POLYGON(正多边形)
    • SPLINE(样条曲线)
    • POINT(点)
    • MTEXT(多行文本)
    • XLINE(XL):构造线
    • PLINE(PL):多段线
    • MLINE(ML):多线
      REGION(REG):面域
      MTEXT(MT):多行文本
      BLOCK(B):块定义
      INSERT(I):插入块
      WBLOCK(W):定义块文件
      DIVIDE(DIV):定数等分
      MEASURE(ME):定距等分
      BHATCH(H):填充
      TABLE(TB):表格
  • CAD修改命令

    • 实例对象夹点拖曳同步
    • COPY(CO):复制
    • MIRROR(MI):镜像
    • ARRAY(AR):阵列
      OFFSET(O):偏移
    • ROTATE(RO):旋转
    • MOVE(M):移动
    • ERASE(E):删除
      EXPLODE(X):分解
      TRIM(TR):修剪
      EXTEND(EX):延伸
      STRETCH(S):拉伸
      LENGTHEN(LEN):直线拉长
      SCALE(SC):比例缩放
      BREAK(BR):打断CHAMFER(CHA):倒角
      FILLET(F):倒圆角
      PEDIT(PE):多段线编辑
      DDEDIT(ED):修改文本
  • CAD尺寸标注命令

    • DIMLINEAR(DLI):直线标注
    • DIMALIGNED(DAL):对齐标注
      DIMRADIUS(DRA):半径标注
      DIMDIAMETER(DDI):直径标注
      DIMANGULAR(DAN):角度标注
      DIMCENTER(DCE):圆心标注
      DIMORDINATE(DOR):坐标标注
      DIMARC(DAR):弧长标注
      DIMJOGGED(DJO):半径折弯标注
      QLEADER(LE):快速引出标注
      DIMBASELINE(DBA):基线标注
      DIMCONTINUE(DCO):连续标注
      DIMSTYLE(D):标注样式
      DIMEDIT(DED):编辑标注
      DIMOVERRIDE(DOV):替换标注系统变量
      QDIM:快速标注

2. 项目结构

autocad-collab/
├── server/                    # Go服务端 (Beego v2 + GORM + WebSocket)
│   ├── conf/
│   │   └── app.conf          # 服务端配置文件
│   ├── controllers/          # 控制器
│   │   ├── default.go        # 默认控制器
│   │   ├── ws.go             # WebSocket控制器
│   │   ├── commands.go       # 命令API控制器
│   │   └── sessions.go       # 会话API控制器
│   ├── models/               # 数据库模型
│   │   └── models.go         # GORM模型定义
│   ├── routers/              # 路由配置
│   │   └── router.go         # Beego路由
│   ├── services/             # 业务服务
│   │   └── hub.go            # WebSocket连接管理与广播
│   ├── main.go               # 程序入口
│   ├── go.mod                # Go模块定义
│   └── go.sum                # 依赖版本锁
│
└── autocad-plugin/           # AutoCAD插件 (.NET/C#)
    └── AutocadCollabPlugin/
        ├── Properties/
        │   └── AssemblyInfo.cs
        ├── CollabPlugin.cs         # 插件主入口
        ├── WebSocketClient.cs      # WebSocket客户端
        ├── CommandExecutor.cs      # 命令执行器
        ├── CommandInterceptor.cs   # 命令拦截器
        ├── Models.cs               # 数据模型
        └── AutocadCollabPlugin.csproj  # 项目文件

3. 功能特性

  • 实时协作: 多用户同时编辑同一个AutoCAD文件
  • 命令同步: 用户操作通过WebSocket实时广播到所有连接的客户端
  • 会话管理: 基于文件名自动创建或加入协作会话
  • 命令历史: 所有协作命令记录在数据库中

4. 快速开始

4.1 启动服务端

cd server
go run main.go

服务端将在 http://localhost:8080 启动。
服务端API端点:

  • GET / - 服务状态检查
  • GET /ws - WebSocket连接 (需要query参数: session_id, user_id, user_name)
  • GET /api/sessions - 获取所有会话
  • POST /api/sessions - 创建会话 (body: {file_name: “xxx.dwg”})
  • GET /api/sessions/:id - 获取特定会话
  • DELETE /api/sessions/:id - 删除会话
  • GET /api/commands?session_id=xxx - 获取命令历史
  • POST /api/commands - 创建命令

4.2 编译AutoCAD插件

前置条件:

  • AutoCAD 2024 或更高版本(修改.csproj中的HintPath适配你的AutoCAD版本)
  • .NET Framework 4.8 SDK
  • Visual Studio 2022 或更高版本
    编译步骤:
  1. 打开 Visual Studio
  2. 加载 autocad-plugin/AutocadCollabPlugin.sln(需要创建)
  3. 根据你的AutoCAD安装路径修改 .csproj 文件中的DLL引用路径:
    <HintPath>C:\Program Files\Autodesk\AutoCAD 2024\AcCoreMgd.dll</HintPath>
    <HintPath>C:\Program Files\Autodesk\AutoCAD 2024\AcMgd.dll</HintPath>
    <HintPath>C:\Program Files\Autodesk\AutoCAD 20224\AcDbMgd.dll</HintPath>
  4. 编译生成 ARX
    加载插件到AutoCAD:
  5. 启动AutoCAD
  6. 输入命令 APPLOAD
  7. 选择生成的 AcadCmdIntercept.arx 文件
  8. 信任该插件

4.3 使用插件

插件命令:

命令 功能
COLLABSTART 启动协作,输入用户名后自动加入会话
COLLABSTOP 停止协作
COLLABSTATUS 查看当前协作状态

协作流程:

  1. 用户A在AutoCAD中打开要协作的dwg文件(需要先保存)
  2. 输入 COLLABSTART,输入用户名(如 “UserA”)
  3. 用户B在另一台机器(或另一AutoCAD实例)打开同一个文件名的dwg文件
  4. 用户B也输入 COLLABSTART,输入用户名(如 “UserB”)
  5. 系统自动识别相同文件名并加入同一协作会话
  6. 用户A绘制直线、圆等图形,用户B的AutoCAD中会自动同步显示

5. 技术栈

服务端

  • 语言: Go 1.21+
  • Web框架: Beego v2
  • ORM: GORM
  • 数据库: SQLite(可替换为MySQL/PostgreSQL)
  • 实时通信: WebSocket (gorilla/websocket)

    客户端

  • 语言: C++ / .NET Framework 4.8
  • 平台: AutoCAD .NET API
  • WebSocket: WebSocketSharp
  • JSON序列化: Newtonsoft.Json

    配置说明

    服务端配置 (server/conf/app.conf)

    appname = autocad-collab
    httpport = 8080
    runmode = dev
    db_type = sqlite3
    db_path = ./data/collab.db

    客户端配置

    CollabPlugin.cs 中修改服务端地址:
    private static string _serverUrl = "ws://your-server-ip:8080";
    private static string _httpServerUrl = "http://your-server-ip:8080";

    数据模型

    会话 (CollabSession)

  • ID: 会话唯一标识
  • FileName: 关联的AutoCAD文件名
  • CreatedAt/UpdatedAt: 时间戳

    命令 (Command)

  • ID: 命令ID
  • SessionID: 所属会话ID
  • UserID: 操作用户ID
  • CommandName: 命令名称(如LINE, CIRCLE)
  • CommandData: 命令参数(JSON格式)
  • Timestamp: 执行时间

    消息协议

    WebSocket消息格式(JSON):
    {
    "type": "command",
    "session_id": "uuid",
    "user_id": "uuid",
    "user_name": "UserA",
    "command_name": "line",
    "command_data": {
      "handle": "2F1",
      "startPoint": { "x": 0, "y": 0, "z": 0 },
      "endPoint": { "x": 100, "y": 100, "z": 0 }
    },
    "timestamp": "2024-01-01T00:00:00Z"
    }

    注意事项

  1. 文件一致性: 协作前确保所有用户使用相同的基础dwg文件
  2. 对象Handle: 修改操作(MOVE/ERASE/ROTATE/SCALE)依赖对象Handle,不同文件可能Handle不同
  3. 冲突处理: 目前无自动冲突解决机制,建议用户分工协作不同区域
  4. 网络要求: 服务端需要可被所有客户端访问

    后续改进建议

  • 支持更多AutoCAD命令(HATCH等)
  • 添加操作撤销/重做支持
  • 实现冲突检测和自动解决
  • 添加用户光标位置实时显示
  • 添加权限管理
  • 实现文件自动合并功能

这个计划了很久,就像我那个go-mapus地图协作一样,自己觉得挺有意思的一些尝试,然后也就会路线出现不少同种类的实现方式,越多越好,很多人做才会更加趋熟。

最开始TRAE solo用C#写,花了2个晚上跑通了几个CAD绘图命令的协作同步,后面进入到编辑命令组开发时,说C#无法获取用户鼠标操作反馈……那我问它C++能否做到,它查询一番,说可以,然后为了减少开发量,就沿用C#调用C++的方案,因为舍不得已经编写和调试了的C#嘛,但是CAD要加载2个文件,我感觉麻烦,还是下决心直接全部改为C++来开发了。这个仅编译为ARX,添加到加载启动组里,效果也最好。
bilibili视频展示autocad2024协作平台开发

autocad2024安装到win11上必须鼠标右键单击setup.exe后弹框里选择以管理员身份运行

作者:秦晓川  创建时间:2026-05-21 09:19
最后编辑:秦晓川  更新时间:2026-06-05 00:13
上一篇:
下一篇: