OCCT7.7.0 使用VTK9.2.0

1.前言

OCCT使用的VTK版本是VTK6.1.0,这个版本已经比较老了,如果要使用新版本的VTK,则需要自己引入新版本VTK,自己编译,我这里也比较好奇,为什么OCCT不升级一下VTK版本,下面自己来引入VTK9.2.0版本加入OCCT7.7.0

2.OCCT7.7.0使用VTK9.2.0

2.1.准备工作

1.下载编译VTK9.2.0源码,生成二进制开发包

2.下载OCCT7.7.0并配置编译

2.2.TKIVtkDraw与TKIVtk重编译

  OCCT7.7.0中与VTK相关的两个项目是TKIVtkDrawTKIVtk ,只需要更新这两个项目就可以了,具体步骤如下图

1.将VTK9.2.0的开发包拷贝到OCCT7.7.0的指定目录

2.修改OCCT7.7.0的vs代码配置 重新编译这两个项目

主要是修改VS项目的头文件包含目录和链接的lib库目录和名称,如果没有什么异常那就可以用了(一般不可能没异常。。。)

3.异常问题修复

我这里遇见的异常情况如下,出现这种问题,一般是链接库没引入,导致找不到函数符号,找到包含对应函数的lib库,引入即可。

但是OCCT7.7.0代码里面需要引入的却是一个名字不一样的库

OCCT7.7.0需要引入的lib库名称vtkRenderingOpenGL-9.2.lib

VTK9.2.0生成的lib库中只有vtkRenderingOpenGL2-9.2.lib

why?   看如下图代码

这里是没有 定义VTK_OPENGL2_BACKEND 宏的,我找了一下编译VTK9.2.0的cmake配置,里面也没有发现这个配置,以前的版本貌似有,我这里明显会执行

VTK_MODULE_INIT(vtkRenderingOpenGL)

这里是要加载vtkRenderingOpenGL-9.2.lib库的,but 我只有vtkRenderingOpenGL2-9.2.lib

so?我自己将代码改为

// Initialization of VTK object factories.
// Since VTK 6 the factory methods require "auto-initialization" depending on
// what modules are enabled at VTK configure time.
// Some defines are needed in order to make the factories work properly.
#ifdef VTK_OPENGL2_BACKEND
VTK_MODULE_INIT(vtkRenderingOpenGL2)
#else
VTK_MODULE_INIT(vtkRenderingOpenGL2)
#endif
VTK_MODULE_INIT(vtkInteractionStyle)

这样会不会影响其它地方呢,我先做了个基本测试,使用编译好的新版本OCCT7.7.0库加入到demo程序中,在QT5.12.9程序中实现一个简单的VTK渲染OCCT的TopoDS_Shape的案例,

测试效果如下:

部分代码如下:

