不用服务端,网页也能跑 CAD 几何运算,这个开源库把 Rust 内核编译进了浏览器
Web 端做几何运算一直有一道门槛:复杂操作要么发到服务端处理,要么用 JavaScript 硬写,精度和性能都难以保证。OpenGeometry 提供了另一种思路——用 Rust 写几何内核,编译为 WebAssembly,直接在浏览器里运行,性能接近原生,同时通过 Three.js 处理 3D 渲染。
它定位是一个几何内核(CAD Kernel),不是完整的 CAD 应用,也不是可视化框架。它负责的是几何对象的构建、变换和运算,以及导出为标准 CAD 格式,至于界面和交互,由开发者自己来。

支持的几何操作
OpenGeometry 提供了从基础图元到高级运算的完整覆盖:
图元与形状
| 类型 | 包含内容 |
|---|---|
| 2D 图元 | 直线、圆弧、曲线、折线、矩形 |
| 3D 形体 | 多边形、实体、长方体、圆柱体、球体、楔形体 |
| 复合形体 | 扫掠体(Sweep)、带开洞的实体(带墙体开口的几何) |
几何运算
- 布尔运算:联集、差集、交集,适用于 Solid 类型的几何体之间
- 拉伸(Extrusion):将 2D 多边形沿法线方向拉伸为 3D 实体
- 扫掠(Sweep):沿路径生成扫掠体
- 偏移(Offset):对多边形或曲线生成内外偏移
- 三角化(Triangulation):支持含孔洞的多边形三角化,用于 Three.js 渲染
导出格式
支持 STL(3D 打印常用)、STEP(机械 CAD 通用格式)、IFC(建筑信息模型标准格式)、PDF 投影(2D 工程图)。
IFC 和 STEP 的导出能力让它在 AEC(建筑、工程、施工)场景有实际价值——这类格式通常依赖服务端或专业软件,能在浏览器端直接导出并不常见。
安装与使用
安装
npm install opengeometry使用前需要将项目的 WebAssembly 文件(.wasm)部署到可访问的静态资源路径,初始化时通过 wasmURL 参数指向它。
初始化
import { OpenGeometry } from 'opengeometry';
const og = await OpenGeometry.create({
wasmURL: '/assets/opengeometry.wasm'
});create() 是异步方法,会加载并初始化 WASM 模块。完成后才能进行几何操作。
创建几何体示例
以创建一个长方体并添加到 Three.js 场景为例:
import * as THREE from 'three';
// 创建长方体(位置、尺寸通过 Vector3 指定)
const cuboid = og.createCuboid(
new THREE.Vector3(0, 0, 0), // 位置
new THREE.Vector3(2, 1, 3) // 长宽高
);
// 获取 Three.js Mesh,添加到场景
const mesh = cuboid.toMesh();
scene.add(mesh);布尔运算的典型用法(如从墙体中减去门洞):
const wall = og.createCuboid(...);
const door = og.createCuboid(...);
// 差集:从 wall 中减去 door 区域
const result = wall.subtract(door);
scene.add(result.toMesh());导出
// 导出为 STL
const stlBlob = cuboid.exportSTL();
// 导出为 IFC
const ifcBlob = cuboid.exportIFC();适合哪类项目
建筑与 BIM 场景:需要在网页端处理墙体、开口、楼层的几何关系,并导出 IFC 文件给下游工具使用。传统方案需要服务端或桌面端,OpenGeometry 让这类操作可以在客户端完成。
参数化建模工具:用户通过参数控制形体尺寸,实时预览 3D 结果。因为运算在本地进行,延迟更低,交互更流畅。
产品配置器:电商或工业场景下,用户在线定制产品形状,导出 STL 用于 3D 打印或制造。
AI 辅助设计:文档中提到,因为内核操作是确定性的(Deterministic),适合作为 AI 生成几何的执行层——AI 给出指令,内核保证输出结果可预期,不会因精度漂移产生奇怪的几何错误。
写在最后
OpenGeometry 解决的是一个具体的工程问题:在浏览器端做 CAD 级几何运算,而不依赖服务端。Rust + WASM 的组合让它在性能上有别于纯 JavaScript 实现,Three.js 集成让 3D 预览变得直接。
项目目前还处于活跃开发阶段,部分功能(如 Babylon.js 集成)仍在进行中。适合需要在 Web 端处理几何运算且对格式导出有要求的项目,如果只是做简单的 3D 展示,Three.js 本身就够用,不需要引入几何内核这一层。
GitHub:https://github.com/OpenGeometry-io/OpenGeometry (opens in a new tab)