资源推荐
opengeometry
opengeometry

不用服务端,网页也能跑 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)