Ubuntu下OCC7.9+Qt5 快速搭建3D可视化框架

Ubuntu下OCC7.9+Qt5搭建简易的项目框架

近两年国产CAD替代如日中天,而几何内核作为CAD软件的核心组件之一,当前有且仅有唯一开源的几何内核库即OCCT;这里为各位自立于投入CAD开发或正在学习OCC库的小伙伴们奉献上一个快速搭建QT+OCC的项目框架;

本文介绍了Qt5+Occ 显示几何模型,最终的效果如下:
在这里插入图片描述

一、OCC中常用的库介绍

首先我们来介绍一下OCC下常用的库的关系

OCC库名 功能 常用头文件 类或方法 备注
TKernel 基础核心库 Standard.hxx,Standard_Handle.hxx Standard_Real,Standard_Integer,Handle()、Handle(ClassName) 内存管理、异常处理、基本数据类型,全局配置
TKMath 数学库 gp_Pnt.hxx,gp_Trsf.hxx,Geom_Curve.hxx gp_Pnt(三维点),gp_Vec(向量),gp_Trsf(仿射变换),Geom_Line,Geom_Circle 提供几何和线性代数计算基础;坐标系、向量、矩阵、几何变换
TKBRep Rrep拓扑结构相关库 TopoDS_Shape.hxx,BRep_Builder.hxx,TopExp_Explorer TopoDS_Shape,TopoDS_Compound,BRep_Builder::MakeFace() 管理边界表示法(BRep)的拓扑结构
TKV3d 可视化相关库 V3d_View.hxx V3d_View::FitAll()、V3d_View::Rotation() 管理三维视图、交互和显示属性;处理视图投影、光照、渲染模式
TKOpenGl OpenGL的封装、抽象、集成 OpenGl_GraphicDriver.hxx OpenGl_GraphicDriver(OpenGL图形驱动) 提供 OpenGL 的抽象接口;管理 OpenGL 上下文、渲染管线
TKService 窗口服务库 Aspect_Window.hxx,Aspect_DisplayConnection.hxx Aspect_DisplayConnection(显示连接) 管理窗口系统集成(如 X11、Win32),处理事件循环、窗口属性
TKPrim 基本几何体库 BRepPrimAPI_MakeBox.hxx BRepPrimAPI_MakeBox(创建立方体) 创建基本几何体(立方体、球体、圆柱体等),参数化几何体的构造
TKBO 布尔操作 BRepAlgoAPI_Fuse.hxx,BRepAlgoAPI_Cut.hxx BRepAlgoAPI_Fuse(布尔并集), BRepAlgoAPI_Cut(布尔差集) 实现几何布尔运算

二、设置CMakeLists.txt核心引用

首先我们需要定义CMakeLists.txt

# 查找 OpenCASCADE 库
find_package(OpenCASCADE REQUIRED)
...

target_link_libraries(${
   PROJECT_NAME}
    TKernel     # 核心基础库
    TKMath      # 数学库
    TKBRep      # BRep 模型支持
    TKV3d       # 3D 视图支持
    TKOpenGl    # OpenGL 图形驱动
    TKService   # 提供 AIS_InteractiveContext
    TKPrim      # 基本图形支持
)

当然,你可以一次性引入足够的库

# 查找 OpenCASCADE 库
find_package(OpenCASCADE REQUIRED)

# 包含 OpenCASCADE 头文件
include_directories(${
   OpenCASCADE_INCLUDE_DIRS})

# 添加 OpenCASCADE 库
target_link_libraries(${
   PROJECT_NAME} ${
   OpenCASCADE_LIBRARIES})

如果OpenCASCADE在默认的Cmake包依赖路径下包找不到,则编译时,可这样设置cmake -DOpenCASCADE_DIR="/path/to/opencascade" .. 这样的CMakeLists.txt解析时,搜索OpenCASDE包时就会优先在上面设置的目录查找;find_package原理点这里

当然,如果你希望编译时,只输入cmake ..就了事,我们可以明确指定OCC包的安装地址,可CMakeLists.txt中,声明安装目录,设置变量set(OpenCASCADE_DIR "/path/to/you/dir")

完整的CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.5)
 
project(MyQtProject)
 
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
# Find the Qt5 Widgets library
find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets X11Extras)

# 查找 OpenCASCADE 库
find_package(OpenCASCADE REQUIRED)

# Define source and header files
# 添加源代码文件
file(GLOB_RECURSE SOURCES src/*.cpp)
file(GLOB_RECURSE HEADERS src/*.h)

# set(SOURCES src/main.cpp src/dialog.cpp)
# set(HEADERS src/dialog.h)  # 这里可以添加头文件,如果需要的话

# 自动处理 moc、uic、rcc
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTUIC ON)
set(CMAKE_AUTORCC ON)

# Add an executable with the above sources
add_executable(${
   PROJECT_NAME} ${
   SOURCES} ${
   HEADERS})
 
# Use the Widgets module from Qt5
target_link_libraries(${
   PROJECT_NAME}
    Qt5::Widgets
)

# 添加 OpenCASCADE 库 - 指定添加(推荐)
target_link_libraries(${
   PROJECT_NAME}
    TKernel     # 核心基础库
    TKMath      # 数学库
    TKBRep      # BRep 模型支持
    TKV3d       # 3D 视图支持
    TKOpenGl    # OpenGL 图形驱动
    TKService   # 提供 AIS_InteractiveContext
    TKPrim      # 基本图形支持
)

三、上代码

1、项目结构如下

- build/
- src/
  |-main.cpp
  |-MainWindow.cpp
  |-MainWindow.h
  |-OccViewerWin.cpp
  |-OccViewerWin.h
- CMakeLists.txt 

mian.cpp为Qt5入口,MainWindow为主窗口,用来承载菜单及核心的3D预览子组件,OccViewerWin为Occ预览3D模型的Qt子组件

2、Qt5框架类代码
main.cpp

// main.cpp
#include <QApplication>
#include "MainWindow.h"

int main(int argc, char *argv[]) {
   
    QApplication app(argc, argv);
    
    MainWindow mainWindow;
    mainWindow.show();
    
    return app.exec();
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QMenu>
#include <QString>
#include "OccViewerWin.h"

class MainWindow : public QMainWindow {
   
    Q_OBJECT // Qt 元对象系统所需的宏

public:
    MainWindow(QWidget *parent = nullptr);
    void init();

private slots:
    // 统一处理菜单点击的槽函数
    void handleMenuAction();
    // 按钮点击的槽函数
    void onButtonClicked();
    // 打开文件
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值