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

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...