Windows occ(OpenCascade)编译 (occ+vtk+qt+cmake示例)

联动专区 2025-12-04 11:04:08 3183

一:编译环境

● Windows 11

● VS2019

● OCC7.6.0(下载链接:https://dev.opencascade.org/release)

● VTK9.1

● Qt5.15.2

下载页面

注:

下载圈1的文件或者其他压缩形式的文件圈2是occ依赖的第三方库,根据需要进行下载

二、配置OCC

如果编译不了,注意是3RDPRATY_ 这些key的问题。这些key对应的文件去官网下载配置就好了,然后设置value,唯一要注意的是路径不要用\分隔,改成用/,能少一些问题。

2.1 解压下载好的opencascade-7.6.0.tar.gz文件

2.2 回到上一级目录,新建个文件夹 3rdparty

打开https://dev.opencascade.org/resources/download/3rd-party-components该链接下载需要的第三方库(Qt Vtk自己去下载/编译自己需要的版本)

我下载的是框起来的这三个,都是vc2014 64bit的。

将他们下载到创建的3rdparty目录下并解压:

2.3 打开cmake-gui (我用的3.24)

配置下occ代码路径、生成路径:

点击左下方Configure,会出来弹窗提示创建build文件夹,点Yes即可,弹窗新界面,如下图即可,默认生成64位的库

点击finish后,出现如下界面:

将中上方的grouped复选框勾上,看着舒服:

2.4 第一次配置

2.4.1 USE group

将USE_VTK、USE_FREEIMAGE勾上

2.4.2 INSTALL group

更改install_dir目录(默认目录的话,那需要用管理员模式打开VS2019才能将编译好的文件 install 到该目录下)

2.4.3 BUILD group

把编译qt例子勾上

2.4.4 3rdparty group

需要设置value的地方

● 3rdparty_freetype_dir

○ 解压后的freetype-2.5.5-vc14-64根路径即可:D:/occ/build/freetype-2.5.5-vc14-64

● TLC_DIR和TK_DIR

○ 这两个都在同一个压缩包D:\occ\build\tcltk-86-64里

○ 也是使用根路径:D:/occ/build\tcltk-86-64

2.4.5 点击Configure

还需要配置如下信息

2.5 第二次配置

2.4.1 INSTALL

都不勾选

2.4.2 3rdparty

配置Qt dir

Qt Dir,这个去Qt安装目录找,相对位置如下:Qt\5.15.2\5.15.2\msvc2019_64\lib\cmake\Qt5

注意:最后一次Qt5目录下必须要有Qt5Config.cmake这个文件,不然cmake会失败的配置VTK dir

VTK目录层级如下:

其中bin、lib目录存放着debug release的文件

lib/cmake/vtk-9.1目录下,编译vtk install时生成的东西都不能少。尤其要注意有没有这俩文件:VTK-targets-debug.cmake、VTK-targets-release.cmake,这俩文件与编译类型有关,看名字就知道了。

设置的value相对路径如下:vtk_9.1/lib/cmake/vtk-9.1

3. 配置FreeImage dir

这个和配置FreeType dir一样,也是用解压后的路径的根路径:D:/occ/build/freeimage-3.17.0-vc14-64

4. ungrouped entries

先不配置

5.点击configure

这次应该没什么没配置的了

**注:

如果哪个dir没有设置,找下对应路径就好,尤其是Qt的,可能会让你设置qmake路径、Qt5LinguistTools路径这些。3RDPARTY组下如果提示没有找到XXX_include_dir,

a. 先看下XXX_DIR的路径用的是否用的/,不能用

b. 如果a设置的是对的,还是找不到,就把XXX_DIR后面的value删除掉,手动指定include目录,路径也用/,防止失败**

2.6 Generate生成

无视警告,打开project

三、编译OCC

点击批生成

把这四个勾上等待就行。

编译好了去自己设置的install目录,目录结构如下:

其中头文件在inc目录,动态库和lib文件在win64目录下(debug和release都在里面,文件夹后面有个d对应的是debug的文件)

四:CMake项目配置

目录层级

最外层的cmakelist.txt

cmake_minimum_required(VERSION 3.22)

project(XXX)

set(CMAKE_CXX_STANDARD 14)

# 解决msvc下 Qt乱码的问题

add_compile_options("/utf-8")

add_definitions(-DUNICODE -D_UNICODE)

# 多处理器编译,加快编译速度

add_compile_options(/MP)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)

set(CMAKE_AUTOUIC ON)

set(Qt5_DIR D:/0.software/DevTool/Qt/5.15.2/5.15.2/msvc2019_64/lib/cmake/Qt5)

find_package(Qt5 COMPONENTS

Core

Widgets

Gui

OpenGL REQUIRED)

set(VTK_DIR 3rdparty/vtk_9.1/lib/cmake/vtk-9.1)

find_package(VTK COMPONENTS

ChartsCore

CommonDataModel

FiltersGeneral

FiltersSources

FiltersModeling

GUISupportQt

RenderingCore

RenderingOpenGL2

RenderingFreeType

RenderingAnnotation

RenderingContextOpenGL2

InteractionStyle

InteractionWidgets REQUIRED

)

set(OpenCASCADE_DIR 3rdparty/OCCT/cmake)

find_package(OpenCASCADE

REQUIRED)

add_subdirectory(src)

vtk_module_autoinit(

TARGETS ${PROJECT_NAME}

MODULES ${VTK_LIBRARIES})

src目录下的cmake

project(XXX)

set(main_src

main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

include_directories(${OpenCASCADE_INCLUDE_DIR})

add_executable(${PROJECT_NAME}

${main_src}

)

target_link_libraries(

${PROJECT_NAME}

Qt5::Core Qt5::Widgets Qt5::Gui Qt5::Gui

${VTK_LIBRARIES}

${OpenCASCADE_LIBRARIES}

)

vtk_module_autoinit(

TARGETS ${PROJECT_NAME}

MODULES ${VTK_LIBRARIES})

main.cpp

#include

#include

#include

#include

#include

#include

#include

#include

VTK_MODULE_INIT(vtkRenderingOpenGL2)

VTK_MODULE_INIT(vtkInteractionStyle)

int main()

{

BRepPrimAPI_MakeBox box(2, 2, 2);

const TopoDS_Shape& shape = box.Shape();

vtkNew renderWindow; //创建一个vtk窗口

vtkNew render; //创建一个vtk渲染器

renderWindow->AddRenderer(render); //在窗口中加入渲染器

vtkNew iren; //创建一个vtk交互器

vtkNew istyle; //创建vtk相机交互器样式

iren->SetRenderWindow(renderWindow); //设置渲染窗口

iren->SetInteractorStyle(istyle); //设置交互器样式

vtkNew occSource; //创建一个可以被VTK使用的OCC数据源

occSource->SetShape(new IVtkOCC_Shape(shape)); //将shape添加到数据源中

vtkNew mapper; //创建一个VTK数据类型

mapper->SetInputConnection(occSource->GetOutputPort()); //创建一个管道,将occ数据导入到VTK数据中

vtkNew actor; //创建一个vtk actor

actor->SetMapper(mapper); //将vtk数据交给actor

render->AddActor(actor); //在渲染器中加入vtk actor

iren->Initialize(); //初始化交互器

iren->Start(); //开始运行交互器

return 0;

}

知乎 https://zhuanlan.zhihu.com/p/541211894 搬来的示例代码,运行:

搞定。

站点统计