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.hxxStandard_Real,Standard_Integer,Handle()、Handle(ClassName)內存管理、異常處理、基本數據類型,全局配置
TKMath數學庫gp_Pnt.hxx,gp_Trsf.hxx,Geom_Curve.hxxgp_Pnt(三維點),gp_Vec(向量),gp_Trsf(仿射變換),Geom_Line,Geom_Circle提供幾何和線性代數計算基礎;坐標系、向量、矩陣、幾何變換
TKBRepRrep拓撲結構相關庫TopoDS_Shape.hxx,BRep_Builder.hxx,TopExp_ExplorerTopoDS_Shape,TopoDS_Compound,BRep_Builder::MakeFace()管理邊界表示法(BRep)的拓撲結構
TKV3d可視化相關庫V3d_View.hxxV3d_View::FitAll()、V3d_View::Rotation()管理三維視圖、交互和顯示屬性;處理視圖投影、光照、渲染模式
TKOpenGlOpenGL的封裝、抽象、集成OpenGl_GraphicDriver.hxxOpenGl_GraphicDriver(OpenGL圖形驅動)提供 OpenGL 的抽象接口;管理 OpenGL 上下文、渲染管線
TKService窗口服務庫Aspect_Window.hxx,Aspect_DisplayConnection.hxxAspect_DisplayConnection(顯示連接)管理窗口系統集成(如 X11、Win32),處理事件循環、窗口屬性
TKPrim基本幾何體庫BRepPrimAPI_MakeBox.hxxBRepPrimAPI_MakeBox(創建立方體)創建基本幾何體(立方體、球體、圓柱體等),參數化幾何體的構造
TKBO布爾操作BRepAlgoAPI_Fuse.hxx,BRepAlgoAPI_Cut.hxxBRepAlgoAPI_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_InteractiveContextTKPrim      # 基本圖形支持
)

當然,你可以一次性引入足夠的庫

# 查找 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_InteractiveContextTKPrim      # 基本圖形支持
)

三、上代碼

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();// 打開文件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81834.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++類與對象—下:夯實面向對象編程的階梯

9. 賦值運算符重載 9.1 運算符重載 在 C 里&#xff0c;運算符重載能夠讓自定義類型的對象像內置類型那樣使用運算符&#xff0c;這極大地提升了代碼的可讀性與可維護性。運算符重載本質上是一種特殊的函數&#xff0c;其函數名是 operator 加上要重載的運算符。 下面是運算…

【深度學習-Day 6】掌握 NumPy:ndarray 創建、索引、運算與性能優化指南

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

工程師 - 汽車分類

歐洲和中國按字母對汽車分類&#xff1a; **軸距**&#xff1a;簡單來說&#xff0c;就是前輪中心點到后輪中心點之間的距離&#xff0c;也就是前輪軸和后輪軸之間的長度。根據軸距的大小&#xff0c;國際上通常把轎車分為以下幾類&#xff08;德國大眾汽車習慣用A\B\C\D分類&a…

[低代碼 + AI] 明道云與 Dify 的三種融合實踐方式詳解

隨著低代碼平臺和大語言模型工具的不斷發展,將企業數據與智能交互能力融合,成為提高辦公效率與自動化水平的關鍵一步。明道云作為一款成熟的低代碼平臺,Dify 則是一個支持自定義工作流的開源 LLM 應用框架。兩者結合,可以實現靈活、高效的智能化業務處理。 本文將詳解明道…

鼠標懸浮特效:常見6種背景類懸浮特效

鼠標懸浮特效&#xff1a;常見6種背景類懸浮特效 前言背景閃現效果預覽代碼展示 元素陰影效果預覽代碼展示 元素懸浮陰影效果預覽代碼展示 元素上浮陰影效果預覽代碼展示 元素邊框陰影效果預覽代碼展示 元素卷角效果預覽代碼展示 結語 前言 在之前的文章中&#xff0c;我們介紹…

[人機交互]理解與概念化交互

零.本章重點&#xff08;理解和分析用戶問題&#xff09; – 解釋“問題空間”的概念和含義 – 解釋如何概念化交互 – 描述什么是概念模型 – 討論將界面隱喻作為概念模型的利弊 – 討論界面具體化和抽象化各自的優缺點 – 概述概念設計和實際設計的關系 一.理解問題空間 簡單…

9.城市基礎設施更新工程

9.1 道路改造施工 9.1.1 道路改造施工內容 瀝青、水泥混凝土、砌塊路面、人行步道、綠化照明、附屬設施、交通標志、瀝青路面材料的再生利用 9.1.2 道路改造施工技術 1.瀝青路面病害及微表處理 1.病害處理 裂縫處理 10mm以內專業灌縫材料或熱瀝青灌縫、潮濕時乳化瀝青灌封…

Milvus(11):動態字段、可歸零和默認值

1 動態字段 Collections 的 Schema 中定義的所有字段都必須包含在要插入的實體中。如果希望某些字段是可選的&#xff0c;可以考慮啟用動態字段。 1.1 概述 在 Milvus 中&#xff0c;可以通過設置 Collections 中每個字段的名稱和數據類型來創建 Collections Schema。向 Schem…

