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创建平面,只可以创建平行四边形的平面,根据一个起点和两个终点创建法向量创建平面。但是当有创建多个点围成不规则平面的需求时,该怎么创建显示呢? 在网上查了资料,可以使用vtkPolyData拓扑结…...
51单片机的智能浇花系统【含proteus仿真+程序+报告+原理图】
1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11温湿度模块DS1302时间模块继电器驱动水泵模块光敏传感器等模块构成。适用于智能浇花、自动浇花、智能盆栽等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间、土壤温湿度、光照强度等信息 2、DHT11采集温湿度信…...
为什么 MQTT 对于构建联网汽车至关重要
汽车行业正在接受构建联网汽车的想法。他们看到了利用车辆遥测数据创造新收入机会并打造更好用户体验的机会。然而,实施可扩展以支持数百万辆汽车的联网汽车服务可能会带来一些挑战。 对于大多数联网汽车服务,汽车和云之间需要进行双向通信。汽车将遥测…...
CSIT883系统分析与项目管理——Lecture2重点概念
一、前言 这个是本人的学习笔记,如果大家喜欢可以多多关注吧! 二、重点概念 1.项目经理及其团队必须认识到任何项目对整个系统或组织的利益和需求的影响,而不是关注项目的直接问题。 2.系统愿景文件的目的是什么? 系统愿景文档是描述问题、解决方案、系统目标等的简短声…...
【linux】基本指令(中篇)
echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件,就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候,原文件内容不会被覆盖而是追加 more指令 10.more指令…...
Centos Download
前言 CentOS Linux 是一个社区支持的发行版,源自 CentOS git for Red Hat Enterprise Linux (RHEL) 上免费提供给公众的源代码。因此,CentOS Linux 的目标是在功能上与 RHEL 兼容。CentOS 计划主要更改组件以删除上游供应商的品牌…...
k8s集群资源监控工具metrics-server安装
1、下载镜像 docker pull swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/metrics-server:v0.6.22、在任一一个主节点上创建角色,执行下面语句 kubectl create clusterrolebinding kube-proxy-cluster-admin --clusterrolecluster-admin --usersystem:kube-…...
物流单打印模板下载,佳易王物流托运单打印软件
物流单打印模板下载,佳易王物流托运单打印软件 上图是常用的物流单打印模板,佳易王物流单打印软件打印格式可以根据需要定制更改。 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装ÿ…...
TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖
11月22日,由CSA(连接标准联盟)中国成员组主办,CSHIA承办的“Matter中国区开发者大会2023” 于杭州举行。 会上,连接标准联盟中国成员组主席宿为民博士、连接标准联盟亚洲区架构师杨莉女士、CSHIA秘书长|中智盟投资创始…...
java 事务提交(批量处理数据,单个批次执行完成后直接提交事务)
方法一:接口REQUIRES_NEW 实现单个事务提交 方式1: for (TIrBuPBom buPBom : batchList) {// 查询待处理的批次数据List<TIrBuPBom> pBomList pBomMapperBase.list(new LambdaQueryWrapper<TIrBuPBom>().eq(TIrBuPBom::getBatchNo, buPBom.getBatchNo…...
logging.config 日志模块
logging 日志模块 简单应用: import logging logging.warning(警告!) # 输出结果: WARNING:root:警告!1. 日志等级 - debug 调试 10 最详细的日志信息,典型应用场景是 问题诊断 - info 普通信息 20 信息详细…...
win10+ vs2017用cmake编译geos3.5.1
参考教程:使用CMake编译Geos3.5.0_cmake geos-CSDN博客 注意事项: 报错:在使用cmake编译geos-3.5.1的时候,会出现报错: CMake Error at CMakeLists.txt:330 (include): include could not find load file GenerateSou…...
优化数据分析——理解与运用各类指标
写在开头 数据分析在当今信息时代扮演着至关重要的角色,而指标则是我们理解数据、揭示模式、支持决策的关键工具。本文将深入讨论各类指标的应用场景和解读方法,以帮助更全面、深入地理解数据。 1. 中心趋势指标 1.1 均值:更深层次的理解 …...
JS实现数字千分位分割(手写纯享版)
简介 在前端开发中,我们经常需要对数字进行格式化,其中一种常见的需求就是将数字表示为千分位格式,以提高可读性。本文将介绍如何使用 JavaScript 实现一个简单而有效的千分位格式化函数。 千分位格式化的需求 千分位格式化是一种将数字中…...
入门指南:介绍Python库——Pandas
个人网站 本文首发于公众号小肖学数据分析 Pandas是一个功能强大、灵活易用的Python数据处理库。 无论你是数据分析师、数据科学家还是Python初学者,掌握Pandas都将为你提供高效、便捷的数据处理和分析能力。 本文将为你详细介绍Pandas的基本概念、常用功能和使…...
数据库语句执行流程(查询原理)SQL
SQL作为一种数据库编程语言,其执行过程大致为,终端上输入SQL语句 会传输到数据库服务器,然后SQL语句在服务器内经过解析器的检查和翻译,优化器的执行效率提升,在执行器中通过存储引擎提供的数据给出结果。详细过程如下…...
FileReader与URL.createObjectURL实现图片、视频上传预览
之前做图片、视频上传预览常用的方案是先把文件上传到服务器,等服务器返回文件的地址后,再把该地址字符串赋给img或video的src属性,这才实现所谓的文件预览。实际上这只是文件“上传后再预览”,这既浪费了用户的时间,也…...
基于python+Django+SVM算法模型的文本情感识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介1. 简介2. 技术栈3. 系统架构4. 关键模块介绍5. 如何运行 二、功能三、系统四. 总结 一项目简介 # 基于 Python Django SVM 算法模型的文本情感识别系统介…...
数据结构之栈与队列习题详解解析
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.概念题…...
C++ 动态规划 DP教程 (一)思考过程(*/ω\*)
动态规划是一种思维方法,大家首先要做的就是接受这种思维方法,认同他,然后再去运用它解决新问题。 动态规划是用递推的思路去解决问题。 首先确定问题做一件什么事情? 对这件事情分步完成,分成很多步。 如果我们把整件…...
3个颠覆性思维:如何用零代码将3D艺术变成Minecraft世界
3个颠覆性思维:如何用零代码将3D艺术变成Minecraft世界 【免费下载链接】ObjToSchematic A tool to convert 3D models into Minecraft formats such as .schematic, .litematic, .schem and .nbt 项目地址: https://gitcode.com/gh_mirrors/ob/ObjToSchematic …...
人工智能发展简史:关键节点与技术突破
文章目录 前言一、理论萌芽期(1943-1956):智能的火种悄然点燃1.1 1943年:人工神经元——智能的数学基石1.2 1950年:图灵测试——智能的评判标准1.3 1956年:达特茅斯会议——AI正式诞生 二、黄金时代与第一次…...
终极方案:JetBrains IDE试用期重置完整指南
终极方案:JetBrains IDE试用期重置完整指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 当您的IntelliJ IDEA、PyCharm或WebStorm突然弹出"试用期已结束"的警告时,精心配置的…...
Abaqus 2023保姆级教程:手把手教你搞定金属管无芯绕弯的完整仿真流程
Abaqus 2023金属管无芯绕弯仿真全流程实战指南 金属管件弯曲成形是制造业中常见的加工工艺,而有限元仿真技术能够大幅降低实际试错成本。本文将基于Abaqus 2023版本,完整演示从零开始建立金属管无芯绕弯仿真模型的全过程。不同于简单操作演示,…...
LanzouAPI技术解析:如何用单文件PHP脚本破解蓝奏云下载迷局
LanzouAPI技术解析:如何用单文件PHP脚本破解蓝奏云下载迷局 【免费下载链接】LanzouAPI 蓝奏云直链,蓝奏api,蓝奏解析,蓝奏云解析API,蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI …...
在 Xcode 中运行和调试单元测试:使用 Debug 和日志
单元测试是确保代码质量的重要手段,而运行和调试测试是开发者必备的技能。本文将介绍如何在 Xcode 中运行单元测试,并使用调试和日志工具来发现和解决问题。 运行单元测试 1. 设置测试目标 在 Xcode 中,为项目添加一个新的测试目标&#x…...
cv_unet_image-colorization效果实测:不同分辨率黑白图上色一致性分析
cv_unet_image-colorization效果实测:不同分辨率黑白图上色一致性分析 1. 项目背景与测试目的 黑白照片上色一直是图像处理领域的热门应用,无论是老照片修复还是艺术创作,都希望能将黑白影像转化为生动的彩色画面。今天我们要评测的是基于U…...
AUTOSAR通信栈实战指南 - 从DBC到模块联调,打通CAN信号流配置全链路
1. AUTOSAR通信栈配置全景图 第一次接触AUTOSAR通信栈时,我完全被它复杂的模块关系搞懵了。记得当时导入DBC文件后,工具里蹦出上百个错误提示,那种手足无措的感觉至今难忘。其实通信栈就像快递分拣系统,DBC文件是发货清单…...
Cursor Free VIP:三步解锁AI编程神器的终极指南
Cursor Free VIP:三步解锁AI编程神器的终极指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial req…...
别再乱找了!Ubuntu上pip安装的包到底在哪?一个命令就搞定
别再乱找了!Ubuntu上pip安装的包到底在哪?一个命令就搞定 刚接触Python开发的Ubuntu用户,十有八九会遇到这样的场景:明明用pip安装了某个包,代码运行时却提示"ModuleNotFoundError"。更让人抓狂的是…...
