第六章:CAD 技能详解
CAD(计算机辅助设计)是 OpenGIS-Skills 中第二大技能分类,共收录 19 个技能。与 GIS 领域侧重空间数据处理不同,CAD 类技能覆盖了从底层几何内核到上层的建筑设计应用、从 2D 制图到 BIM 信息模型、从多平台桌面应用到 Web 端轻量方案的完整链条。无论你是在开发一个几何算法库,还是在做 AutoCAD 插件二次开发,或是构建一套在线 3D 查看器,本章都能帮你快速定位到最匹配的技能。
本章按工具的技术层次和应用场景,将 19 个技能划分为七个子领域:几何内核与算法、参数化 3D CAD、2D 制图、PCB/EDA、BIM 与 IFC、.NET AutoCAD 二次开发、数据交换与可视化。每个技能都会给出核心定位、适用场景和关键 API 或代码示例,让你在面对具体任务时能够快速决策”我应该加载哪个技能”。
6.1 CAD 技能全景
下表给出了全部 19 个 CAD 技能的快速索引。你可以按”分类”列快速定位到感兴趣的子领域,也可以按”等级”列判断技能的技术深度——”内核”级最深,”框架/应用”级居中,”插件”级最贴业务。
| 分类 | 技能 | 等级 | 平台/语言 | 说明 |
|---|---|---|---|---|
| 几何内核 | occt |
内核 | C++/Python | Open CASCADE Technology,工业级三维几何内核 |
| 几何算法 | clipper2 |
算法 | C++/C#/Python/Delphi | 高性能 2D 多边形布尔运算与偏移库 |
| 几何算法 | clipper1 |
算法 | 多语言 | Clipper 1.x 旧版,部分场景仍在使用 |
| 参数化 3D | freecad |
应用 | C++/Python | 开源参数化 3D CAD/BIM 平台,10+ 工作台 |
| 脚本 3D | openscad |
DSL | 自研语言 | 声明式 CSG 脚本建模语言,适合程序化生成 |
| 脚本 3D | cadquery |
API | Python | 基于 OCCT 的 Python 链式 API 参数化建模 |
| 约束 3D | solvespace |
应用 | C++/CMake | 轻量级约束求解器,35+ 约束类型 |
| Web3D | chili3d |
库 | TypeScript/WASM | 纯 Web 端 3D CAD(OCCT.js + Three.js) |
| 2D 制图 | qcad |
应用 | C++/JavaScript | 开源 2D CAD 编辑器,ECMAScript 扩展系统 |
| 2D 制图 | librecad |
应用 | C++/Qt | 开源 2D CAD,支持命令行批处理 |
| Web2D | lightcad |
框架 | C#/TypeScript | 轻量 Web 2D CAD 框架,基于 Fabric.js |
| PCB/EDA | kicad |
应用 | C++/Python | 开源 PCB 设计套件,原理图→布局→生产输出 |
| BIM/IFC | xbim |
库 | .NET (C#) | BIM/IFC 工具集,强类型 IFC 实体模型 |
| AutoCAD.NET | ifoxcad |
框架 | .NET (C#) | AutoCAD 二次开发框架,多 CAD 兼容 |
| AutoCAD.NET | fy_layout |
插件 | .NET (C#) | 基于 LightCAD 的施工场地布置插件 |
| AutoCAD.NET | lightningcad |
插件 | .NET (C#) | 建筑围护深化设计插件 |
| AutoCAD.NET | tongwen |
插件 | .NET (C#) | 工程图纸多语言无损翻译套件 |
| 数据交换 | libredwg |
库 | C/Python | DWG 文件读写库,R13~2021 格式支持 |
| 可视化 | astral3d |
框架 | JS/TS | 工业级 Web 3D 可视化平台,30+ 格式支持 |
6.2 几何内核与算法
这一节涵盖整个 CAD 技能栈的最底层——几何计算基础设施。occt 提供工业级的 3D 实体建模能力,clipper2 和 clipper1 负责 2D 矢量边界的布尔运算。如果你需要在自己的程序中嵌入几何计算能力而不是使用现成的 CAD 软件,这三个技能是你的首选。
6.2.1 occt——Open CASCADE Technology
定位:occt 是整个 opengis-skills CAD 分类中等级最高的技能(标记为”内核”)。Open CASCADE Technology(OCCT)是一个工业级 C++ 三维几何建模内核,同时也是 FreeCAD、CadQuery、Chili3D、Xbim 等众多上层 CAD/BIM 工具的底层引擎。掌握 occt 等同于掌握了 CAD 软件开发的”发动机”。
核心概念:
OCCT 围绕三个支柱构建:建模数据(几何+拓扑)、建模算法(布尔运算、圆角、扫掠等)和数据交换(STEP/IGES/STL 等格式)。
(1) B-Rep 边界表示(Boundary Representation)
OCCT 采用 B-Rep 作为核心几何表达方式。B-Rep 通过边界来定义实体:一个实体由外壳(Shell)包围,外壳由面(Face)组成,面由边界环(Wire)界定,边界环由边(Edge)构成,每条边有起点和终点两个顶点(Vertex)。
(2) 拓扑形状(TopoDS_Shape 层次结构)
OCCT 的拓扑类全部隶属于 TopoDS 包,继承关系如下:
TopoDS_Shape(基类,所有拓扑对象)
├── TopoDS_Vertex(顶点)
├── TopoDS_Edge(边)
├── TopoDS_Wire(线框/环)
├── TopoDS_Face(面)
├── TopoDS_Shell(壳)
├── TopoDS_Solid(实体)
├── TopoDS_CompSolid(复合实体)
└── TopoDS_Compound(复合体)
常用的类型判断与转换宏:BRep_Tool::Surface(face) 获取曲面、TopExp_Explorer 遍历子形状、BRepGProp 计算体积/面积/质心。
(3) 布尔运算(BRepAlgoAPI_Fuse/Common/Cut)
OCCT 的布尔运算统一在 BRepAlgoAPI 包下:
- Fuse(并集):
BRepAlgoAPI_Fuse(shape1, shape2),融合两个形体 - Common(交集):
BRepAlgoAPI_Common(shape1, shape2),取两者的公共部分 - Cut(差集):
BRepAlgoAPI_Cut(shape1, shape2),从 shape1 中挖掉与 shape2 重叠的部分 - Section(截面):
BRepAlgoAPI_Section(shape1, shape2),计算两形体相交的线
所有布尔运算类均继承自 BRepBuilderAPI_MakeShape,调用 Shape() 方法获取结果。
(4) STEP/IGES I/O
OCCT 提供了两种主要的 CAD 中性格式读写能力:
- STEP 读写:
STEPControl_Reader/STEPControl_Writer。STEP(ISO 10303,通常为.stp/.step文件)是工业界最通用的几何数据交换标准,支持实体、曲面、装配关系等完整信息。 - IGES 读写:
IGESControl_Reader/IGESControl_Writer。IGES(.igs/.iges)是较早的标准,主要面向曲面和线框,不保留实体特征历史。
(5) 网格生成(BRepMesh_IncrementalMesh)
BRepMesh_IncrementalMesh 将 B-Rep 几何离散化为三角网格,是数据导出为 STL、可视化、FEM 分析等场景的必要步骤。通过设置线性偏差(Deflection)和角度偏差(Angle)参数控制离散精度。
(6) 可视化(AIS_Shape 交互式对象)
OCCT 自带的 3D 可视化框架由 AIS(Application Interactive Services)、V3d_Viewer、Graphic3d 等模块组成。AIS_Shape 是连接几何与显示的桥梁——创建一个 AIS_Shape 对象并将 TopoDS_Shape 关联到它,就可以把几何体绘制到 3D 视图中,并支持高亮、选择、拖拽等交互。
典型应用场景:
- 开发自有几何建模软件的内核
- 在 CAD 数据格式转换服务中嵌入 OCCT 作为几何引擎(STEP→STL、STEP→glTF 等)
- 使用 pythonOCC(OCCT 的 Python 绑定)做自动化几何处理脚本
- FreeCAD 的 Part 模块、CadQuery 的建模操作均直接调用 OCCT
示例代码——创建并导出立方体:
#include <BRepPrimAPI_MakeBox.hxx>
#include <STEPControl_Writer.hxx>
#include <BRepMesh_IncrementalMesh.hxx>
#include <StlAPI_Writer.hxx>
// 创建一个 10x10x10 的立方体
TopoDS_Shape box = BRepPrimAPI_MakeBox(10.0, 10.0, 10.0).Shape();
// 导出为 STEP
STEPControl_Writer stepWriter;
stepWriter.Transfer(box, STEPControl_AsIs);
stepWriter.Write("box.stp");
// 导出为 STL
BRepMesh_IncrementalMesh(box, 0.1);
StlAPI_Writer stlWriter;
stlWriter.Write(box, "box.stl");
6.2.2 clipper2——高性能 2D 多边形布尔运算
定位:Clipper2 是由 Angus Johnson 开发的 2D 多边形布尔运算库——Clipper 的完全重写版本,原生支持 C++、C#、Python 和 Delphi。它专注于 2D 平面上的精确几何运算,是 CAD/CAM 刀路计算、GIS 矢量叠加分析、激光切割排样等场景的核心算法库。
核心特性:
(1) 64 位整数坐标精度
Clipper2 内部所有几何计算均使用 64 位整数(int64_t / long),而非浮点数。这从根本上消除了浮点运算中常见的舍入误差和拓扑不一致问题。但代价是:用户需要将实际坐标值通过缩放因子(如 1 单位 = 1000 内部单位)转换为整数。Clipper2 提供了 PathsD 类型自动处理浮点数到整数的转换。
(2) 布尔运算
四个标准布尔运算均通过 Clipper 类的方法完成:
- Intersection(交集):
Clipper64.Intersect(pathsA, pathsB, fillRule) - Union(并集):
Clipper64.Union(paths, fillRule) - Difference(差集):
Clipper64.Difference(pathsA, pathsB, fillRule) - XOR(异或):
Clipper64.Xor(pathsA, pathsB, fillRule)
FillRule(填充规则)支持 EvenOdd(奇偶填充)和 NonZero(非零环绕)两种,决定自交多边形内部的”洞”如何判定。
(3) 多边形偏移(ClipperOffset)
ClipperOffset 类实现多边形的内外膨胀/收缩(Offset / Inflate),核心参数:
- 偏移距离(delta):正值向外膨胀,负值向内收缩
- 连接类型(JoinType):
Square(方角)、Round(圆角,可设精度)、Miter(斜角,可设限值) - 端点类型(EndType):
Polygon(闭合)、Joined(直线末端)、Butt/Square/Round(开放路径端点样式)
(4) Minkowski 运算
Minkowski.Sum(pattern, path, isClosed):闵可夫斯基和Minkowski.Diff(pattern, path, isClosed):闵可夫斯基差
这些运算在机器人路径规划(计算 C-space 障碍物)、碰撞检测、形态学膨胀/腐蚀等场景下非常关键。
代码示例——C# 计算两个多边形的交集:
using Clipper2Lib;
// 定义多边形 A(三角形)
Path64 polyA = Clipper.MakePath(new long[] { 0, 0, 100, 0, 50, 100 });
// 定义多边形 B(矩形)
Path64 polyB = Clipper.MakePath(new long[] { 25, 25, 75, 25, 75, 125, 25, 125 });
// 计算交集
Paths64 solution = Clipper.Intersect(
new Paths64 { polyA },
new Paths64 { polyB },
FillRule.NonZero
);
// solution 中即为两个多边形的重叠区域
何时使用 Clipper2 vs OCCT:
| 对比维度 | Clipper2 | OCCT |
|---|---|---|
| 维度 | 2D | 2D + 3D |
| 坐标精度 | 64位整数(精确) | 双精度浮点 |
| 几何类型 | 多边形/路径 | B-Rep 实体/曲面/线框 |
| 性能 | 极高(专为 2D 优化) | 中等(3D 通用) |
| 语言绑定 | C++/C#/Python/Delphi | C++(pythonOCC 非官方) |
| 典型场景 | GIS 面叠加、CAM 刀路、排样 | CAD 建模、BIM 几何分析 |
6.2.3 clipper1——旧版 Clipper
定位:clipper1 是 Clipper 库的 1.x 版本。虽然 Clipper2 在性能和 API 设计上全面优于 Clipper1,但部分存量项目仍依赖 Clipper1 的特定 API 行为,OpenGIS-Skills 因此保留了 clipper1 作为独立技能。
核心差异:
| 对比维度 | Clipper 1.x | Clipper 2.x |
|---|---|---|
| 命名空间 | ClipperLib |
Clipper2Lib |
| 布尔运算类 | Clipper |
Clipper64 / ClipperD |
| 路径类型 | List<IntPoint> |
Path64 / PathD |
| 多路径类型 | List<List<IntPoint>> |
Paths64 / PathsD |
| 偏移类 | ClipperOffset |
ClipperOffset(同名称,不同 API) |
| 填充规则 | PolyFillType 枚举 |
FillRule 枚举 |
| 缩放转换 | 手动 * scalingFactor |
ClipperD 自动处理 |
| Minkowski | 无内置 | Minkowski.Sum/Diff |
迁移指南:从 Clipper1 迁移到 Clipper2 的关键步骤:
- 将所有
List<IntPoint>替换为Path64,List<List<IntPoint>>替换为Paths64 - 将
Clipper.Execute(ClipType, PolyFillType)替换为Clipper64.Intersect/Union/Difference/Xor(paths, fillRule) - 浮点输入改用
PathD/PathsD,库自动完成缩放转换 - 偏移操作的方法签名从
ClipperOffset.AddPath(path, joinType, endType)改为ClipperOffset.AddPath(path, joinType, endType),但返回值从List<List>` 统一为 `Paths64`
何时仍使用 clipper1:只有在维护老项目、团队尚未完成迁移、或依赖的第三方库仍绑定 clipper1 API 时才需要。新项目应直接选用 clipper2。
6.3 参数化 3D CAD
本节涵盖 5 个面向 3D 参数化建模的技能。它们代表了几种截然不同的建模哲学:FreeCAD 是经典的特征式参数化建模(点→草图→特征→装配),OpenSCAD 是声明式 CSG 脚本建模,CadQuery 是链式 API 编程建模,SolveSpace 是约束驱动建模,Chili3D 则是纯 Web 端的在线 CAD。
6.3.1 freecad——开源参数化 3D CAD/BIM
定位:FreeCAD 是一个开源、跨平台、以参数化建模为核心的三维 CAD/CAE/CAM 平台。它基于 OpenCASCADE 7.8.1 几何内核,使用 Coin3D 做 3D 渲染,Qt 6.x 做 GUI,内置 Python 3.11 解释器。截至本教程编写时的最新稳定版本为 1.1.3(2026 年 7 月)。FreeCAD 的技能文件是 CAD 分类中内容最深厚的之一,覆盖了从用户操作到 Python 脚本、从工作台开发到底层 OCCT 调用的全部层次。
核心概念——工作台系统(Workbench):
FreeCAD 的界面组织方式不同于商业 CAD 的单一”模式”切换,而是采用开放式的工作台(Workbench)系统。用户在不同工作台之间切换,获得该领域的一组专用工具。所有工作台共享同一个文档对象模型,切换工作台不会丢失数据。以下是核心工作台及其功能定位:
| 工作台 | 核心功能 | 典型操作 |
|---|---|---|
| Sketcher | 2D 草图约束绘制 | 画线/弧/圆,施加距离/角度/平行/垂直/相切约束 |
| Part | CSG 建模(基本体+布尔运算) | 创建立方体/球/圆柱/圆锥,Fuse/Cut/Common,从脚本构建底级形状 |
| PartDesign | 基于特征的参数化建模 | Sketch→Pad(拉伸)/Pocket(挖槽)/Revolution(旋转)→Fillet(圆角)/Chamfer(倒角) |
| Assembly | 装配体(1.1.0 内置) | Joint 约束系统(Fixed/Revolute/Slider/Cylindrical 等),在同一文档中组织零件装配 |
| Arch/BIM | 建筑信息模型 | 墙/楼板/柱/窗/门/屋顶构建,IFC 导入导出 |
| CAM | 数控加工路径 | 创建 Job(作业)→定义刀具→生成铣削/钻孔路径→后处理输出 G-code |
| FEM | 有限元分析 | 定义材料(Material)→网格划分(FEM Mesh)→施加约束和载荷→运行 CalculiX 求解器→查看结果 |
| TechDraw | 工程图纸生成 | 从 3D 模型投影生成 2D 视图、剖面、尺寸标注、公差标注 |
| Draft | 二维辅助绘图 | 直线/弧线/矩形/多边形绘制,捕捉系统,阵列复制 |
| Spreadsheet | 参数表 | 存储设计参数(如长度、厚度),其他对象通过表达式引用 |
Python 脚本 API:
FreeCAD 从设计之初就将 Python 可编程性作为一等特性。所有 GUI 命令对应的 Python 代码均可在控制台中查看和执行。以下是一个完整的 Python 脚本示例——用 PartDesign 工作台创建一个带孔的法兰:
import FreeCAD as App
import PartDesign as PD
import Sketcher
# 创建新文档
doc = App.newDocument("Flange")
# 步骤1:创建一个圆柱底座(Pad)
body = doc.addObject("PartDesign::Body", "Body")
# 在 XZ 平面上创建草图
sketch = doc.addObject("Sketcher::SketchObject", "Sketch")
body.addObject(sketch)
sketch.Support = (doc.getObject("XZ_Plane"), [""])
sketch.MapMode = "FlatFace"
# 画一个圆并施加半径约束
sketch.addGeometry(Part.Circle(App.Vector(0, 0, 0), App.Vector(0, 0, 1), 50))
sketch.addConstraint(Sketcher.Constraint("Radius", 0, 50))
# 将草图拉伸 20mm 高度
pad = doc.addObject("PartDesign::Pad", "Pad")
body.addObject(pad)
pad.Profile = sketch
pad.Length = 20
# 步骤2:打孔——在底座上表面创建草图,画小圆,做 Pocket
# ...(类似流程)
doc.recompute()
无头模式(Headless):FreeCAD 支持在无 GUI 环境下作为 Python 模块导入和运行,这对服务器端批量处理和 CI 流水线非常有用:
import FreeCAD as App
App.Console.PrintMessage("Running in headless mode\n")
# 执行建模或格式转换逻辑
文件格式:
- FCStd:FreeCAD 原生格式(ZIP 包 + XML 文档结构 + BREP 几何数据)
- 导入:STEP、IGES、STL、OBJ、DXF、SVG
- 导出:STEP、IGES、STL、OBJ、DXF、SVG、IFC、glTF、PDF(通过 TechDraw)
6.3.2 openscad——声明式 CSG 脚本建模
定位:OpenSCAD 是一款独特的 3D CAD 建模工具——它不是交互式的,而是基于脚本声明式地描述几何体。用户用 OpenSCAD 自有的函数式语言编写建模脚本,OpenSCAD 解释执行这个脚本,通过 CSG(Constructive Solid Geometry)构建实体并渲染预览。
核心理念:与 FreeCAD 的”点→草图→特征”不同,OpenSCAD 的哲学是”描述你想要什么,而不是如何构建它“。这使 OpenSCAD 天然适合程序员思维、精确的参数化设计和程序化生成(如齿轮、螺丝、散热器格栅等有数学规律的零件)。
核心语法:
// 基本体
cube([10, 20, 5]); // 长方体 [x, y, z]
sphere(r=10, $fn=100); // 球体($fn 控制面数精度)
cylinder(h=20, r1=5, r2=10); // 圆柱(可渐缩)
polyhedron(points, faces); // 自定义多面体
// 变换
translate([x, y, z]) { ... } // 平移
rotate([ax, ay, az]) { ... } // 旋转
scale([sx, sy, sz]) { ... } // 缩放
mirror([nx, ny, nz]) { ... } // 镜像
resize([nx, ny, nz]) { ... } // 缩放到目标尺寸
color("red") { ... } // 着色(仅预览)
// 布尔运算
union() { A; B; } // 并集
difference() { A; B; C; } // 差集(A - B - C)
intersection() { A; B; } // 交集
// 模块化
module myPart(size) {
cube(size);
}
myPart([10, 20, 5]);
// 控制结构
for (i = [0:5]) { ... } // 循环
if (condition) { ... } // 条件
children([index]); // 子节点引用
// 函数
function f(x) = x * 2 + 1;
echo(f(5)); // 输出调试
标准库与扩展生态:
- MCAD:机械零件库(螺丝、螺母、轴承、齿轮等标准件)
- BOSL(Belfry OpenSCAD Library):功能极丰富的通用建模库,提供了更高级的变换、形状、掩模、螺纹等
- wing-tip:机翼剖面生成模块
命令行导出:
# 直接导出 STL
openscad -o output.stl input.scad
# 导出 PNG 预览图
openscad -o preview.png --imgsize=800,600 input.scad
# 导出 DXF(纯 2D 投影)
openscad -o output.dxf input.scad
与 FreeCAD/CadQuery 的选择:OpenSCAD 适合纯程序员的参数化几何(脚本体积小、逻辑清晰、可被版本控制完美管理),但不适合需要曲面操作(NURBS)、STEP 互操作、约束求解和交互式编辑的场景——那些情况应选 FreeCAD 或 CadQuery。
6.3.3 cadquery——Python 链式 API 参数化 3D 建模
定位:CadQuery 是一个基于 OCCT(通过 OCP 绑定)的 Python 参数化 3D CAD 建模库,核心理念是”用链式 API 写出可读性极高的建模代码“。如果你觉得 OpenSCAD 的语法过于局限、FreeCAD 的 Python API 过于冗长,CadQuery 提供的”流畅接口(Fluent API)”很可能就是你想要的。
核心工作流:
CadQuery 的建模流程围绕 Workplane(工作平面) 概念展开:
- 创建一个
Workplane对象(默认在 XY 平面上) - 在其上绘制 2D 轮廓(矩形、圆、多边形或组合形状)
- 将 2D 轮廓沿 Z 轴拉伸(
extrude)或旋转(revolve),得到 3D 实体 - 选择实体的特定面,在该面上创建新的
Workplane - 在新工作平面上继续操作(打孔、拉伸凸台、圆角等)
这种”在面上创建工作面→2D→3D→选面→继续“的模式极其直观,非常接近机械设计工程师的思维过程。
链式 API 示例:
import cadquery as cq
# 一个带孔的支架:底座 + 立板 + 加强筋 + 圆角 + 安装孔
result = (
cq.Workplane("XY")
# 底座:矩形拉伸
.rect(60, 40).extrude(10)
# 选底座上表面,创建立板
.faces(">Z").workplane()
.rect(10, 30).extrude(40)
# 选底座上表面和立板侧面,创建加强筋
.faces(">Z").workplane()
.transformed(offset=cq.Vector(0, 15, 0))
.rect(8, 8).extrude(35)
# 给底座四角打安装孔
.faces(">Z[0]").workplane()
.rect(50, 30, forConstruction=True)
.vertices().hole(3, 10)
# 给立板顶部倒圆角
.faces(">Z").edges("|Y").fillet(2)
)
核心机制详解:
(1) 选择器系统(Selectors)
这是 CadQuery 最强大的特性之一。选择器用简洁的字符串语法精确过滤面、边或顶点:
| 选择器 | 含义 |
|---|---|
faces(">Z") |
法线朝 +Z 方向的面 |
faces(">Z[0]") |
法线朝 +Z 的面中 Z 坐标最大的那个 |
faces("<Z") |
法线朝 -Z 的面 |
faces("%Plane") |
平行于指定平面的面 |
edges("|Y") |
平行于 Y 轴的边 |
edges(">X") |
中点 X 坐标大于原点的边 |
vertices() |
选特定位置的点(常与 forConstruction 配合) |
faces().edges() |
先选面再取边,逐步细化 |
(2) CQGI (CadQuery Gateway Interface)
CQGI 是 CadQuery 的命令行交互界面,支持在 VS Code / Jupyter 中实时预览模型。配合 cq-editor(图形化前端),可以实现”写代码→即时看 3D 结果”的开发体验。
(3) 布尔运算和倒角
cq.Workplane 对象可直接进行布尔运算和特征操作:
a = cq.Workplane("XY").box(10, 10, 10)
b = cq.Workplane("XY").sphere(6)
union_result = a.union(b) # 并集
cut_result = a.cut(b) # 差集
common_result = a.intersect(b) # 交集
# 倒角和圆角
part = cq.Workplane("XY").box(20, 20, 10)
part = part.faces(">Z").chamfer(2) # 上表面边倒角 2mm
part = part.edges().fillet(1) # 所有边倒圆角 1mm
导出格式:STEP(推荐,保留 B-Rep 精确几何)、STL(3D 打印)、GLTF(Web 可视化)。
CadQuery vs FreeCAD vs OpenSCAD 对比:
| 维度 | CadQuery | FreeCAD | OpenSCAD |
|---|---|---|---|
| 编程语言 | Python 标准库 | Python 脚本 API | 自研 DSL |
| 几何内核 | OCCT(OCP 绑定) | OCCT 7.8.1 | CGAL |
| STEP 支持 | 原生读写 | 原生读写 | 不支持 |
| NURBS 曲面 | 支持 | 支持 | 不支持 |
| GUI | cq-editor(轻量) | 完整的工作台系统 | 脚本编辑器+预览 |
| 学习曲线 | 中等(需 Python + 选择器语法) | 中高(需理解 FreeCAD 对象模型) | 低(语法简单但有局限) |
6.3.4 solvespace——轻量级约束求解 3D CAD
定位:SolveSpace 是一款免费开源的参数化 2D/3D CAD,最独特之处在于它是一个可独立使用的约束求解器库。软件体积仅约 10MB,却支持 35+ 种几何约束类型,非常适合快速原型设计、机械零件草图和将约束求解功能嵌入其他应用。
核心特性:
(1) 约束系统
SolveSpace 的约束类型覆盖了机械设计中最常见的关系:
- 距离约束:点-点距离、点-线距离、线-线距离
- 角度约束:线-线角度
- 位置约束:点-点重合、点在线/圆/弧上、中点
- 几何约束:平行、垂直、相切、对称、共线、等长/等半径
- 逻辑约束:水平、竖直
所有约束实时求解,意味着拖动几何元素时整个系统保持约束一致性——这是 SolveSpace 作为约束求解器的核心价值。
(2) 建模流程
SolveSpace 的建模逻辑清晰且轻量:
- 在 2D 草图中绘制几何(线、圆、弧、样条、贝塞尔曲线)
- 施加尺寸和几何约束
- 通过拉伸(Extrude)或旋转(Revolve)将草图转为 3D 实体
- 可选的布尔运算(并集、差集、交集)
- 装配体支持(3.0+)
(3) 支持格式:导入/导出 STEP、STL、DXF、SVG、PDF、OBJ。其中 STEP 导出保留了 B-Rep 精确几何。
(4) 命令行接口
SolveSpace 提供了完整的命令行模式,适合自动化处理和 CI/CD 集成:
# 从 solvespace 文件导出为 STL
solvespace-cli model.slvs -o output.stl
# 导出为 DXF(工程图视图)
solvespace-cli model.slvs -o output.dxf --view front --scale 1:1
最适合的场景:
- 快速做机械零件草图验证
- 需要精确约束求解(如连杆机构运动分析)
- 将约束求解器嵌入自有软件(SolveSpace 的 C 语言 API 库清晰可集成)
- 教学和入门——安装包小、学习曲线低、无需复杂配置
6.3.5 chili3d——纯 Web 3D CAD
定位:Chili3D 是一款基于 Web 浏览器的开源 3D CAD 应用。它通过将 OpenCASCADE 编译为 WebAssembly(OCCT.js + WASM),与 Three.js 渲染引擎集成,在浏览器内实现了接近桌面级 CAD 的建模和查看能力。
技术架构:
- TypeScript 全栈:整个项目用 TypeScript 编写,前后端统一语言
- OCCT.js(WASM):OpenCASCADE 7.x 通过 Emscripten 编译为 WebAssembly,在浏览器中执行 B-Rep 几何运算
- Three.js:WebGL 渲染层,负责 3D 场景的绘制和交互
- Rspack:构建工具,替代 Webpack 获得更快的编译速度
核心能力:
- 建模:基本体(长方体/圆柱/球/圆锥)、2D 草图绘制、布尔运算(并集/差集/交集)、拉伸/旋转/扫掠/放样、倒角/圆角
- 捕捉:对象捕捉(点/边/面)、工作平面捕捉、轴追踪、特征点自动检测
- 编辑:移动/旋转/镜像/删除、子形状操作、爆炸复合体
- 测量:角度、长度、面积、体积计算
- 文档管理:创建/打开/保存、撤销/重做、事务历史
- 格式支持:导入导出 STEP、IGES、BREP(0.6.1+ 新增)
与桌面 CAD 的差异:
| 维度 | Chili3D | FreeCAD / SolidWorks |
|---|---|---|
| 部署 | 零安装,浏览器打开即用 | 需下载安装 ~500MB |
| 性能 | WASM 近原生(约 70-80% 桌面性能) | 原生编译,全速 |
| 文件存储 | IndexedDB(浏览器本地) | 本地文件系统 |
| 参数化 | 不支持参数化约束 | 完整参数化 |
| 扩展性 | 前端生态(TypeScript) | Python/C++ 插件 |
Node.js 服务端渲染:Chili3D 的 OCCT.js 后端可以在 Node.js 中运行,利用 Linux 服务器为 Web 前端提供几何计算服务——例如:浏览器端提交 STEP 文件,服务端完成布尔运算、网格化、格式转换等重计算后返回结果。
典型场景:在线 CAD 查看器、轻量编辑、团队协同预览、嵌入网页的产品配置器。
6.4 2D CAD 与制图
虽然 3D 建模工具越来越强大,但 2D 制图仍然是工程施工、图纸交付、机械出图等领域不可替代的基本功。OpenGIS-Skills 包含三个 2D CAD 技能——两个桌面应用(QCAD 和 LibreCAD)和一个 Web 框架(LightCAD),分别对应不同的使用场景。
6.4.1 qcad——开源专业 2D CAD 编辑器
定位:QCAD 是 RibbonSoft 公司维护的开源 2D CAD 编辑系统,基于 Qt 框架用 C++ 编写。其最突出的能力是专业的 DXF/DWG 读写支持——读取 DWG R9~R2018、DXF R12~R32,写入 DXF R12~R32 和 DWG R15~R2018。
核心功能模块:
(1) ECMAScript (JavaScript) 扩展系统
QCAD 最独特的设计是其内置了 Qt Script(基于 ECMAScript / JavaScript)作为脚本语言。所有菜单命令本质上都是 ECMAScript 脚本,位于 scripts/ 目录下,用户可以直接查看和修改。这意味着:
- 开发自定义工具就是写一个 JavaScript 文件
- 可以一键录制用户操作并导出为脚本
- 无编译环节,修改脚本后重启 QCAD 即生效
- 支持完整的 JavaScript 语言特性(类、函数、正则、JSON 等)
(2) 图层管理
QCAD 提供标准的 CAD 图层体系:创建/删除图层、设置颜色/线型/线宽、锁定/冻结/隐藏、通过图层状态管理器批量控制。图层与块(Block)配合,可以实现符号库的标准化管理。
(3) 图块定义和插入
块(Block)是 CAD 中可复用的符号单元。QCAD 支持创建块定义(包含若干图元)、将块定义插入到图纸的任意位置/角度/缩放、嵌套块、属性块(带可编辑文字标签的块)。块的底层存储使用 RBlockReferenceEntity 关联到 RBlock 定义。
(4) 标注系统
QCAD 提供全套工程标注类型:线性标注(水平和垂直距离)、对齐标注(两点间实际距离)、角度标注、半径/直径标注、坐标标注、引线标注。标注样式(箭头类型、文字高度、单位格式)通过标注样式管理器统一控制。
(5) QCAD/CAM
QCAD 的专业版包含 QCAD/CAM 模块,可以在 2D 图形基础上生成数控加工路径(轮廓铣削、钻孔、铣内腔),并输出 G-Code。这是 QCAD 从”绘图工具”扩展到”制造准备工具”的关键桥梁。
(6) 打印和布局
支持纸空间(Paper Space)和模型空间(Model Space)分离、多视口布局、自定义打印比例、打印预览和批量打印。
6.4.2 librecad——开源 2D CAD(Qt 社区版)
定位:LibreCAD 是 QCAD 社区版的延续,采用 C++ 和 Qt 编写,同样是开源 2D CAD 工具。LibreCAD 与 QCAD 的核心差异在于:
| 维度 | QCAD | LibreCAD |
|---|---|---|
| 许可证 | 社区版 GPL / 专业版商业 | GPL v2 |
| ECMAScript 脚本 | 支持 | 不支持(使用 C++ 插件框架 v2+) |
| DWG 读写 | 支持(专业版 + ODA 库) | 仅读取(实验性) |
| CAM | 专业版内置 | 不支持 |
| 插件系统 | JavaScript 脚本 | C++ 动态库 |
| 目标用户 | 专业制图 + 自动化 | 通用 2D CAD + 教育 |
命令行批处理模式:LibreCAD 提供了 -x 选项以无 GUI 模式运行,支持命令行格式转换和批量处理:
# DXF 转 SVG
librecad -x "dxf2svg" -i input.dxf -o output.svg
# 批量打印
librecad -x "print" -i drawing.dxf -p printer_name
API 扩展:LibreCAD 2.2+ 引入了 C++ 插件框架,允许开发者编译 .so/.dll 动态库来扩展 LibreCAD 的功能。插件可以注册新命令、添加工具栏、操作文档中的实体。
与 QCAD 的选择:
- 如果你需要 ECMAScript 脚本自动化、DWG 写入、CAM 路径生成:选择 QCAD
- 如果你只需要纯 2D 制图、DFX 编辑、轻量使用,且在意完全免费:选择 LibreCAD
6.4.3 lightcad——轻量 Web 2D CAD 框架
定位:LightCAD 是由启道软件(Qidao Soft)开发的专业级开源 CAD 平台,基于 .NET 10 和 C#,是整个 opengis-skills CAD 生态中规模最大的单体项目之一。但这里讨论的是 LightCAD 作为技能文件在 CAD 2D 制图方面的内容——其 Web 端的 2D 渲染能力、Fabric.js 集成和为二次开发提供的 TypeScript 接口。
核心架构:
LightCAD 采用严格的分层设计:
用户界面层 → LightCAD.WinForm / LightCAD.Model
应用运行时层 → LightCAD.Runtime
绘图交互层 → LightCAD.Drawing
渲染工具层 → LightCAD.RenderUtils (Three.js4Net + OpenTK)
核心数据层 → LightCAD.Core
数学基础层 → LightCAD.MathLib
2D 绘图能力:
- 基本图元:直线、圆弧、椭圆、多段线、样条曲线、填充区域、文本、多行文本
- 标注系统:线性标注、对齐标注、角度标注、半径/直径标注
- 图层管理:颜色、线型、线宽、可见性控制
- 选择系统:点选、框选、按图元类型/颜色/图层过滤
- 捕捉系统:端点、中点、圆心、交点、切点、垂足
Web 端二次开发:
LightCAD 的 Web 渲染层基于 Three.js4Net(将 Three.js 能力桥接到 .NET),同时提供了面向 Web 前端的 TypeScript/JavaScript 接口。开发者可以用 TypeScript 创建自定义实体、注册命令、构建 UI 面板,实现与桌面端完全一致的绘图功能——但运行在浏览器中。
Web 嵌入示例:将一个 LightCAD 绘图画布嵌入到 Web 页面中,提供基础的 2D 查看和标注能力——这是在 BIM 协同、图纸审批、现场验收等场景下的典型用法。
6.5 PCB/EDA——KiCad
定位:KiCad 是目前最成熟的开源电子设计自动化(EDA)工具套件。与 CAD 分类中的其他技能主要面向机械/建筑领域不同,KiCad 是唯一专注于印刷电路板(PCB)设计的技能。KiCad 采用 GPL-3.0 许可证,在 CERN 持续支持下达到了企业级可用性。
核心子模块:
| 模块 | 功能 | 对应可执行程序 |
|---|---|---|
| 原理图编辑器(Eeschema) | 绘制电路原理图,元器件符号放置,电气连接,层次化子图 | kicad-cli sch |
| PCB 编辑器(Pcbnew) | 元器件布局,信号布线(交互式/差分对/推挽),铜覆层 | kicad-cli pcb |
| 3D 查看器 | 3D 渲染 PCB 板和元器件,STEP 模型导入 | 内置于 Pcbnew |
| 封装编辑器 | 创建和管理元器件封装(Footprint) | kicad-cli fp |
| 符号编辑器 | 创建和管理原理图符号(Symbol) | 内置于 Eeschema |
| Gerber 查看器 | 查看生产文件(Gerber + 钻孔) | gerbview |
Python 脚本 API(KiCad 8.0+):
从 KiCad 8.0 开始,官方引入了 pcbnew Python 模块的稳定 API,支持通过脚本自动化常见的 PCB 开发任务。以下是几个典型场景:
import pcbnew
# 加载 PCB 文件
board = pcbnew.LoadBoard("my_project.kicad_pcb")
# 遍历所有元器件,打印位号和封装名
for footprint in board.GetFootprints():
ref = footprint.GetReference()
fp = footprint.GetFPID().GetLibItemName()
print(f"{ref}: {fp}")
# 导出 BOM(物料清单)——实际代码会更长,这里示意逻辑
# ...
# 运行设计规则检查(DRC)
drc = pcbnew.DRC()
drc.RunTests(board)
命令行自动化(KiCad 9.x+ CLI):
# 从原理图更新 PCB
kicad-cli pcb update --board project.kicad_pcb --schematic project.kicad_sch
# 导出 Gerber 生产文件
kicad-cli pcb export gerbers --board project.kicad_pcb --output gerbers/
# 导出 BOM
kicad-cli sch export bom --schematic project.kicad_sch --output bom.csv
# 导出 3D STEP 模型
kicad-cli pcb export step --board project.kicad_pcb --output project.step
文件格式:KiCad 6.0+ 使用基于 S-expressions 的新文件格式(.kicad_sch、.kicad_pcb、.kicad_mod 等),纯文本、人类可读、版本控制友好——这是 KiCad 区别于传统二进制格式 EDA 工具的一大优势。
6.6 BIM 与 IFC——xbim
定位:Xbim(the eXtensible Building Information Modelling toolkit)是一个面向 .NET 平台的开源 BIM 开发工具集。它将 buildingSMART 组织的 IFC 标准(ISO 16739)——从晦涩的 STEP/EXPRESS 文本格式——转化为 .NET 开发者可以直接用 C# 读、写、查询、编辑、可视化的强类型对象模型。
核心能力:
(1) 强类型 IFC 实体模型
Xbim 的最大价值在于:它将 IFC 模式中的每一个实体(如 IfcWall、IfcDoor、IfcSlab、IfcRelAggregates 等数百个实体类型)映射为自动生成的 C# 接口/类。这意味着在 Visual Studio 或 Rider 中开发时,IDE 能为 IFC 属性提供完整的智能提示和编译期类型检查。这与那些把 IFC 数据当作”字符串集合”来处理的方案有着本质区别。
(2) IFC 格式兼容
Xbim 原生支持三种 IFC 序列化方式:
- STEP21(
.ifc):最常用的文本格式 - IFC XML(
.ifcXML):基于 XML 的 IFC 表述 - IFC ZIP(
.ifcZIP):压缩包格式
支持的 IFC 版本包括 IFC2x3、IFC4 和 IFC4x3。
(3) Xbim.Geometry 几何引擎
Xbim 并非只能解析”数据”——通过 Xbim.Geometry 模块,它可以将 IFC 中以参数化、隐式方式描述的几何(如 IfcExtrudedAreaSolid 拉伸实体、IfcBooleanClippingResult 布尔裁剪结果)转换为精确的 B-Rep 表达和可显示的三角网格,底层基于 OCCT 7.6.x。
(4) 可视化
- xbimXplorer:基于 WPF 的桌面 BIM 模型查看器
- xbimWebUI:基于 WebGL 的浏览器端查看器,配合
.wexbim二进制几何流实现 Web 端 BIM 展示
(5) COBie 数据交换
COBie(Construction Operations Building Information Exchange)是面向设施运维阶段的资产信息交换标准。Xbim 通过 XbimCobieExpress 模块支持 COBie 数据的生成和校验。
代码示例——.NET 中读取 IFC 文件并统计墙的数量:
using Xbim.Ifc;
using Xbim.Ifc4.Interfaces;
// 打开 IFC 文件
using var model = IfcStore.Open("Building.ifc");
// 查询所有墙(IfcWall / IfcWallStandardCase)
var walls = model.Instances.OfType<IIfcWall>();
Console.WriteLine($"墙体数量: {walls.Count()}");
// 遍历每面墙的属性
foreach (var wall in walls)
{
var name = wall.Name;
var type = wall.GetType().Name;
Console.WriteLine($" {type}: {name}");
}
// 计算总楼板面积
var slabs = model.Instances.OfType<IIfcSlab>();
double totalArea = 0;
foreach (var slab in slabs)
{
// 通过几何引擎或属性集获取面积...
}
在 BIM 生态中的位置:Xbim 与 IfcOpenShell(C++/Python)是开源 IFC 世界两座并列的高峰。选择 Xbim 的关键理由:如果你已经深度使用 .NET 技术栈(C#/Azure/ASP.NET),Xbim 是最自然的选择——它不需要引入额外的语言运行时,IDE 集成度最高。
6.7 .NET AutoCAD 二次开发
这一节是 CAD 技能中最”业务导向”的部分——四个技能全部围绕 AutoCAD 平台的 .NET 二次开发展开。从底层框架(IFoxCAD)、到施工场布(FY_Layout)、到围护深化设计(LightningCAD)、再到图纸翻译(TongWen),它们形成了一个”基础框架 + 垂直业务插件”的完整生态。
6.7.1 ifoxcad——AutoCAD .NET 二次开发框架
定位:IFoxCAD 是一个基于 .NET 的 AutoCAD / 中望CAD(ZWCAD)/ 浩辰CAD(GstarCAD)二次开发类库,由雪山飞狐(狐哥)开创、落魄山人重构。它的核心设计理念是”最小化内核 + 扩展方法“——只用 DBTrans、SymbolTable、ResultData、SelectFilter 四个核心类作为基础,其余所有功能通过 C# 的扩展方法实现。
核心机制:
(1) DBTrans——统一事务封装
AutoCAD .NET API 中所有数据库操作必须包裹在 using (Transaction tr = db.TransactionManager.StartTransaction()) { ... tr.Commit(); } 样板代码中。IFoxCAD 的 DBTrans 彻底消灭了这个样板:
// 传统 AutoCAD .NET API(每段操作约 6 行样板代码)
using (var tr = db.TransactionManager.StartTransaction())
{
var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
var btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
var line = new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0));
btr.AppendEntity(line);
tr.AddNewlyCreatedDBObject(line, true);
tr.Commit();
}
// IFoxCAD 方式——用 DBTrans 消除样板
using (var tr = new DBTrans())
{
var line = new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0));
tr.CurrentSpace.AddEntity(line);
}
DBTrans 自动管理事务的开启、提交和回滚,自动获取当前空间(模型空间/图纸空间),开发者只需关注业务逻辑。
(2) 链式扩展方法
IFoxCAD 为 AutoCAD 原生实体类型提供了大量链式扩展方法,例如:
// 创建带属性的直线
var line = new Line(p1, p2)
.SetLayer("中心线") // 设置图层
.SetColorIndex(1) // 设置颜色(红色)
.SetLinetype("CENTER") // 设置线型
.AddToCurrentSpace(); // 添加到模型空间
(3) 多 CAD 兼容
IFoxCAD 深度兼容三种 CAD 平台:
- AutoCAD(Autodesk):主流商业 CAD
- 中望 CAD(ZWCAD):国产 CAD,广泛应用于国内企业
- 浩辰 CAD(GstarCAD):另一款国产 CAD
不同平台之间底层 API 存在细微差异(如某些方法在 ZWCAD 中不适用),IFoxCAD 的封装屏蔽了这些差异,实现一套代码三平台运行。
(4) 依赖注入(DI)集成
IFoxCAD 内建了对 .NET 通用 DI 容器的支持,允许通过构造函数注入服务、配置和日志,适合大型 CAD 插件项目的工程化管理。
(5) 命令注册(ICommand 接口)
通过实现 ICommand 接口(而非传统 AutoCAD 的 [CommandMethod] 特性标注),IFoxCAD 提供了更灵活的命令注册方式——支持命令分组、条件启用/禁用、运行时热加载。
典型场景:任何基于 .NET 的 AutoCAD 二次开发项目,IFoxCAD 都应该作为基础框架被引入。它能将开发效率提升数倍,同时消除内存泄漏(事务未释放)、跨平台兼容等隐性风险。
6.7.2 fy_layout——施工场地布置插件
定位:FY_Layout(飞扬集成设计平台)是 LightCAD 平台的场地布置二次开发插件,也是 opengis-skills 技能仓库中 CAD 类文件体积最大的技能(26,822 字节)。它演示了如何基于 LightCAD 核心框架进行专业功能的扩展开发,覆盖了施工场地布置中常见的全部业务元素。
核心功能模块:
| 模块 | 说明 | 关键算法 |
|---|---|---|
| 板房布置 | 临时建筑(宿舍、办公室、仓库)的二维排布 | 矩形放置、阵列复制、碰撞检测 |
| 塔吊布置 | 塔式起重机的位置规划 | 覆盖半径计算、干涉分析 |
| 道路系统 | 施工道路和运输路径绘制 | 道路中线生成、交叉口处理、路基参数化 |
| 围墙布置 | 工地围墙/围栏自动生成 | 沿边界线等距分布、门洞自动避让 |
| 基坑开挖 | 开挖区域绘制与放坡计算 | 多边形偏移、放坡系数计算、土方量估算 |
| 绿化草坪 | 绿化区域绘制 | 多边形填充、边界平滑 |
| 硬化地面 | 道路和场地硬化 | 区域填充、面积统计 |
技术特点:FY_Layout 采用二三维一体化——所有场布元素同时支持二维平面绘制和三维立体显示,两者使用统一的数据模型。这意味着设计者在俯视图中放置板房后,可以立即切换到三维视图查看效果,无需任何转换。
作为技能的学习价值:FY_Layout 技能文件不仅是一个业务插件的参考,更是一个”如何基于 LightCAD 框架开发 CAD 领域插件的完整示范”——包括元素类型定义、Provider 参数化系统、UI 面板开发、命令注册、数据序列化等全部环节。
6.7.3 lightningcad——建筑围护深化设计插件
定位:LightningCAD(闪电围护)是一款面向建筑围护结构深化设计(外墙/屋面/幕墙)的 AutoCAD 插件,支持 AutoCAD 2019-2027 和中望 CAD 2022+ 双平台。
核心功能:
(1) 板材自动排布
围护深化设计的核心是”板材排布”——在指定墙面或屋面区域内,按照一定规则将板材逐块排列。LightningCAD 的板材排布模块支持:
- 外墙板:横向/纵向排布,自动避让门窗洞口
- 内墙板:适配内隔墙构造要求
- 屋面板:找坡/不找坡两种模式(找坡模式下系统根据坡度自动调整板材切割角度)
- 楼承板:钢结构楼板专用排布
排布完成后支持手动微调——锚点拖拽调整长度、板材合并/拆分、批量属性修改。
(2) 幕墙系统
两种幕墙形式:
- 框式幕墙:立柱、横梁、面板分别定义和排布
- 单元式幕墙:以”单元板块”为单位整体划分
(3) 铝板分格和展开
对于金属幕墙(铝板/铝塑板),LightningCAD 提供分格算法——将大面铝板按标准规格自动划分为小板,并生成展开图(用于工厂下料)。
(4) 龙骨布置
自动在墙体和屋面系统中布置竖向龙骨和水平檩条,支持间距定义、端部处理和洞口加强。
(5) 统计输出
自动生成板材统计表(型号、规格、数量、面积)、龙骨下料清单、收边件明细。
6.7.4 tongwen——工程图纸多语言翻译套件 🔥
定位:同文(Tongwen)是 opengis-skills 中最新增补的 CAD 技能,也是一款非常独特的 CAD/BIM 工具——它解决的问题不是”画图”或”建模”,而是工程图纸的跨语言无损翻译。其名称取自”车同轨,书同文”的理念,寓意打通中外工程协作的语言壁垒。
核心痛点与解法:
传统做法是将图纸中的文字逐条复制粘贴到 Excel、翻译、再手动回填——耗时、易出错、更致命的是会破坏图纸的图层结构、文字样式和坐标位置。同文的方案是在完整保留图纸原生数据(图层、坐标、文字样式、块属性、对象关联)的前提下,实现文本的自动提取→术语约束翻译→人工审校→受控回写。整个过程对图纸”零破坏”。
技术方案:
利用 CAD API 逐实体遍历,识别文字类实体(Dimension/Leader 标注、MText 多行文本、Attribute 块属性、图层名称、图框标题栏),提取文本内容和精确的几何属性(位置坐标、文字高度、旋转角度、对齐方式),译文写入时严格保持原属性不变。
核心功能:
| 功能模块 | 说明 |
|---|---|
| 文字提取 | 自动扫描全图文字对象,批量提取文本内容、坐标、图层、样式属性 |
| 术语库 | 四层翻译知识系统(通用词典 + 行业术语库 + 项目术语库 + 人工修正记忆),确保同一术语在全项目中译文一致 |
| 翻译执行 | 调用翻译引擎(内置本地引擎/可对接外部 API),逐条翻译,术语约束自动生效 |
| 人工审校 | 四级风险质量检查(阻断/高/中/低),支持人工逐条审查和修正 |
| 回写图纸 | 三种回写策略(原位替换/双语并排/仅译文),完整保留图层/颜色/字体/高度/旋转角度 |
| 批量处理 | 命令行模式支持多张图纸一键批量翻译,适合百张图纸的项目级翻译任务 |
语言支持:20+ 语言方向——中文↔英文/日文/韩文/法文/德文/西班牙文/俄文/阿拉伯文等,以及上述语种之间的互译。
平台支持:AutoCAD 2019-2026,数据存储本地优先(不依赖任何云服务),支持纯离线运行。
排版保护:这是同文最核心的技术承诺——翻译后文字在图纸中的位置、大小、旋转角度、图层、颜色、字体、对齐方式与原文字完全一致。这是它区别于”用 OCR 或截图翻译工具处理图纸”的根本差异点。
典型场景:国内设计院向海外业主/监理交付双语图纸;中国工程企业承接海外项目的施工图翻译;竣工档案的多语种归档。
6.8 数据交换与可视化
CAD 数据的价值不仅在于创建和编辑,更在于在不同系统之间流转和在多种终端上呈现。最后两个技能分别解决”数据格式互通”和”3D 可视化”两大关键需求。
6.8.1 libredwg——自由 DWG 读写库
定位:LibreDWG 是 GNU 项目下的一个完全开源的 C 语言库,专门用于读写 AutoCAD 的 DWG 文件格式。DWG 作为 CAD 行业的”事实标准”文件格式,长期被 Autodesk 作为专有格式控制,而 LibreDWG 是当前最完善的开源 DWG 处理方案。
版本兼容性:
LibreDWG 对 DWG 格式的读取覆盖率接近 99%,支持从最古老的 R1.2 到最新的 R2018 版本(共 30+ 个版本),具体包括:
- 早期:r1.1~r14
- 中期:r2000~r2004(写入功能达到”基本可用”级别)
- 近期:r2007~r2018(读取功能完善,写入功能在持续改进中)
核心组件:
| 组件 | 功能 |
|---|---|
| libredwg C 库 | DWG 解析和生成的核心引擎 |
| dwgread | 命令行读取工具,输出 JSON/DXF/SVG 等多种格式 |
| dwgwrite | 命令行写入工具,从 JSON 创建 DWG 文件 |
| dxf2dwg | DXF 到 DWG 的转换 |
| dwg2dxf | DWG 到 DXF 的转换 |
| dwg2SVG | DWG 到 SVG 的转换(用于 Web 预览) |
| libredwg-python | Python 绑定(社区维护) |
命令行工具示例:
# 读取 DWG 文件并输出为 JSON(含所有实体属性)
dwgread -O json input.dwg > output.json
# DWG 转 DXF
dwg2dxf input.dwg -o output.dxf
# DXF 转 DWG
dxf2dwg input.dxf -o output.dwg
# 查看 DWG 文件的元信息
dwgread -v4 input.dwg
Python 绑定使用示例:
import libredwg
# 读取 DWG
dwg = libredwg.DwgData()
libredwg.dwg_read_file("drawing.dwg", dwg)
# 遍历所有实体
for obj in dwg.object:
if obj.type == libredwg.DWG_TYPE_LINE:
print(f"线段: ({obj.line.start.x}, {obj.line.start.y}) → ({obj.line.end.x}, {obj.line.end.y})")
elif obj.type == libredwg.DWG_TYPE_TEXT:
print(f"文字: {obj.text.text_value}")
典型应用场景:
- 在 Web 服务中解析 DWG 文件提取实体信息(如自动统计门窗数量)
- 批量 DWG→DXF 或 DWG→SVG 格式转换
- 在非 Windows 平台(Linux/macOS)上处理 DWG 文件
- 作为自建 CAD 数据管道的底层依赖
6.8.2 astral3d——工业 3D 可视化平台
定位:Astral3D 是杭州星孪数字科技团队开发的现代化 Web 3D 编辑器和三维引擎,基于 Vue3 + Three.js 技术栈,采用 Apache-2.0 许可证开源。它专为数字孪生场景(智慧城市、智慧工厂、智慧建筑)优化,是目前国内最具影响力的 Web 3D 开源解决方案之一。
核心特性:
(1) 格式支持
Astral3D 支持 30+ 种 3D 模型格式导入,覆盖了 CAD/BIM 全生态:
| 格式类型 | 支持的格式 |
|---|---|
| 通用 3D | GLTF / GLB / OBJ / FBX / 3DS / DAE / PLY / STL |
| BIM | RVT(Revit)/ IFC / NWD(Navisworks) |
| CAD | DWG / DXF |
| 点云 | LAS / LAZ / PTS / XYZ |
| 倾斜摄影 | OSGB / 3DTiles |
(2) 大模型轻量化
数字孪生场景中,一个完整的 BIM 模型可能包含百万级构件。Astral3D 通过以下技术手段解决 Web 端的渲染性能问题:
- LOD(Level of Detail):根据相机距离自动切换模型精度层级
- 实例化渲染(Instancing):对重复构件(如柱子、窗户)只存储一份几何数据,GPU 端批量绘制
- 分包加载:将大场景按空间区域分片,按需加载当前视野内的模型
(3) CAD 数据互转
Astral3D 内置了 CAD 格式与 Web 标准格式的转换管线:
OBJ / STL / STEP / IFC / DWG / RVT
↓ 解析 + 轻量化处理
glTF / GLB(Web 端高效渲染)
这意味着用户上传一份 Revit 模型或 IFC 文件后,Astral3D 自动完成解析和轻量化,生成可在浏览器中秒开的 glTF 文件。
(4) 扩展能力
- 插件系统:支持第三方插件的热加载/卸载,类似 VS Code 的扩展体系
- 脚本运行时:内嵌 JavaScript/TypeScript 脚本引擎,可编写自定义交互逻辑
- 粒子系统:内置火焰/烟雾/萤火虫等特效
- 天气系统:晴天/雨天/雪天/雾天环境模拟
- 动画编辑器:完整的关键帧动画和时间轴编辑
与 chili3d 的选择:
| 对比 | Astral3D | Chili3D |
|---|---|---|
| 定位 | 数字孪生可视化平台 | Web 端 CAD 建模工具 |
| 建模能力 | 弱(侧重浏览和标记) | 强(完整 B-Rep 建模) |
| 格式广度 | 30+ 种,含 BIM/CAD/点云 | STEP/IGES/BREP/STL |
| 大场景性能 | 极强(LOD/实例化/分包) | 中等 |
| UI 框架 | Vue3(前端领域标准) | 自研 Ribbon 界面 |
简单记忆:如果你需要在 Web 端编辑 CAD 模型,选 Chili3D;如果你需要在 Web 端展示和管理 BIM/CAD 数据,选 Astral3D。
6.9 CAD 技能选择决策树
面对 19 个技能,选择哪个取决于你的任务类型。以下决策树帮你快速定位:
需要 CAD 技能?
├─ 几何算法 → clipper2(首选)/ clipper1(旧项目维护)
├─ 3D 几何内核开发 → occt
├─ 3D 建模
│ ├─ 我喜欢用 Python 写建模脚本 → cadquery
│ ├─ 我喜欢声明式函数语言 → openscad
│ ├─ 我需要完整的交互式 GUI → freecad
│ ├─ 我需要精确的约束求解(机构运动)→ solvespace
│ └─ 我需要在浏览器里建模 → chili3d
├─ 2D 制图
│ ├─ 桌面端专业制图 + 脚本自动化 → qcad
│ ├─ 桌面端轻量制图 + 免费 → librecad
│ └─ Web 端 2D 绘图框架 → lightcad
├─ PCB 设计 → kicad
├─ BIM 与 IFC
│ ├─ .NET 技术栈 → xbim
│ └─ C++/Python 技术栈 → occt + IfcOpenShell(非本技能范畴)
├─ AutoCAD 二次开发
│ ├─ 我需要一个基础框架简化开发 → ifoxcad
│ ├─ 施工场地布置 → fy_layout
│ ├─ 建筑围护深化设计 → lightningcad
│ └─ 工程图纸多语言翻译 → tongwen
├─ DWG 文件读写
│ ├─ C 语言或 Python 绑定 → libredwg
│ └─ 仅需 DWG 查看,不开源也可 → qcad(读取)+ ODA SDK
└─ 3D 可视化
├─ 数字孪生 / BIM 大场景 Web 浏览 → astral3d
└─ Web 端 CAD 模型编辑 → chili3d
组合技能推荐:
在实际项目中,多个 CAD 技能经常协同使用。以下是三组经典搭配:
| 场景 | 技能组合 | 说明 |
|---|---|---|
| CAD 数据转换服务 | occt + libredwg |
用 libredwg 读 DWG,用 occt 做几何转换和网格化,输出 STL/STEP/glTF |
| BIM Web 可视化平台 | xbim + astral3d |
用 xbim 解析 IFC 提取几何和属性,用 astral3d 做 Web 端渲染和交互 |
| AutoCAD 插件全栈开发 | ifoxcad + tongwen + lightningcad |
以 ifoxcad 为框架底座,集成 tongwen(翻译)和 lightningcad(围护设计)的业务能力 |
6.10 本章小结
本章详细解析了 opengis-skills 中全部 19 个 CAD 技能。如果只能记住三个关键点,请记住:
-
金字塔结构:底层是
occt几何内核和clipper2几何算法;中间层是freecad/cadquery/openscad/solvespace等参数化建模工具;顶层是ifoxcad/lightningcad/tongwen等面向 AutoCAD 平台的垂直业务插件。你的任务在哪一层,就加载哪一层的技能。 -
平台分化明显:桌面端(FreeCAD、QCAD、KiCad)、浏览器端(Chili3D、Astral3D、LightCAD)、.NET 企业端(IFoxCAD、Xbim)三类各有专属技能。不要用桌面端的技能去解决 Web 端的问题。
-
真实项目需要组合:没有哪个单技能能覆盖一个真实的工程场景。一个标准的”读取 DWG→解析 BIM 几何→转换格式→Web 展示”流程,就需要
libredwg+xbim+occt+astral3d四个技能接力完成。学会按决策树选择和按推荐组合搭配,是高效使用 CAD 技能的关键。