LeetCode41?缺失的第一個正數

關聯LeetCode題號41 本題特點 數組&#xff0c;哈希表 本題思路 找缺失的最小正數&#xff0c;看舉例說明缺失的正數&#xff0c;一種情況是連續的最小的正數&#xff0c;一種是缺失連續但不是最小的正數驗證數組內數組是否連續&#xff0c;可以通過 nums[i]1 是否存nums組…

補題( Convolution, 二維卷積求輸出矩陣元素和最大值)

來源&#xff1a;https://codeforces.com/gym/105231/problem/H 題目描述&#xff1a; 一、題目分析 本題涉及深度學習中的二維卷積操作。給定一個nm的二維輸入矩陣I和一個kl的核矩陣K &#xff0c;通過特定公式計算得到(n - k 1)(m - l 1)的輸出矩陣O &#xff0c;要求在…

【Java ee初階】多線程(7)

一、線程池 線程池的一些參數&#xff1a; corePoolSize&#xff1a;核心線程數量 maximumPoolSize:核心線程數量臨時線程數量 上述是“java 的線程池策略”&#xff08;其他語言&#xff0c;其他庫的線程池可能不同&#xff09; keepAliveTime :臨時線程的存活時間.臨時線程…

Linux 常用指令詳解

Linux 操作系統中有大量強大的命令行工具&#xff0c;下面我將分類介紹一些最常用的指令及其用法。 ## 文件與目錄操作 ### 1. ls - 列出目錄內容 ls [選項] [目錄名] 常用選項&#xff1a; - -l&#xff1a;長格式顯示&#xff08;詳細信息&#xff09; - -a&#xff1a;顯…

uv安裝及使用

windows安裝參考&#xff1a; 什么是python uv&#xff0c;如何在windows上安裝uv&#xff0c;基礎的用法有哪些&#xff1f;_windows安裝uv-CSDN博客 https://zhuanlan.zhihu.com/p/6776864377 使用方式 方式1&#xff1a; 創建uv虛擬環境->激活環境->安裝依賴&…

C#實現Socket通信:基于TCP/IP協議的網絡編程

TCP/IP網絡模型 最上層的是應用層&#xff0c;也就是我們日常可以接觸到的&#xff0c;它會給數據添加對應的頭部&#xff0c;并傳輸給傳輸層&#xff0c;應用層是我們日常會接觸到的&#xff0c;比如HTTP&#xff0c;FTP&#xff0c;Telnet&#xff0c;DNS&#xff0c;SMTP。…

哈希算法、搜索算法與二分查找算法在 C# 中的實現與應用

在計算機科學中&#xff0c;哈希算法、搜索算法和二分查找算法是三個非常基礎且常用的概念。它們分別在數據存儲、數據查找、以及高效檢索等場景中起著至關重要的作用。在 C# 中&#xff0c;這些算法的實現和使用也十分簡便。本文將詳細講解這三種算法的原理、應用以及 C# 中的…

AI日報 · 2025年5月05日|雅詩蘭黛與微軟合作成立 AI 創新實驗室,加速美妝產品研發與營銷

1、蘋果與 Anthropic 深化合作&#xff0c;內部測試 AI 驅動的新版 Xcode 據多方報道&#xff0c;蘋果公司正與人工智能初創公司 Anthropic 合作&#xff0c;開發集成 AI 功能的新一代 Xcode 開發平臺。該平臺旨在利用 Anthropic 強大的 Claude Sonnet 模型&#xff0c;為開發…

python celery框架結合django的使用

學習目標&#xff1a; 通過文章了解celery的運行機制以及如何結合django去使用 熟悉celery的運行原理屬性celery在django項目當中的配置如何啟動運行celery框架 學習內容&#xff1a; 熟悉celery的運行原理&#xff0c;簡單來說 Celery 是一個“任務排隊機后臺處理器”。幫你…

滑動窗口leetcode 904

代碼&#xff1a; class Solution { public:int totalFruit(vector<int>& fruits) {int n fruits.size();unordered_map<int,int> window_type_count;int left 0;int ans 0;for(int right 0; right <n;right){while(window_type_count.size() 2 &&…

用可視化學習逆置法

1.逆置法思路 目標&#xff1a;將這個彩色數組向右旋轉3步 &#x1f534;1 → &#x1f7e0;2 → &#x1f7e1;3 → &#x1f7e2;4 → &#x1f535;5 → &#x1f7e3;6 → ?7我們希望得到 &#x1f535;5 → &#x1f7e3;6 → ?7 → &#x1f534;1 → &#x1f7e0;…

Cisco Packet Tracer 選項卡的使用

目錄 設備Config選項卡的使用 Realtime and Simulation模式&#xff08;數據包跟蹤與分析&#xff09; 設備Desktop選項卡的使用 設備Config選項卡的使用 Hostname NVRAM Startup Config----Load 加載 INTERFACE 點擊on Save 如果&#xff0c;不把Running Config保存為Sta…