(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.pswp.cn/news/903499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903499.shtml
英文地址,請注明出處:http://en.pswp.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…