当前位置: 首页 > news >正文

pcl+vtk(十二)使用vtkPolyData创建点、线、面(不规则面)、三角带

一、前言

vtkPlaneSource创建平面,只可以创建平行四边形的平面,根据一个起点和两个终点创建法向量创建平面。但是当有创建多个点围成不规则平面的需求时,该怎么创建显示呢?

在网上查了资料,可以使用vtkPolyData拓扑结构。

二、拓扑结构

下面这篇文章很详细的说明了相关的知识理论,可以参考学习。

VTK 初步 (2) ----- 基本数据结构_vtkcellarray-CSDN博客

三、代码示例

1.点

//点
void Widget::on_point_clicked()
{vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();vtkIdType pid[12] = {0,1,2,3,4,5,6,7,8,9,10,11};points->InsertNextPoint(1, 1, 1);points->InsertNextPoint(1, 2, 0);points->InsertNextPoint(1, 1, -1);points->InsertNextPoint(1, -1, -1);points->InsertNextPoint(1, -2, 0);points->InsertNextPoint(1, -1, 1);points->InsertNextPoint(-1, 1, 1);points->InsertNextPoint(-1, 2, 0);points->InsertNextPoint(-1, 1, -1);points->InsertNextPoint(-1, -1, -1);points->InsertNextPoint(-1, -2, 0);points->InsertNextPoint(-1, -1, 1);cellArray->InsertNextCell(12,pid);vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);polyData->SetVerts(cellArray);//点vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->GetProperty()->SetColor((float)255/255, (float)255/255, (float)0/255);actor->GetProperty()->SetPointSize(5);actor->SetMapper(mapper);renderer->AddActor(actor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
}

2.线

//线
void Widget::on_line_clicked()
{vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();vtkIdType pid[13] = {0,1,2,3,4,5,6,7,8,9,10,11,12};points->InsertNextPoint(1, 1, 1);points->InsertNextPoint(1, 2, 0);points->InsertNextPoint(1, 1, -1);points->InsertNextPoint(1, -1, -1);points->InsertNextPoint(1, -2, 0);points->InsertNextPoint(1, -1, 1);points->InsertNextPoint(-1, -1, 1);points->InsertNextPoint(-1, -2, 0);points->InsertNextPoint(-1, -1, -1);points->InsertNextPoint(-1, 1, -1);points->InsertNextPoint(-1, 2, 0);points->InsertNextPoint(-1, 1, 1);points->InsertNextPoint(1, 1, 1);cellArray->InsertNextCell(13,pid);vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);polyData->SetLines(cellArray);//线vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->GetProperty()->SetColor((float)255/255, (float)0/255, (float)255/255);actor->GetProperty()->SetLineWidth(3);actor->SetMapper(mapper);renderer->AddActor(actor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
}

3.面

//面
void Widget::on_poly_clicked()
{vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();vtkIdType pid[6] = {0,1,2,3,4,5};points->InsertNextPoint(1, 1, 1);points->InsertNextPoint(1, 2, 0);points->InsertNextPoint(1, 1, -1);points->InsertNextPoint(1, -1, -1);points->InsertNextPoint(1, -2, 0);points->InsertNextPoint(1, -1, 1);cellArray->InsertNextCell(6,pid);vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);polyData->SetPolys(cellArray);//面vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->GetProperty()->SetColor((float)0/255, (float)255/255, (float)255/255);actor->SetMapper(mapper);renderer->AddActor(actor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
}

4.多个面

//多个面
void Widget::on_cube_clicked()
{vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();vtkIdType pid[18] = {0,1,2,0,2,3,0,3,4,0,4,5,0,5,6,0,6,1};points->InsertNextPoint(0, 0, 0);points->InsertNextPoint(-1, -1, 1);points->InsertNextPoint(-1, -2, 0);points->InsertNextPoint(-1, -1, -1);points->InsertNextPoint(-1, 1, -1);points->InsertNextPoint(-1, 2, 0);points->InsertNextPoint(-1, 1, 1);cellArray->InsertNextCell(18,pid);vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);polyData->SetPolys(cellArray);//面vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->GetProperty()->SetColor((float)128/255, (float)128/255, (float)128/255);actor->SetMapper(mapper);renderer->AddActor(actor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
}

