跳至正文
-
Subscribe to our newsletter & never miss our best posts. Subscribe Now!
CAE

学习CAE软件开发

CAE

学习CAE软件开发

  • 首页
  • OCCT
  • C++
  • 首页
  • OCCT
  • C++
关

搜索

  • https://www.facebook.com/
  • https://twitter.com/
  • https://t.me/
  • https://www.instagram.com/
  • https://youtube.com/
Subscribe
主页

OpenCASCADE 从入门到精通(一):环境搭建 – 从零开始配置 OCCT 开发环境

作者 Comely
2026年 3月 1日 3 分钟阅读
0



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

运行结果

Hello Cube 终端运行截图
图 1:真实终端运行输出 – 程序实际编译运行后的截图,显示体积 6000 mm³,质心 (5, 10, 15) mm,6 面 12 边 8 顶点,所有验证通过 ✅

3D 模型示意图

Hello Cube 3D 模型示意图
图 2:10x20x30 mm 立方体等轴测视图 – 蓝色线条为边,绿色点为顶点

如上图所示,立方体尺寸为 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. 练习 1:创建一个 25x15x40 mm 的长方体,验证体积是否为 15000 mm³
  2. 练习 2:创建一个边长为 20 mm 的正方体,验证体积=8000 mm³
  3. 练习 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 | 状态:已验证 ✅ | 代码已编译运行 | 图片已生成


作者

Comely

关注我
其他文章
下一个

OpenCASCADE 从入门到精通(十):布尔运算实战 – 组合零件设计的核心技能

暂无评论!成为第一个。

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

近期文章

  • OpenCASCADE 7.7.0 完全教程(二十一):法兰盘参数化建模实战
  • OpenCASCADE 7.7.0 完全教程(二十):布尔运算实战
  • OpenCASCADE 7.7.0 完全教程(一):入门与架构详解
  • OpenCASCADE 7.7.0 完全教程(四):数据交换与格式转换
  • OpenCASCADE 7.7.0 完全教程(三):建模算法实战

归档

  • 2026 年 3 月

分类

  • 主页

opencascade小助手

Copyright 2026CAE. All rights reserved.
蜀ICP备2021024090号