//绘制OCC测试
void VTKShowDlg::slotShowOCC()
{//OCCShapeShowTopoDS_Shape aTopoBox = BRepPrimAPI_MakeBox(3.0, 4.0, 5.0).Shape();showOCCShape(aTopoBox);//OCCShowDoc}//渲染OCC TopoDS_Shape
void VTKShowDlg::showOCCShape(TopoDS_Shape &OCCShape)
{vtkNew<IVtkTools_ShapeDataSource> boxSource;boxSource->SetShape(new IVtkOCC_Shape(OCCShape));vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputConnection(boxSource->GetOutputPort());vtkSmartPointer<vtkActor> OCCShapeActor = vtkSmartPointer<vtkActor>::New();OCCShapeActor->SetMapper(mapper);vtkSmartPointer<vtkRenderer> OCCShapeRender = vtkSmartPointer<vtkRenderer>::New();OCCShapeRender->AddActor(OCCShapeActor);OCCShapeRender->SetBackground(0.1, 0.2, 0.4);m_VTKView->m_CurRenderWindow->AddRenderer(OCCShapeRender);m_VTKView->m_CurRenderWindow->Render();
}

通过测试基本功能是没什么问题,暂时没做其它进一步测试,不知道这样改是否稳定可行,以后探讨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapUtil

HuTool包中的MapUtil return ResponseEntity.ok(MapUtil.<String, Object>builder().put("code", exception.getCode()).put("msg", exception.getDefaultMessage()).build());这是一段hutool工具包中的map构建&#xff0c;我感慨是不理解这样写的意…

STM32项目实战:基于STM32U5的火灾报警系统(LVGL),附项目教程/源码

《火灾报警系统_STM32U5》项目完整文档、项目源码&#xff0c;点击下方链接免费领取。 项目资料领取https://s.c1ns.cn/F5XyU STM32项目实战之“火灾报警系统”&#xff08;基于STM32U5&#xff09; 今天小编来分享一个《火灾报警系统》的项目案例&#xff0c;硬件平台是STM…

C++初阶 --- 类和对象(1)

类和对象&#xff08;1&#xff09; 一、类的相关内容1.访问限定符2.class关键字与struct关键字的区别3.类域 二、this指针三、成员函数存放在哪里&#xff1f;1. 函数的存放位置2. 练习题 一、类的相关内容 1.访问限定符 &#xff08;1&#xff09;C⼀种实现封装的⽅式&…

8. 基于 Redis 实现限流

在高并发的分布式系统中&#xff0c;限流是保证服务稳定性的重要手段之一。通过限流机制&#xff0c;可以控制系统处理请求的频率&#xff0c;避免因瞬时流量过大导致系统崩溃。Redis 是一种高效的缓存数据库&#xff0c;具备丰富的数据结构和原子操作&#xff0c;适合用来实现…

Ubuntu 22.04 安装配置opencv

​ OpenCV下载:https://opencv.org/releases/ ​编译与安装 安装cmake OpenCV需要使用cmake进行编译 sudo apt-get install cmake安装依赖 sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev lib…

LeetCode 216-组合总数Ⅲ

题目链接&#xff1a;LeetCode216 欢迎留言交流&#xff0c;每天都会回消息。 class Solution {List<List<Integer>> rs new ArrayList<>();LinkedList<Integer> path new LinkedList<>();public List<List<Integer>> combinati…

Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面&#xff0c;每个页…

Github配置ssh key原理及操作步骤

文章目录 配置SSH第一步&#xff1a;检查本地主机是否已经存在ssh key第二步&#xff1a;生成ssh key第三步&#xff1a;获取ssh key公钥内容第四步&#xff1a;Github账号上添加公钥第五步&#xff1a;验证是否设置成功验证原理 往github上push项目的时候&#xff0c;如果走ht…

爬虫学习8

Frida是一个动态代码插桩工具&#xff0c;允许开发者在运行时修改和调试应用程序 import ...&#xff1a;这行代码表示导入所需的模块或库&#xff0c;但具体的导入内容在图片中被省略了。 rdev frida.get_remote_device()&#xff1a;这行代码获取一个远程设备实例&#xff…

【动手学电机驱动】STM32-FOC(6)基于 IHM03 的无感方波控制

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

图像匹配验证码自动检测:基于YOLOv10和传统图像匹配算法

图像匹配验证码自动检测&#xff1a;基于YOLOv10和传统图像匹配算法 图像匹配验证码自动检测&#xff1a;基于YOLOv10和传统图像匹配算法 引言图像采集YOLOv10目标检测图像匹配1.计算两张图像的灰度直方图相似性2. RGB通道分离后的直方图相似度计算3. 感知哈希算法3. 均值哈希算…

POI word转pdf乱码问题处理

1.使用poi 转换word文档成pdf 导入依赖 <dependency><groupId>com.aspose</groupId><artifactId>words</artifactId><version>16.8.0</version></dependency>2.代码实现: SneakyThrowspublic void wordToPdf(String docPath,…

平替 Spring 正当时!Solon v3.0.3 发布

Solon 框架&#xff01; Java “新式”应用开发框架。开放原子开源基金会&#xff0c;孵化项目。从零开始构建&#xff08;非 java-ee 架构&#xff09;&#xff0c;有灵活的接口规范与开放生态。 追求&#xff1a; 更快、更小、更简单提倡&#xff1a; 克制、简洁、高效、开…

C03S03-Linux网络之DNS服务器

一、DNS 1. DNS概述 DNS&#xff08;域名系统、Domain Name System&#xff09;是将域名和IP地址相互映射的一个分布式数据库&#xff0c;方便用户访问互联网。IP地址是互联网上所有设备的唯一标识&#xff0c;设备之间的通信依赖于IP地址。DNS使得用户在访问网站时不需要记住…

华为云全球加速GA该在什么场景使用呢?

在全球化的商业环境中&#xff0c;企业面临着如何快速、稳定地扩展全球业务的挑战。华为云全球加速&#xff08;GA&#xff09;作为一款高效的全球网络加速服务&#xff0c;致力于帮助企业提升全球用户的访问体验&#xff0c;确保业务的稳定运行。九河云来和大家介绍一下什么是…

鸿蒙系统的发展及开发者机遇

鸿蒙系统&#xff08;HarmonyOS&#xff09;凭借其分布式架构和跨设备协同能力&#xff0c;展现出强大的发展潜力&#xff0c;在智能手机、智能穿戴、车载、家居等行业领域应用日益广泛&#xff0c;已逐渐形成与安卓、iOS 三足鼎立的市场格局。 开发者面临的挑战 1. 技术适应与…

WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用

在Prism框架中&#xff0c;IContainerExtension和IRegionManager扮演着重要的角色&#xff0c;具体作用如下&#xff1a; IContainerExtension IContainerExtension接口是Prism 7中引入的&#xff0c;用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…

【C++】string(一)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的string类&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. 标准库中的string类1.1 string类(了解)1.2 string类的常用接口说明(A) string类对象的…

qt QSyntaxHighlighter详解

1、概述 QSyntaxHighlighter是Qt文本处理框架中的一个强大工具&#xff0c;它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则&#xff0c;QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性…

第二天python笔记

Print(内容) Print(value,…,sep ,end\,n,fileNone) 字符串不管用几个单引号或双引号都能输出 sep是分隔符&#xff0c;逗号 默认显示空格分隔, 号可以连接前后’字符串’&#xff0c;不用写sep end是结束语 Chr()ascll值转字母文字 Ord()查找这个的ascll值 #单行注释,快…