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

(19)VTK C++开发示例 --- 分隔文本读取器

文章目录

    • 1. 概述
    • 2. CMake链接VTK
    • 3. main.cpp文件
    • 4. 演示效果


更多精彩内容
👉内容导航 👈
👉VTK开发 👈

1. 概述

本例采用坐标和法线(x y z nx ny nz)的纯文本文件,并将它们读入vtkPolyData并显示在屏幕上。通过更改Reader->SetFieldDelimiterCharacters(" ")的参数,可以很容易地将其更改为读取带有任何分隔符的文件;

演示文件下载地址:vtk-data/Data/DelimitedData.txt at master · pyvista/vtk-data

环境说明
系统ubuntu22.04、windows11
cmake3.22、3.25
Qt5.14.2
编译器g++11.4、msvc2017
VTK9.4.1

2. CMake链接VTK

cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 设置CMake最低版本
project(vtk2) # 设置项目名称
# 查找VTK库
find_package(VTK COMPONENTS 
CommonColor
CommonCore
CommonDataModel
FiltersGeneral
IOInfovis
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if(NOT VTK_FOUND)
message("VTK not found")
return()
endif()add_executable(vtk2 main.cpp) # 添加可执行文件target_link_libraries(vtk2 PRIVATE ${VTK_LIBRARIES}) # 链接VTK库
vtk_module_autoinit(TARGETS vtk2 MODULES ${VTK_LIBRARIES}) # 初始化VTK模块

3. main.cpp文件

/********************************************************************************
* 文件名:   main.cpp
* 创建时间: 2025-03-15 21:00:01
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include <vtkActor.h>
#include <vtkDelimitedTextReader.h>
#include <vtkDoubleArray.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPointData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkTable.h>
#include <vtkVersionMacros.h>  // 这个头文件是用来获取VTK版本号的
#include <vtkVertexGlyphFilter.h>using namespace std;int main()
{vtkNew<vtkNamedColors> colors;string fileName = "E:/Code/C++/vtk1/bin/DelimitedData.txt";// 用于读取以特定分隔符(如逗号、制表符等)分隔的文本文件的数据。vtkNew<vtkDelimitedTextReader> reader; reader->SetFileName(fileName.c_str());reader->DetectNumericColumnsOn(); // 自动检测数值列reader->SetFieldDelimiterCharacters(" "); // 设置分隔符reader->Update(); // 更新数据vtkTable* table = reader->GetOutput(); // 获取输出数据vtkNew<vtkPoints> points; // 创建点数据vtkNew<vtkDoubleArray> normals; // 创建数据数组normals->SetNumberOfComponents(3); // 设置数据数组的组件数cout << "行:" <<table->GetNumberOfRows() << endl; // 输出行数cout << "列:"<<table->GetNumberOfColumns() << endl; // 输出列数for(vtkIdType i = 0; i < table->GetNumberOfRows(); i++) // 遍历行{cout << "x:"<< table->GetValue(i, 0).ToDouble() << " y:" << table->GetValue(i, 1).ToDouble() << " z:" << table->GetValue(i, 2).ToDouble() << endl;points->InsertNextPoint(table->GetValue(i, 0).ToDouble(), table->GetValue(i, 1).ToDouble(), table->GetValue(i, 2).ToDouble()); // 插入点数据double n[3];n[0] = table->GetValue(i, 3).ToDouble(); // 获取法向量数据n[1] = table->GetValue(i, 4).ToDouble();n[2] = table->GetValue(i, 5).ToDouble();normals->InsertNextTuple(n); // 插入法向量数据cout << "nx:"<< n[0] << " ny:" << n[1] << " nz:" << n[2] << endl;} vtkNew<vtkPolyData> polydata; // 创建多边形数据polydata->SetPoints(points); // 设置点数据polydata->GetPointData()->SetNormals(normals); // 设置法向量数据vtkNew<vtkVertexGlyphFilter> glyphFilter; // 创建顶点过滤器glyphFilter->SetInputData(polydata); // 设置输入数据glyphFilter->Update(); // 更新数据vtkNew<vtkPolyDataMapper> mapper; // 创建多边形数据映射器mapper->SetInputConnection(glyphFilter->GetOutputPort()); // 设置输入连接vtkNew<vtkActor> actor; // 创建演员actor->SetMapper(mapper); // 设置映射器actor->GetProperty()->SetPointSize(30); // 设置点大小actor->GetProperty()->SetColor(colors->GetColor3d("Tomato").GetData()); // 设置颜色vtkNew<vtkRenderer> renderer; // 创建渲染器renderer->AddActor(actor); // 添加演员renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData()); // 设置背景颜色vtkNew<vtkRenderWindow> renderWindow; // 创建渲染窗口renderWindow->AddRenderer(renderer); // 添加渲染器renderWindow->SetWindowName("DelimitedTextReader"); // 设置窗口名称vtkNew<vtkRenderWindowInteractor> renderWindowInteractor; // 创建渲染窗口交互器renderWindowInteractor->SetRenderWindow(renderWindow); // 设置渲染窗口renderWindow->Render(); // 渲染renderWindowInteractor->Start(); // 开始交互return 0;
}

4. 演示效果

在这里插入图片描述



相关文章:

(19)VTK C++开发示例 --- 分隔文本读取器

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 本例采用坐标和法线&#xff08;x y z nx ny nz&#xff09;的纯文本文件&#xff0c;并将它们读入vtkPolyData并显示…...

Redis从入门到实战先导篇

前言&#xff1a;本节内容包括虚拟机VMware的安装&#xff0c;Linux系统的配置&#xff0c;FinalShell的下载与配置&#xff0c;Redis与其桌面客户端的安装指导,便于后续黑马Redis从入门到实战的课程学习 目录 主要内容 0.相关资源 1.VMware安装 2.Linux与CentOS安装 3.Fi…...

WebSocket是h5定义的,双向通信,节省资源,更好的及时通信

浏览器和服务器之间的通信更便利&#xff0c;比http的轮询等效率提高很多&#xff0c; WebSocket并不是权限的协议&#xff0c;而是利用http协议来建立连接 websocket必须由浏览器发起请求&#xff0c;协议是一个标准的http请求&#xff0c;格式如下 GET ws://example.com:3…...

uniapp中使用<cover-view>标签

文章背景&#xff1a; uniapp中遇到了原生组件(canvas)优先级过高覆盖vant组件 解决办法&#xff1a; 使用<cover-view>标签 踩坑&#xff1a; 我想实现的是一个vant组件库中动作面板的效果&#xff0c;能够从底部弹出框&#xff0c;让用户进行选择&#xff0c;我直…...

JavaScript 防抖和节流

方法一&#xff1a;使用lodash库的debounce方法 方法二&#xff1a;手写防抖函数 function debounce(fn,t){// 1.声明一个定时器变量 因为需要多次赋值 使用let声明let timer // 返回一个匿名函数return function(){if(timer){// 如果定时器存在清除之前的定时器 clearTimeout(…...

Spring Boot 启动时 `converting PropertySource ... to ...` 日志详解

Spring Boot 启动时 converting PropertySource ... to ... 日志详解 1. 日志背景 在 Spring Boot 应用启动过程中&#xff0c;会加载并处理多种 配置源&#xff08;如 application.properties、系统环境变量、命令行参数等&#xff09;。这些配置源会被封装为 PropertySource…...

分割数据集中.json格式标签转化成伪彩图图像

一、前言 图像分割任务中&#xff0c;分割数据集的转换和表示方式对于模型训练至关重要。目前主要有两种常见的分割结果表示方法&#xff1a; 1. 转化为TXT文件 这种方式通常使用一系列的点&#xff08;坐标&#xff09;来表示图像中每个像素的类别标签。每个点通常包含像素…...

Linux之彻底掌握防火墙-----安全管理详解

—— 小 峰 编 程 目录&#xff1a; 一、防火墙作用 二、防火墙分类 1、逻辑上划分&#xff1a;大体分为 主机防火墙 和 网络防火墙 2、物理上划分&#xff1a; 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…...

SwiftUI 常用控件简介

SwiftUI 是苹果公司推出的现代化声明式 UI 框架&#xff0c;用于构建 iOS、macOS、watchOS 和 tvOS 应用程序用户界面。以下是一些常用的 SwiftUI 控件&#xff1a; 1. 文本控件 Text: 显示一段文本。 2. 图像控件 Image: 显示图片&#xff0c;可以从系统图标、网络或本地资…...

HCIP-H12-821 核心知识梳理 (6)

ospf dr-priority命令默认值为1&#xff0c;取值范围为0~255.DHCPv6使用IPv6组播地址FF05::1:3用于中继代理和服务器之间的通信。VRF路由表里的OSPF外部路由允许被路由汇总&#xff08;asbr-summary)在IS-IS网络中&#xff0c;直连的两台路由器不管是P2P网络类型或是Broadcast网…...

Docker 安装配置教程(配置国内源)

## 一、Windows 安装 Docker Desktop 1. 系统要求: - Windows 10 64位:专业版、企业版或教育版 - 必须开启 Hyper-V 和容器功能 - 至少 4GB 内存 2. 安装步骤: - 访问 Docker 官网下载 Docker Desktop - 双击安装程序 - 按照向导完成安装 - 重启电脑 ## 二、macOS 安装 Dock…...

初识分布式事务原理

事务是指符合ACID特性的操作就是事务&#xff0c;在同一个数据库中&#xff0c;如果要分别对表A和表B进行插入和删除操作&#xff0c;如果其中一个操作执行失败&#xff0c;可以对当前数据库进行回滚&#xff0c;使其回滚到执行操作前的状态&#xff0c;但是现有的系统架构都是…...

# 构建和训练一个简单的CBOW词嵌入模型

构建和训练一个简单的CBOW词嵌入模型 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词嵌入是一种将词汇映射到连续向量空间的技术&#xff0c;这些向量能够捕捉词汇之间的语义关系。在这篇文章中&#xff0c;我们将构建和训练一个简单的Continuous Bag of Words…...

Qt本地化-检测系统语言

获取系统语言&#xff0c;可以通过QLocale的接口 // 获取系统默认区域设置QLocale systemLocale QLocale::system();// 获取语言代码 (例如 "zh", "en", "ja" 等)QString language systemLocale.name().split(_).first(); //输出zh// 或者直接…...

Collection集合,List集合,set集合,Map集合

文章目录 集合框架认识集合集合体系结构Collection的功能常用功能三种遍历方式三种遍历方式的区别 List集合List的特点、特有功能ArrayList底层原理LinkedList底层原理LinkedList的应用场list:电影信息管理模块案例 Set集合set集合使用哈希值红黑树HashSet底层原理HashSet集合元…...

c++中iota容器和fill的区别

在C 中&#xff0c;std::iota 和 std::fill 都是标准库中的函数&#xff0c;用于对序列进行操作&#xff0c;它们的功能和用法如下&#xff1a; std::iota 功能&#xff1a;std::iota 函数用于将一个连续的递增序列赋值给指定范围的元素。它接受三个参数&#xff0c;第一个参…...

【CSS】层叠,优先级与继承(四):层叠,优先级与继承的关系

层叠&#xff0c;优先级与继承的关系 前文概括 【CSS】层叠&#xff0c;优先级与继承&#xff08;一&#xff09;&#xff1a;超详细层叠知识点 【CSS】层叠、优先级与继承&#xff08;二&#xff09;&#xff1a;超详细优先级知识点 【CSS】层叠&#xff0c;优先级与继承&am…...

jdk17的新特性

JDK 17 是 Java 的一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;相较于 JDK 8 引入了许多新特性&#xff0c;下面从语法、性能、安全性等多个方面进行介绍&#xff1a; 语法层面 密封类&#xff08;Sealed Classes&#xff09; 简介&#xff1a;密封类和接口限制…...

C++如何分析和解决崩溃(crash)问题?如何查看core dump文件

在软件开发的世界中,C++作为一门高效且灵活的高级编程语言,广泛应用于系统编程、游戏开发、嵌入式系统以及高性能计算等领域。然而,正是由于其直接操作内存和资源的特性,C++程序在开发和运行过程中常常面临崩溃(crash)问题。这些崩溃不仅会中断程序的正常运行,还可能导致…...

Docker配置带证书的远程访问监听

一、生成证书和密钥 1、准备证书目录和生成CA证书 # 创建证书目录 mkdir -p /etc/docker/tls cd /etc/docker/tls # 生成CA密钥和证书 openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem \ -out ca-cert.pem -days 365 -nodes -subj "/CNDocker CA" 2、为…...

Unity 创建、读取、改写Excel表格数据

1.导入EPPlus.dll、Excel.dll、Mysql.Data.dll、System.Data.dll&#xff1b;&#xff08;我这里用的是&#xff1a;Unity2017.3.0&#xff09; 2.代码如下&#xff1a; using System.Data; using System.IO; using UnityEngine; using OfficeOpenXml; using UnityEditor; us…...

[密码学实战]政务数据加密传输协议选型解析:IPSec、TLS与国密方案的实战选择

政务数据加密传输协议选型解析:IPSec、TLS与国密方案的实战选择 在政务数据加密传输的实际项目中,IPSec确实是一种常见方案,但并非唯一选择。政务系统的数据安全传输需综合考虑 网络层级、合规要求、性能开销 和 场景适配性 四大因素。本文结合国内政务项目实战经验,深度剖…...

使用DDR4控制器实现多通道数据读写(九)

一、本章概括 在上一节中&#xff0c;我们概括了工程的整体思路&#xff0c;并提供了工程框架&#xff0c;给出了读写DDR4寄存器的接口列表和重点时序图。当然&#xff0c;对于将DDR4内存封装成FIFO接口&#xff0c;其中的重点在于对于读写DDR4内存地址的控制&#xff0c;相对于…...

深度解析n8n全自动AI视频生成与发布工作流

工作流模版地址&#xff1a;Fully Automated AI Video Generation & Multi-Platform Publishing | n8n workflow template 本文将全面剖析基于n8n平台的这个"全自动AI视频生成与多平台发布"工作流的技术架构、实现原理和关键节点&#xff0c;帮助开发者深入理解…...

Ubuntu 22.04安装IGH

查看设备是否支持 硬件 $ sudo lshw -class network -short H/W path Device Class Description/0/100/1c/0 enp1s0 network I211 Gigabit Network Connection /0/100/1c.1/0 enp2s0 network RTL8111/8168/8411 PC…...

【华为OD机试真题】232、统计射击比赛成绩 | 机试真题+思路参考+代码分析(C++)

题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排 名后的选手ID序列 条件如下: 1.一个选手可以有多个射击成绩的分数,且次序不固定 2.如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名…...

pycharm调试typescript

前言 搜索引擎搜索调试typescript&#xff0c;都是vscode&#xff0c;但是没看懂。 vscode界面简洁&#xff0c;但是适配起来用不习惯&#xff0c;还是喜欢用pycharm。 安装软件 安装Node.js https://nodejs.org/zh-cn 判断是否安装成功 node -v npm install -g typescrip…...

Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系

先说结论&#xff1a; ✅ 高阶函数既可以用 Lambda 表达式&#xff0c;也可以用函数引用&#xff01; 在 Kotlin 中&#xff0c;高阶函数&#xff08;Higher-Order Function&#xff09;和 Lambda 表达式密切相关&#xff0c;但它们是两个不同的概念&#xff1a; ✅ 简单理解…...

什么是爬虫?——从技术原理到现实应用的全面解析 II

五、现代爬虫技术面临的挑战与突破 5.1 动态网页与反爬机制的博弈 随着前端技术的演进,大量网站采用JavaScript动态渲染内容,传统爬虫难以直接获取有效数据。以下为应对单页应用(SPA)的解决方案: from selenium import webdriver from selenium.webdriver.chrome.optio…...

spring-ai之Advisors API

1、 Spring AI Advisors API 提供了一种灵活而强大的方法来拦截、 修改和增强 Spring 应用程序中的 AI 驱动的交互。 通过利用 Advisors API&#xff0c;开发人员可以创建更复杂、可重用和可维护的 AI 组件。主要优势包括封装重复的生成式 AI 模式、转换发送到大型语言模型 &…...