(27)VTK C++开发示例 ---将点坐标写入 STL文件

文章目录

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


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

1. 概述

此示例使用 vtkSTLWriter 将存储在 vtkPolyData 对象中的 3D 几何数据保存到 STL 文件,并读取stl文件显示到界面。

STL 文件通过三角形的单位法线和顶点 (按右侧规则排序) 描述三角化三维曲面。

在VTK(Visualization Toolkit)中,STL(Stereolithography)文件是一种常见的三维模型文件格式,主要用于存储三维几何形状。STL文件通常用于3D打印、CAD建模和计算机图形学中。VTK提供了对STL文件的读取和写入支持,主要通过vtkSTLReadervtkSTLWriter类来实现。

以下是对STL文件相关操作的详细说明:

读取STL文件

使用vtkSTLReader可以读取STL文件并将其加载为VTK的vtkPolyData对象。主要步骤如下:

  • 创建vtkSTLReader对象。
  • 使用SetFileName方法指定STL文件路径。
  • 调用Update方法读取文件内容。
  • 将读取的数据连接到后续的VTK管线中。

写入STL文件

使用vtkSTLWriter可以将VTK的vtkPolyData对象保存为STL文件。主要步骤如下:

  • 创建vtkSTLWriter对象。
  • 使用SetFileName方法指定输出STL文件路径。
  • 使用SetInputConnection方法连接输入数据。
  • 调用Write方法将数据写入文件。
环境说明
系统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
FiltersSources
IOGeometry
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-20 22:35:33
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include <vtkActor.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPLYReader.h>
#include <vtkPLYWriter.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
using namespace std;int main()
{vtkNew<vtkNamedColors> colors;
/********************************************************************************
* 文件名:   main.cpp
* 创建时间: 2025-03-20 22:35:33
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include <vtkActor.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSTLReader.h>
#include <vtkSTLWriter.h>
#include <vtkSphereSource.h>
using namespace std;int main()
{vtkNew<vtkNamedColors> colors;/*************************写入stl文件*****************************/string filename = "output.stl";vtkNew<vtkSphereSource> sphere; // 创建球体sphere->Update(); // 更新球体vtkNew<vtkSTLWriter> writer; // 创建STL写入器writer->SetFileName(filename.c_str()); // 设置文件名writer->SetInputConnection(sphere->GetOutputPort()); // 通过连接上游算法的输出端口传递数据,依赖管线自动更新(推荐方式)。writer->Write(); // 写入文件/*************************从stl文件读取显示*****************************/vtkNew<vtkSTLReader> reader; // 创建stl读取器reader->SetFileName(filename.c_str()); // 设置文件名reader->Update(); // 更新读取器vtkNew<vtkPolyDataMapper> mapper; // 创建映射器mapper->SetInputConnection(reader->GetOutputPort()); // 设置输入连接vtkNew<vtkActor> actor; // 创建演员actor->SetMapper(mapper);actor->GetProperty()->SetColor(colors->GetColor3d("Tomato").GetData()); // 设置演员颜色vtkNew<vtkRenderer> renderer; // 创建渲染器renderer->AddActor(actor); // 添加演员renderer->SetBackground(colors->GetColor3d("SlateGray").GetData()); // 设置背景颜色vtkNew<vtkRenderWindow> renderWindow; // 创建渲染窗口renderWindow->AddRenderer(renderer);vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow);renderWindow->Render(); // 渲染窗口renderWindowInteractor->Start(); // 开始交互return 0;
}

4. 演示效果

在这里插入图片描述



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2. python协程/异步编程详解

目录 1. 简单的异步程序 2. 协程函数和协程对象 3. 事件循环 4. 任务对象Task及Future对象 4.1 Task与Future的关系 4.2 Future对象 4.3 全局对象和循环事件对象 5. await关键字 6. 异步上下文管理 7.异步迭代器 8. asyncio的常用函数 8.1 asyncio.run 8.2 asyncio.get…

智慧园区IOT项目与AI时代下的机遇 - Java架构师面试实战

在互联网大厂的Java求职者面试中&#xff0c;面试官通常会针对实际业务场景提出一系列问题。以下是关于智慧园区IOT项目及AI时代下的机遇的面试模拟对话。 第一轮提问 面试官&#xff1a;马架构&#xff0c;请简要介绍下智慧园区IOT项目的整体架构设计。 马架构&#xff1a;…

论文导读 - 基于特征融合的电子鼻多任务深度学习模型研究

基于特征融合的电子鼻多任务深度学习模型研究 原论文地址&#xff1a;https://www.sciencedirect.com/science/article/pii/S0925400524009365 引用此论文&#xff08;GB/T 7714-2015&#xff09;&#xff1a; NI W, WANG T, WU Y, et al. Multi-task deep learning model f…

AI超级智能体项目教程(二)---后端项目初始化(设计knif4j接口文档的使用)

文章目录 1.选择JDK的版本和相关配置2.添加依赖信息2.1指定lombok版本信息2.2引入hutool工具类2.3了解knif4j依赖2.4引入knif4j依赖 3.contrller测试3.1完成yml文件配置3.2修改默认扫描路径3.3controller具体的内容3.4配置接口和访问路径3.5如何访问3.6调试接口3.6调试接口 1.选…

linux blueZ 第四篇:BLE GATT 编程与自动化——Python 与 C/C++ 实战

