当前位置: 首页 > 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;分成很多步。 如果我们把整件…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...