5.三角带

//三角带
void Widget::on_strip_clicked()
{vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();vtkIdType pid[12] = {0,1,2,3,4,5,6,7,8,9,10,11};points->InsertNextPoint(1, 1, 1);points->InsertNextPoint(1, 2, 0);points->InsertNextPoint(1, 1, -1);points->InsertNextPoint(1, -1, -1);points->InsertNextPoint(1, -2, 0);points->InsertNextPoint(1, -1, 1);points->InsertNextPoint(-1, 1, 1);points->InsertNextPoint(-1, 2, 0);points->InsertNextPoint(-1, 1, -1);points->InsertNextPoint(-1, -1, -1);points->InsertNextPoint(-1, -2, 0);points->InsertNextPoint(-1, -1, 1);cellArray->InsertNextCell(12,pid);vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);polyData->SetStrips(cellArray);//三角带vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->GetProperty()->SetColor((float)255/255, (float)128/255, (float)128/255);actor->GetProperty()->SetPointSize(3);actor->SetMapper(mapper);renderer->AddActor(actor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
}

总体

相关文章:

pcl+vtk(十二)使用vtkPolyData创建点、线、面(不规则面)、三角带

一、前言 vtkPlaneSource创建平面&#xff0c;只可以创建平行四边形的平面&#xff0c;根据一个起点和两个终点创建法向量创建平面。但是当有创建多个点围成不规则平面的需求时&#xff0c;该怎么创建显示呢&#xff1f; 在网上查了资料&#xff0c;可以使用vtkPolyData拓扑结…...

51单片机的智能浇花系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11温湿度模块DS1302时间模块继电器驱动水泵模块光敏传感器等模块构成。适用于智能浇花、自动浇花、智能盆栽等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、土壤温湿度、光照强度等信息 2、DHT11采集温湿度信…...

为什么 MQTT 对于构建联网汽车至关重要

汽车行业正在接受构建联网汽车的想法。他们看到了利用车辆遥测数据创造新收入机会并打造更好用户体验的机会。然而&#xff0c;实施可扩展以支持数百万辆汽车的联网汽车服务可能会带来一些挑战。 对于大多数联网汽车服务&#xff0c;汽车和云之间需要进行双向通信。汽车将遥测…...

CSIT883系统分析与项目管理——Lecture2重点概念

一、前言 这个是本人的学习笔记,如果大家喜欢可以多多关注吧! 二、重点概念 1.项目经理及其团队必须认识到任何项目对整个系统或组织的利益和需求的影响,而不是关注项目的直接问题。 2.系统愿景文件的目的是什么? 系统愿景文档是描述问题、解决方案、系统目标等的简短声…...

【linux】基本指令(中篇)

echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件&#xff0c;就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候&#xff0c;原文件内容不会被覆盖而是追加 more指令 10.more指令…...

Centos Download

前言 CentOS Linux 是一个社区支持的发行版&#xff0c;源自 CentOS git for Red Hat Enterprise Linux &#xff08;RHEL&#xff09; 上免费提供给公众的源代码。因此&#xff0c;CentOS Linux 的目标是在功能上与 RHEL 兼容。CentOS 计划主要更改组件以删除上游供应商的品牌…...

k8s集群资源监控工具metrics-server安装

1、下载镜像 docker pull swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/metrics-server:v0.6.22、在任一一个主节点上创建角色&#xff0c;执行下面语句 kubectl create clusterrolebinding kube-proxy-cluster-admin --clusterrolecluster-admin --usersystem:kube-…...

物流单打印模板下载,佳易王物流托运单打印软件

物流单打印模板下载&#xff0c;佳易王物流托运单打印软件 上图是常用的物流单打印模板&#xff0c;佳易王物流单打印软件打印格式可以根据需要定制更改。 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff…...

TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖

11月22日&#xff0c;由CSA&#xff08;连接标准联盟&#xff09;中国成员组主办&#xff0c;CSHIA承办的“Matter中国区开发者大会2023” 于杭州举行。 会上&#xff0c;连接标准联盟中国成员组主席宿为民博士、连接标准联盟亚洲区架构师杨莉女士、CSHIA秘书长|中智盟投资创始…...

