从vtk/pcl源码中,分离pclVisilization 和 vtkQtWidget

news2024/12/29 9:47:12

背景:

vtk和pcl是优秀的三维开源引擎, 但是我们在工程中,需要集成到我们软件中,因而有了QVtkOpenglWidget等直接嵌入Qt程序的要求; 但是从vtk8.2之后,这部分源码又剔除出去了,随之影响的还有pcl 8.0系列之后的版本;

那么升级就遇到问题了, 如果在版本之前的编译我们还好说,但是随着这两个引擎的升级,新功能的迭代添加,为了适配之前的工程,我们就只能保持版本不动吗?这不可行! 这无疑是个巨大的痛点!

因而,本博主决定:从两个引擎中的源码中,分离pcl_visulization 和 vtkQtWidget,从而将渲染界面独立出来, 先看成果:

 

 

以上部分,就是抽离出来的两个库,独立编译并在qt中成功运行后的结果; 那么接下来就说说,移植之后的关键过程以及中间的坑

分离过程:

1.本博主是从pcl-1.13.1版本和vtk 8.2版本的 Rendering抽取

 

 

2.这里使用的是vstudio 2019 编译器:  分别创建 一个 QtPclVisulization 和  QtVtk3DWidget库

3.将这两个引擎的源码拷贝到工程目录下,并添加进来

                                                                 

 关键点一: 里面凡是涉及到 <pcl/visulization/xxxx> 的,统一改成: "pcl/visulization/xxxx" ;保证是从本地文件读取到的

关键点二:  pcl 中,记得把这些环境配置好!

 关键三: vtk的src中,会缺少下面这些文件,记得从 Rendering中,把这些数据引入;

 关键点四: 里面涉及到和全局环境中重叠的部分,因而,我们要把用到的类,放到自定义的命名空间中,我这里取的XPlote, 并注意把导出宏先去掉;

 关键点5: 在上述分离库都完成的情况下,我们要写demo, 要使用 XPLote::QVTKWidget,我们必须添加下面的头文件以及宏,来初始化OPenGl相关的资源,否则pcl/vtkwidget 都会失败.

 本博主就是在这一步被坑了很多次!!!! 切记

调用实例:

 

到此,我们的分离工作完成, 以后vtk或者pcl的库,任其升级变化,我们的上层软件交互都不会受到影响!

当然,其它的模块也可以这么做!

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

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

相关文章

基于SpringBoot的开源项目/demo汇总

一些基于SpringBoot的开源项目&#xff0c;方便大家学习&#xff0c;参考。持续更新&#xff0c;排名不分先后。也欢迎贡献&#xff08;回复此贴&#xff09;。 1、GitHub - Tencent/APIJSON: &#x1f3c6; 零代码、全功能、强安全 ORM 库 &#x1f680; 后端接口和文档零代码…

Power apps:做个弹窗

首先需要添加一个组件 接着在组件里插入一个矩形&#xff0c;背景我设为了白色&#xff0c;添加弹窗的内容&#xff0c;比如label&#xff0c;按钮之类的&#xff0c;覆盖在矩形上方 回到应用中&#xff0c;在需要出现弹窗的窗口插入这个自定义组件&#xff0c;设置它的Visible…

【Linux后端服务器开发】IP协议

目录 一、IP协议概述 二、协议头格式 三、网段划分 四、IP地址的数量限制 五、路由 一、IP协议概述 主机&#xff1a;配有IP地址&#xff0c;但是不进行路由控制的设备 路由器&#xff1a;即配有IP地址&#xff0c;又能进行路由控制 节点&#xff1a;主机和路由器的总称…

#Gitee 的 WebHooks 实现代码自动化部署#

1:安装git 2:php同步脚本 3:配置webhook 一&#xff1a;安装git服务 // 查看是否安装了git git --version// 如果未安装&#xff0c;执行安装命令 yum install git 2&#xff1a;编写同步PHP脚本 <?php //理发店钩子 error_reporting(1); set_time_limit(0); // 部署目…

AI 视频清晰化CodeFormer-Deepfacelab

CodeFormer 概述 (a) 我们首先学习一个离散码本和一个解码器&#xff0c;通过自重建学习来存储人脸图像的高质量视觉部分。(b) 使用固定的码本和解码器&#xff0c;我们引入了一个用于代码序列预测的 Transformer 模块&#xff0c;对低质量输入的全局人脸组成进行建模。此外&a…

经营简报echarts图

文章目录 效果图代码 效果图 代码 <template><div class"mainFirst"><div id"main" style"width: 100%; height: 500px"></div></div> </template><script> import * as echarts from "echarts…

对象转JSON字符串和JSON字符串拼接格式化后顺序问题

