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

一:编译环境

● Windows 11
● VS2019
● OCC7.6.0(下载链接:https://dev.opencascade.org/release)
● VTK9.1
● Qt5.15.2
下载页面
在这里插入图片描述

注:

  1. 下载圈1的文件或者其他压缩形式的文件
  2. 圈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

  1. 配置Qt dir
    Qt Dir,这个去Qt安装目录找,相对位置如下:Qt\5.15.2\5.15.2\msvc2019_64\lib\cmake\Qt5
    注意:最后一次Qt5目录下必须要有Qt5Config.cmake这个文件,不然cmake会失败的
  2. 配置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
这次应该没什么没配置的了

**注:

  1. 如果哪个dir没有设置,找下对应路径就好,尤其是Qt的,可能会让你设置qmake路径、Qt5LinguistTools路径这些。
  2. 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 <BRepPrimAPI_MakeBox.hxx>

#include <IVtkTools_ShapeDataSource.hxx>

#include <vtkAutoInit.h>
#include <vtkRenderer.h>
#include <VtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPolyDataMapper.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
int main()
{
  BRepPrimAPI_MakeBox box(2, 2, 2);
  const TopoDS_Shape& shape = box.Shape();

  vtkNew<vtkRenderWindow> renderWindow; //创建一个vtk窗口
  vtkNew<vtkRenderer> render; //创建一个vtk渲染器
  renderWindow->AddRenderer(render); //在窗口中加入渲染器

  vtkNew<vtkRenderWindowInteractor> iren; //创建一个vtk交互器
  vtkNew<vtkInteractorStyleTrackballCamera> istyle; //创建vtk相机交互器样式

  iren->SetRenderWindow(renderWindow); //设置渲染窗口
  iren->SetInteractorStyle(istyle); //设置交互器样式

  vtkNew<IVtkTools_ShapeDataSource> occSource; //创建一个可以被VTK使用的OCC数据源
  occSource->SetShape(new IVtkOCC_Shape(shape)); //将shape添加到数据源中

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

  mapper->SetInputConnection(occSource->GetOutputPort()); //创建一个管道,将occ数据导入到VTK数据中
  
  vtkNew<vtkActor> 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 搬来的示例代码,运行:
在这里插入图片描述

搞定。

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值