java 事务提交(批量处理数据,单个批次执行完成后直接提交事务)

方法一&#xff1a;接口REQUIRES_NEW 实现单个事务提交 方式1: for (TIrBuPBom buPBom : batchList) {// 查询待处理的批次数据List<TIrBuPBom> pBomList pBomMapperBase.list(new LambdaQueryWrapper<TIrBuPBom>().eq(TIrBuPBom::getBatchNo, buPBom.getBatchNo…...

logging.config 日志模块

logging 日志模块 简单应用&#xff1a; import logging logging.warning(警告&#xff01;) # 输出结果&#xff1a; WARNING:root:警告&#xff01;1. 日志等级 - debug 调试 10 最详细的日志信息&#xff0c;典型应用场景是 问题诊断 - info 普通信息 20 信息详细…...

win10+ vs2017用cmake编译geos3.5.1

参考教程&#xff1a;使用CMake编译Geos3.5.0_cmake geos-CSDN博客 注意事项&#xff1a; 报错&#xff1a;在使用cmake编译geos-3.5.1的时候&#xff0c;会出现报错&#xff1a; CMake Error at CMakeLists.txt:330 (include): include could not find load file GenerateSou…...

优化数据分析——理解与运用各类指标

写在开头 数据分析在当今信息时代扮演着至关重要的角色&#xff0c;而指标则是我们理解数据、揭示模式、支持决策的关键工具。本文将深入讨论各类指标的应用场景和解读方法&#xff0c;以帮助更全面、深入地理解数据。 1. 中心趋势指标 1.1 均值&#xff1a;更深层次的理解 …...

JS实现数字千分位分割(手写纯享版)

简介 在前端开发中&#xff0c;我们经常需要对数字进行格式化&#xff0c;其中一种常见的需求就是将数字表示为千分位格式&#xff0c;以提高可读性。本文将介绍如何使用 JavaScript 实现一个简单而有效的千分位格式化函数。 千分位格式化的需求 千分位格式化是一种将数字中…...

入门指南:介绍Python库——Pandas

个人网站 本文首发于公众号小肖学数据分析 Pandas是一个功能强大、灵活易用的Python数据处理库。 无论你是数据分析师、数据科学家还是Python初学者&#xff0c;掌握Pandas都将为你提供高效、便捷的数据处理和分析能力。 本文将为你详细介绍Pandas的基本概念、常用功能和使…...

数据库语句执行流程(查询原理)SQL

SQL作为一种数据库编程语言&#xff0c;其执行过程大致为&#xff0c;终端上输入SQL语句 会传输到数据库服务器&#xff0c;然后SQL语句在服务器内经过解析器的检查和翻译&#xff0c;优化器的执行效率提升&#xff0c;在执行器中通过存储引擎提供的数据给出结果。详细过程如下…...

FileReader与URL.createObjectURL实现图片、视频上传预览

之前做图片、视频上传预览常用的方案是先把文件上传到服务器&#xff0c;等服务器返回文件的地址后&#xff0c;再把该地址字符串赋给img或video的src属性&#xff0c;这才实现所谓的文件预览。实际上这只是文件“上传后再预览”&#xff0c;这既浪费了用户的时间&#xff0c;也…...

基于python+Django+SVM算法模型的文本情感识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 简介2. 技术栈3. 系统架构4. 关键模块介绍5. 如何运行 二、功能三、系统四. 总结 一项目简介 # 基于 Python Django SVM 算法模型的文本情感识别系统介…...

数据结构之栈与队列习题详解解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.概念题…...

C++ 动态规划 DP教程 (一)思考过程(*/ω\*)

动态规划是一种思维方法&#xff0c;大家首先要做的就是接受这种思维方法&#xff0c;认同他&#xff0c;然后再去运用它解决新问题。 动态规划是用递推的思路去解决问题。 首先确定问题做一件什么事情&#xff1f; 对这件事情分步完成&#xff0c;分成很多步。 如果我们把整件…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...