使用的是fastJson 实体类 转JSON字符串 格式化输出 转JSON字符串或者格式化输出后的顺序调整 注意这个和toString方法没有关系,完全按照 JSONType注解里的排序 上面是实体对象JSON格式化的排序问题 下面是JSON字符串拼接后的排序问题 拼接JSON字符串 恢复排序

优思学院|PPAP(生产零件批准过程)是什么?

生产零件批准过程&#xff08;PPAP&#xff09;是一种非常有效的工具&#xff0c;用于优化制造业供应链。PPAP是一个标准化的过程&#xff0c;它确保制造商可以提供高质量的零件和产品&#xff0c;并符合客户的要求和期望。在本文中&#xff0c;我们将深入探讨PPAP的重要性&…

数据库性能分析工具的使用

数据库性能分析工具的使用 在数据库调优中&#xff0c;我们的目标就是相应时间更快&#xff0c;吞吐量更大。利用宏观监控工具和微观日志分析可以帮我们快速找到调优的思路和方式。 1. 数据库服务器优化步骤 2. 查看系统性能参数 在MySQL种&#xff0c;可以使用show status …

卤味行业数据分析报告

在一个炎热的夏日午后&#xff0c;热气蒸腾的城市街头弥漫着一股令人垂涎欲滴的香气。这股香气源自一家招牌醒目的卤味小吃摊位&#xff0c;摊主技巧娴熟地将各式美味的食材浸泡在独特的卤汁中。这里没有花哨的招牌&#xff0c;却吸引了无数食客的目光和嘴巴。 卤制食品在中国烹…

vue新 学习 01

01.vue的安装于配置 首先这次从尚硅谷中学习的vue&#xff0c;要安装的ida是vscode&#xff0c;这里需要注意的是安装的版本是system版本的&#xff0c;否则有些功能就不能够实现。 安装vue的官方插件vue.devtools&#xff0c;这个会让vue的在浏览器上的测试变得很流畅很方便&a…

Linux CentOS快速安装VNC并开启服务

以下是在 CentOS 上安装并开启 VNC 服务的步骤&#xff1a; 安装 VNC 服务器软件包。运行以下命令&#xff1a; sudo yum install tigervnc-server 输出 $ sudo yum install tigervnc-server Loaded plugins: fastestmirror, langpacks Repository epel is missing name i…

UE4 Cesium for unreal 零碎学习笔记

1、要让对应目标移动到对应经纬度海拔上的前提是&#xff0c;先添加一个UCesiumGlobeAnchorComponent组件&#xff0c;组件内封装的有MoveToLongitudeLatitudeHeight函数&#xff0c;用于将组件的owner&#xff08;拥有者&#xff09;设置到对应经纬度高上去 2、Problem&#…

MySQL数据库关于表的一系列操作

MySQL中的数据类型 varchar 动态字符串类型&#xff08;最长255位&#xff09;&#xff0c;可以根据实际长度来动态分配空间&#xff0c;例如&#xff1a;varchar(100) char 定长字符串&#xff08;最长255位&#xff09;&#xff0c;存储空间是固定的&#xff0c;例如&#…

mysql用户添加

一、连接mysql服务 mysql -u root -p 二、查询用户表 use mysql &#xff1b; SELECT User, Host FROM mysql.user; 三、新增用户并授权 Create USER dev4rw% IDENTIFIED WITH mysql_native_password BY 新密码; GRANT ALL PRIVILEGES ON *.* TO dev4rw% WITH GRANT OP…

MySQL-Explain简版

文章目录 前言1.什么是explain2.explain有什么用3.explain怎么用理解explain的列代表的意思id列select_type列table列partitions列type列possible_keys列key列key_len列ref列rows列Extra列 前言 没必要记吧&#xff0c;忘了直接查 1.什么是explain 在select语句之前增加explai…

2023-7-26-第二十三式解释器模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

Apache Dubbo CVE-2021-36162 挖掘过程

01 漏洞背景 发现该漏洞的起因是在分析 CVE-2021-30181 的脚本注入补丁的时候&#xff0c;意外发现了几个已被修复的 yaml 反序列化漏洞&#xff0c;还以为是未公开的Nday&#xff0c;查询后发现其实对应的是 CVE-2021-30180 漏洞的修复代码。通过查看补丁可以知道&#xff0c…

uniapp使用echarts

uniapp使用echarts 1.下载资源包2.引入资源包3.代码示例注意事项 1.下载资源包 https://echarts.apache.org/zh/download.html 2.引入资源包 将资源包放入项目内 3.代码示例 <template><div style"width:100%;height:500rpx" id"line" ref&…

Docker--harbor Docker--registry 私有仓库部署与管理

官方组件registry搭建私有仓库 registry服务器设置 拉取 registry 镜像 docker pull registry 开启registries容器 docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 --restartalways --name registry registry:latest 客户机设置 添加私有仓库地址 使用配置文…