OpenCASCADE 从入门到精通(一):环境搭建 – 从零开始配置 OCCT 开发环境
OpenCASCADE 从入门到精通(一):环境搭建 – 从零开始配置 OCCT 开发环境
一、本章目标
学完本章你将能够:
- ✅ 在 Ubuntu 22.04 上安装 OpenCASCADE 7.6.3
- ✅ 配置 CMake 编译环境
- ✅ 编译运行第一个 OCCT 程序(Hello Cube)
- ✅ 输出立方体的体积、质心、面数等数据
最终成果:一个可运行的立方体模型,体积 6000 mm³
二、核心概念
什么是 OpenCASCADE?
OpenCASCADE Technology(OCCT)是一个开源的 CAD/CAM/CAE 几何建模内核,提供:
- 3D 几何建模(B-Rep 边界表示法)
- 布尔运算(并集/差集/交集)
- 数据交换(STEP/IGES/GLTF)
- 网格剖分(用于 3D 打印/仿真)
版本说明
本系列基于 OCCT 7.6.3(Ubuntu 22.04 官方仓库版本)。
三、环境准备
系统要求
| 组件 | 要求 | 本文环境 |
|---|---|---|
| 操作系统 | Ubuntu 20.04+ | Ubuntu 22.04 LTS |
| 编译器 | GCC 9+ | GCC 11.4.0 |
| OCCT | 7.6.0+ | 7.6.3 |
安装步骤
# 1. 更新软件源
sudo apt update
# 2. 安装 OCCT 开发库
sudo apt install -y libocct-data-exchange-dev libocct-visualization-dev
# 3. 安装编译工具
sudo apt install -y cmake g++ pkg-config
# 4. 验证安装
dpkg -l | grep occt
四、完整代码
创建文件 hello_cube.cpp:
/**
* OpenCASCADE 从入门到精通(一):Hello Cube
* 功能:创建一个 10x20x30 mm 的立方体,输出其几何属性
*/
#include <iostream>
#include <iomanip>
// OCCT 基础几何
#include <gp_Pnt.hxx>
#include <gp_Vec.hxx>
// OCCT 拓扑
#include <TopoDS_Solid.hxx>
#include <TopExp.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
// OCCT 建模 API
#include <BRepPrimAPI_MakeBox.hxx>
// OCCT 属性计算
#include <GProp_GProps.hxx>
#include <BRepGProp.hxx>
int main() {
std::cout << "========================================" << std::endl;
std::cout << "OpenCASCADE 从入门到精通(一)" << std::endl;
std::cout << "Hello Cube - 创建立方体并分析几何属性" << std::endl;
std::cout << "========================================" << std::endl;
// 创建立方体 (10mm x 20mm x 30mm)
Standard_Real dimX = 10.0;
Standard_Real dimY = 20.0;
Standard_Real dimZ = 30.0;
TopoDS_Solid box = BRepPrimAPI_MakeBox(dimX, dimY, dimZ);
if (box.IsNull()) {
std::cerr << "错误:立方体创建失败!" << std::endl;
return 1;
}
// 计算几何属性
GProp_GProps system;
BRepGProp::VolumeProperties(box, system);
Standard_Real volume = system.Mass();
gp_Pnt center = system.CentreOfMass();
std::cout << std::fixed << std::setprecision(2);
std::cout << "体积:" << volume << " mm³" << std::endl;
std::cout << "质心:(" << center.X() << ", " << center.Y() << ", " << center.Z() << ") mm" << std::endl;
// 统计拓扑元素(使用 Map 去重)
TopTools_IndexedMapOfShape faceMap, edgeMap, vertexMap;
TopExp::MapShapes(box, TopAbs_FACE, faceMap);
TopExp::MapShapes(box, TopAbs_EDGE, edgeMap);
TopExp::MapShapes(box, TopAbs_VERTEX, vertexMap);
std::cout << "面数:" << faceMap.Extent() << std::endl;
std::cout << "边数:" << edgeMap.Extent() << std::endl;
std::cout << "顶点数:" << vertexMap.Extent() << std::endl;
// 验证
Standard_Real expectedVolume = dimX * dimY * dimZ;
bool volumeOK = (volume - expectedVolume) < 0.01;
bool faceOK = (faceMap.Extent() == 6);
bool edgeOK = (edgeMap.Extent() == 12);
bool vertexOK = (vertexMap.Extent() == 8);
if (volumeOK && faceOK && edgeOK && vertexOK) {
std::cout << "✅ 所有验证通过!" << std::endl;
} else {
std::cout << "❌ 验证失败!" << std::endl;
return 1;
}
return 0;
}
五、编译与运行
编译命令
g++ -o hello_cube hello_cube.cpp \
-I/usr/include/opencascade \
-L/usr/lib/x86_64-linux-gnu \
-lTKernel -lTKMath -lTKBRep -lTKGeomBase -lTKGeomAlgo \
-lTKTopAlgo -lTKPrim -lTKG3d -lTKG2d \
-std=c++17
运行结果

3D 模型示意图

如上图所示,立方体尺寸为 10 × 20 × 30 mm,计算可得:
- 体积:10 × 20 × 30 = 6000 mm³
- 质心:(10/2, 20/2, 30/2) = (5, 10, 15) mm
- 面数:6 个矩形面
- 边数:12 条边
- 顶点数:8 个顶点
与程序输出完全一致!✅
六、代码解析
关键点 1:创建基本体素
TopoDS_Solid box = BRepPrimAPI_MakeBox(dimX, dimY, dimZ);
BRepPrimAPI_MakeBox是 OCCT 提供的基本体素创建 API- 返回
TopoDS_Solid类型(实体对象) - 必须检查
IsNull()确保创建成功
关键点 2:计算体积属性
GProp_GProps system;
BRepGProp::VolumeProperties(box, system);
Standard_Real volume = system.Mass();
gp_Pnt center = system.CentreOfMass();
GProp_GProps是几何属性计算类Mass()返回体积(密度=1 时等同于质量)CentreOfMass()返回质心坐标
关键点 3:拓扑元素计数(去重)
TopTools_IndexedMapOfShape faceMap, edgeMap, vertexMap;
TopExp::MapShapes(box, TopAbs_FACE, faceMap);
TopExp::MapShapes()自动去重(共享的边/顶点只计数一次)Extent()返回唯一元素数量
七、课后练习
- 练习 1:创建一个 25x15x40 mm 的长方体,验证体积是否为 15000 mm³
- 练习 2:创建一个边长为 20 mm 的正方体,验证体积=8000 mm³
- 练习 3:使用
BRepGProp::SurfaceProperties()计算表面积
下章预告
(二)基础几何:点线面的创建与操作
- 创建顶点(Vertex)
- 创建直线边(Edge)
- 创建平面(Face)
- 构建三角形线框(Wire)
源码与资源下载
- 源代码:
hello_cube.cpp - STEP 模型:
hello_cube.step(可用 FreeCAD 等软件打开) - 编译环境:Ubuntu 22.04 + OCCT 7.6.3 + GCC 11.4
字数:约 2500 字 | 系列:OpenCASCADE 从入门到精通 | 难度:入门 | 版本:7.6.3
验证日期:2026-03-01 | 状态:已验证 ✅ | 代码已编译运行 | 图片已生成