本篇聚焦 BLE(Bluetooth Low Energy)GATT 协议层的编程与自动化实践,涵盖 GATT 基础、DBus API 原理、Python(dbus-next/bleak)示例、C/C++ (BlueZ GATT API)示例,以及自动发现、读写特征、订阅通知、安全配对与脚本化测试。 目录 BLE GATT 基础概念 BlueZ DBus GATT 模…

kafka与flume的整合、spark-streaming

kafka与flume的整合 前期配置完毕&#xff0c;开启集群 需求1&#xff1a; 利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台&#xff08;三个node01中运行&#xff09; 1.在kafka中建立topic kafka…

redis高级进阶

1.redis主从复制 redis主从复制1 2.redis哨兵模式 哔哩哔哩视频 redis哨兵模式1 redis哨兵模式2 redis哨兵模式3 3.redis分片集群 redis分片集群1 redis分片集群2 redis分片集群3

uniapp: 低功耗蓝牙(BLE)的使用

在微信小程序中实现蓝牙对接蓝牙秤的重量功能&#xff0c;主要依赖微信小程序提供的低功耗蓝牙&#xff08;BLE&#xff09;API。以下是一个清晰的步骤指南&#xff0c;帮助你完成从连接蓝牙秤到获取重量数据的开发流程。需要注意的是&#xff0c;具体实现可能因蓝牙秤的协议和…

3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目

安装 pnpm install icraft/player-react --saveimport { ICraftPlayer } from "icraft/player-react";export default function MyScene() {return <ICraftPlayer srcyour-scene.iplayer />; }icraft/player-react 为开发者提供了一站式的3D数字孪生可视化解决…

云数据中心整体规划方案PPT(113页)

1. 引言 概述&#xff1a;云数据中心整体规划方案旨在构建弹性、高效的云计算基础设施&#xff0c;通过软件定义数据中心&#xff08;SDDC&#xff09;实现资源虚拟化与管理自动化。 2. 技术趋势与背景 技术革新&#xff1a;随着云计算、虚拟化及自动化技术的发展&#xff0c…

(六)机器学习---聚类与K-means

到本篇文章&#xff0c;我们先对前几篇所学习的算法进行一个回顾&#xff1a; 而本篇文章我们将会介绍聚类以及K-means算法。 分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机…

在html中如何创建vue自定义组件(以自定义文件上传组件为例,vue2+elementUI)

1、先上代码&#xff1a;vueUpload.js var dom <div class"upload-file"><el-upload :action"uploadFileUrl" :before-upload"handleBeforeUpload" :file-list"fileList" :limit"limit":on-error"handleUpl…

计算机基础:二进制基础14,二进制加法

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;计算机基础&#xff1a;二进制基础13&#xff0c;十六进制与二进…

可视化图解算法: 判断是不是二叉搜索树(验证二叉搜索树)

1. 题目 描述 给定一个二叉树根节点&#xff0c;请你判断这棵树是不是二叉搜索树。 二叉搜索树满足每个节点的左子树上的所有节点的值均严格小于当前节点的值&#xff1b;并且右子树上的所有节点的值均严格大于当前节点的值。 数据范围&#xff1a;节点数量满足 1≤n≤10^4…

Markdown转WPS office工具pandoc实践笔记

随着DeepSeek、文心一言、讯飞星火等AI工具快速发展&#xff0c;其输出网页内容拷贝到WPS Office过程中&#xff0c;文档编排规整的格式很难快速复制。 注&#xff1a;WPS Office不支持Markdown格式&#xff0c;无法识别式样。 在这里推荐个免费开源工具Pandoc&#xff0c;实现…

python的turtle库实现四叶草

实现代码&#xff1a; import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…

北重数控滑台加工厂家:汽车零部件试验铁地板-安全性能的测试方法

汽车零部件的安全性能测试是非常重要的&#xff0c;其中铁地板测试是其中的一种常见测试方法之一。铁地板测试主要用于评估汽车零部件在发生碰撞或事故时的安全性能&#xff0c;以确保零部件在各种情况下都能提供有效的保护和安全性能。 铁地板测试通常包括以下步骤和方法&…

Linux0.11系统调用:预备知识

系统调用 预备知识 目标&#xff1a;了解系统调用的流程&#xff0c;在Linux 0.11上添加两个系统调用&#xff0c;并编写两个简单的应用程序测试它们。 对应章节&#xff1a;同济大学赵炯博士的《Linux内核0.11完全注释&#xff08;修正版V3.0&#xff09;》的第5.5节 下面就针…

如何防止 ES 被 Linux OOM Killer 杀掉

当 Linux 系统内存不足时&#xff0c;内核会找出一个进程 kill 掉它释放内存&#xff0c;旨在保障整个系统不至于崩溃。如果 ES 按照最佳实践去实施部署&#xff0c;会保留一半的内存&#xff0c;不至于发生此类事情。但事情总有例外&#xff0c;有的朋友可能 ES 和其他的程序部…

swagger2升级至openapi3的利器--swagger2openapi

背景&#xff1a; 因为项目需要升级JDK&#xff0c;涉及到swagger2升级至openapi3的情况。由于swagger 2和openapi 3的语法差距太大&#xff0c;需要对yaml进行升级。无奈单个yaml文件的内容太大&#xff0c;高至4万多行&#xff0c;手动进行语法的转换肯定是不可能了&#xff…