二维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 或更高版本
编译步骤:
- 打开 Visual Studio
- 加载
autocad-plugin/AutocadCollabPlugin.sln(需要创建) - 根据你的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> - 编译生成 ARX
加载插件到AutoCAD: - 启动AutoCAD
- 输入命令
APPLOAD - 选择生成的
AcadCmdIntercept.arx文件 - 信任该插件
4.3 使用插件
插件命令:
| 命令 | 功能 |
|---|---|
| COLLABSTART | 启动协作,输入用户名后自动加入会话 |
| COLLABSTOP | 停止协作 |
| COLLABSTATUS | 查看当前协作状态 |
协作流程:
- 用户A在AutoCAD中打开要协作的dwg文件(需要先保存)
- 输入
COLLABSTART,输入用户名(如 “UserA”) - 用户B在另一台机器(或另一AutoCAD实例)打开同一个文件名的dwg文件
- 用户B也输入
COLLABSTART,输入用户名(如 “UserB”) - 系统自动识别相同文件名并加入同一协作会话
- 用户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" }注意事项
- 文件一致性: 协作前确保所有用户使用相同的基础dwg文件
- 对象Handle: 修改操作(MOVE/ERASE/ROTATE/SCALE)依赖对象Handle,不同文件可能Handle不同
- 冲突处理: 目前无自动冲突解决机制,建议用户分工协作不同区域
- 网络要求: 服务端需要可被所有客户端访问
后续改进建议
- 支持更多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
最后编辑:秦晓川 更新时间:2026-06-05 00:13