QT 5.9.2+VTK8.0實現等高線繪制

項目下載鏈接:QT5.9.2+VTK8.0實現等高線繪制資源-CSDN文庫

示例如下:

主要代碼如下:

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPolyDataMapper.h"
#include "vtkVolume16Reader.h"
#include "vtkActor.h"
#include "vtkOutlineFilter.h"
#include "vtkCamera.h"
#include "vtkProperty.h"
#include "vtkPolyDataNormals.h"
#include "vtkContourFilter.h"
#include "vtkFloatArray.h"
#include "vtkPointData.h"
#include "dataimport.h"
#include <vtkDataSetMapper.h>
#include <vtkDelaunay2D.h>
#include <vtkLookupTable.h>
#include <vtkScalarBarActor.h>
#include <vtkSmoothPolyDataFilter.h>#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
using namespace std;int main()
{DataImport import;QVector<point_3D> points;QString PathName = "SrcData_Filtered.txt";import.Data_ReadFromTXT(PathName, points);//【導入數據】vtkSmartPointer<vtkPoints> vtk_points =vtkSmartPointer<vtkPoints>::New();vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();vtkSmartPointer<vtkFloatArray> pointScalar = vtkSmartPointer<vtkFloatArray>::New();for(unsigned int x=0; x<points.count(); x++){vtk_points->InsertNextPoint(points.at(x).x_value, points.at(x).y_value,points.at(x).z_value);//每個坐標點都需要創建一個頂點CellcellArray->InsertNextCell(x);//設置結點標量pointScalar->InsertNextValue(points.at(x).z_value);}double rangeMin = pointScalar->GetRange()[0];double rangeMax = pointScalar->GetRange()[1];vtkSmartPointer<vtkPolyData> polydata =vtkSmartPointer<vtkPolyData>::New();polydata->SetPoints(vtk_points);//polydata->SetPolys(cellArray);//設置單元數據polydata->GetPointData()->SetScalars(pointScalar);//設置點集標量//表面重建方式1-vtkDelaunay2DvtkSmartPointer<vtkDelaunay2D> delaunay =vtkSmartPointer<vtkDelaunay2D>::New();delaunay->SetInputData(polydata);delaunay->Update();//重建后進行拉普拉斯平滑vtkSmartPointer<vtkSmoothPolyDataFilter> smoothFilter =vtkSmartPointer<vtkSmoothPolyDataFilter>::New();smoothFilter->SetInputConnection(delaunay->GetOutputPort());smoothFilter->SetBoundarySmoothing(true);//控制是否對邊界點平滑smoothFilter->SetFeatureEdgeSmoothing(true);//控制是否對特征邊上的點的平滑,設為false會更平滑smoothFilter->SetNumberOfIterations(200);//平滑次數,越大越平滑smoothFilter->Update();// 獲取等值面vtkContourFilter *skinExtractor = vtkContourFilter::New();//skinExtractor->SetInputConnection(v16->GetOutputPort());skinExtractor->SetInputConnection(smoothFilter->GetOutputPort());//skinExtractor->SetValue(0, 392);//設置值為*的等值線//skinExtractor->SetValue(1, 394);//設置值為*的等值線//skinExtractor->GenerateValues(10, 370, 400);//生成等分的10個等值線skinExtractor->GenerateValues(20, rangeMin, rangeMax);//生成等分的*個等值線// 是一個過濾器Filter,用來計算法向量,對銳邊緣(sharp Edge)進行處理vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();skinNormals->SetInputConnection(skinExtractor->GetOutputPort());skinNormals->SetFeatureAngle(160.0);//創建顏色表 這里只輸入顏色值的數量,然后自動生成表vtkLookupTable *lut = vtkLookupTable::New();lut->SetTableRange(pointScalar->GetRange());lut->SetHueRange(0.85, 0.0);        //色調范圍從紫色到紅色lut->Build();vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();skinMapper->SetInputConnection(skinNormals->GetOutputPort());skinMapper->SetLookupTable(lut);skinMapper->SetScalarRange(pointScalar->GetRange());//skinMapper->ScalarVisibilityOff();//不顯示多顏色vtkActor *skinActor = vtkActor::New();skinActor->SetMapper(skinMapper);//【加顏色映射表】vtkScalarBarActor *barActor = vtkScalarBarActor::New();barActor->SetLookupTable(lut);// 繪制外部輪廓的正方體vtkOutlineFilter *outlineData = vtkOutlineFilter::New();//outlineData->SetInputConnection(v16->GetOutputPort());outlineData->SetInputConnection(delaunay->GetOutputPort());vtkPolyDataMapper *mapOutline = vtkPolyDataMapper::New();mapOutline->SetInputConnection(outlineData->GetOutputPort());vtkActor* outline_actor = vtkActor::New();outline_actor->SetMapper(mapOutline);outline_actor->GetProperty()->SetColor(0, 0, 0);vtkCamera *aCamera = vtkCamera::New();//aCamera->SetViewUp(0, 0, -1);aCamera->SetViewUp(1, 1, 0);//aCamera->SetPosition(0, 1, 0);aCamera->SetPosition(-1, -1, 0.5);aCamera->SetFocalPoint(0, 0, 0);aCamera->ComputeViewPlaneNormal();aCamera->Dolly(1.5);vtkRenderer *aRender = vtkRenderer::New();aRender->AddActor(outline_actor);aRender->AddActor(skinActor);aRender->AddActor(barActor);aRender->SetActiveCamera(aCamera);aRender->ResetCamera();//aRender->SetBackground(1, 1, 1);aRender->SetBackground(0.5, 0.5, 0.5);aRender->ResetCameraClippingRange();vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->AddRenderer(aRender);renWin->SetSize(640, 480);vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);iren->Initialize();iren->Start();system("pause");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86053.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL:忘記root密碼

修改配置文件&#xff1a; vi /etc/my.cnf## 修改配置文件 ##[mysqld] skip - grant - tables## 重啟 ##/etc/init.d/mysqld restart ## 或service mysqld restart## 登錄mysqld -u root -p -h 127.0.0.1USE mysql; UPDATE user SET Password password(123456) WHERE User r…

JSP、HTML和Tomcat

9x9上三角乘法表 乘法表的實現 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…

常用枚舉技巧:基礎(一)

文章目錄 常用枚舉技巧&#xff1a;基礎&#xff08;一&#xff09;LeetCode 1. 兩數之和思路Golang 代碼 LeetCode 2441. 與對應負數同時存在的最大正整數思路Golang 代碼 LeetCode 1512. 好數對的數目思路Golang 代碼 LeetCode 2001. 可互換矩形的對數思路Golang 代碼 LeetCo…

從混亂到秩序:探索管理系統如何徹底改變工作流程

內容摘要 在許多企業與組織中&#xff0c;工作流程混亂是阻礙發展的“絆腳石”。員工們常常被繁瑣的步驟、模糊的職責和溝通不暢等問題搞得焦頭爛額&#xff0c;工作效率低下&#xff0c;錯誤頻發。而與之形成鮮明對比的是&#xff0c;一些引入了先進管理系統的團隊&#xff0…

使用SSE解決獲取狀態不一致問題

使用SSE解決獲取狀態不一致問題 1. 問題描述2. SSE介紹2.1 SSE 的工作原理2.2 SSE 的事件格式規范2.3 SSE與其他技術對比2.4 SSE 的優缺點 3. 實戰代碼 1. 問題描述 目前做的一個功能是上傳多個文件&#xff0c;這個上傳文件是整體功能的一部分&#xff0c;文件在上傳的過程中…

華為×小鵬戰略合作:破局智能駕駛深水區的商業邏輯深度解析

當中國智能電動車競爭進入下半場&#xff0c;頭部玩家的合縱連橫正在重構產業格局。華為與小鵬汽車近日官宣的“戰略合作”&#xff0c;表面看是技術互補的常規操作&#xff0c;實則暗藏改寫行業游戲規則的深層商業邏輯。 一、技術破壁&#xff1a;從“單點突破”到“全棧協同”…

Tailwind CSS 實戰:基于 Kooboo 構建 AI 對話框頁面(六):圖片上傳交互功能

在 《Tailwind CSS 實戰&#xff1a;基于 Kooboo 構建 AI 對話框頁面&#xff08;五&#xff09;》 中&#xff0c;完成了語音交互功能的優化。本文作為該系列教程的第六篇&#xff0c;將聚焦于圖片上傳功能的開發。通過集成圖片上傳與預覽能力&#xff0c;我們將進一步完善 AI…

40. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類(類寫法)

40. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類&#xff08;類寫法&#xff09; 一、類結構設計解析 1.1 基類設計 class Base:async_driver None # &#x1f697; 存儲瀏覽器驅動實例async def get(self, url: str http://secure.smartbearsoftware.com/.…

面向開發者的提示詞工程④——文本推斷(Inferring)

文章目錄 前言一、情感&#xff08;正向/負向&#xff09;二、識別情感類型三、識別憤怒四、從客戶評論中提取產品和公司名稱五、一次完成多項任務 前言 面向開發者的提示詞工程——導讀 在這節課中&#xff0c;你將從產品評論和新聞文章中推斷情感和主題。 舉了個商品評論的例…

java day15 (數據庫)

進入數據庫的學習 DB 因為數據太多了&#xff0c;方便統一管理的軟件 操作就不用改代碼了&#xff0c;直接改數據庫則可&#xff1b; 命令就是sql語句 這些都是關系型數據庫&#xff0c;sql可以控制全部&#xff0c;至于具體的環境我以前就有安裝過了&#xff1b; 理解&am…

國標GB28181設備管理軟件EasyGBS遠程視頻監控方案助力高效安全運營

一、方案背景? 在商業快速擴張的背景下&#xff0c;連鎖店門店數量激增&#xff0c;分布范圍廣。但傳統人工巡檢、電話匯報等管理方式效率低下&#xff0c;存在信息滯后、管理盲區&#xff0c;難以掌握店鋪運營情況&#xff0c;影響企業效率與安全。網絡遠程視頻監控系統可有…

Python 字典(dict)的高級用法與技巧

今天我們繼續深入講解 Python 字典的 高級用法與技巧&#xff0c;包括&#xff1a; defaultdict&#xff1a;帶默認值的字典Counter&#xff1a;快速統計工具字典排序&#xff1a;按鍵或值排序合并字典&#xff08;傳統方式和 Python 3.9 新語法&#xff09;嵌套字典的安全訪問…

動靜態庫的使用(Linux)

1.庫 通俗來說&#xff0c;庫就是現有的&#xff0c;可復用的代碼&#xff0c;例如&#xff1a;在C/C語言編譯時&#xff0c;就需要依賴相關的C/C標準庫。本質上來說庫是一種可執行代碼的二進制形式&#xff0c;可以被操作系統載入內存執行。通常我們可以在windows下看到一些后…

R2ec: 構建具有推理能力的大型推薦模型,顯著提示推薦系統性能!!

摘要&#xff1a;大型推薦模型通過編碼或項目生成將大型語言模型&#xff08;LLMs&#xff09;擴展為強大的推薦工具&#xff0c;而近期在LLM推理方面的突破也同步激發了在推薦領域探索推理的動機。目前的研究通常將LLMs定位為外部推理模塊&#xff0c;以提供輔助性思考來增強傳…

【Java后端基礎 005】ThreadLocal-線程數據共享和安全

&#x1f4da;博客主頁&#xff1a;代碼探秘者 ?專欄&#xff1a;文章正在持續更新ing… ?C語言/C&#xff1a;C&#xff08;詳細版&#xff09; 數據結構&#xff09; 十大排序算法 ?Java基礎&#xff1a;JavaSE基礎 面向對象大合集 JavaSE進階 Java版數據結構JDK新特性…

Tesseract配置參數詳解及適用場景(PyTesseract進行OCR)

在使用 PyTesseract 進行 OCR 時&#xff0c;合理配置參數是提高識別準確率的關鍵。以下是 Tesseract 常用參數的詳細解釋和適用場景。 一、關鍵參數 &#xff08;1&#xff09;頁面分割模式&#xff08;Page Segmentation Mode, --psm&#xff09; 控制 Tesseract 如何分析…

【Zephyr 系列 12】BLE + NVS + 低功耗融合實戰:打造可配置藍牙信標系統

??關鍵詞:Zephyr、BLE 廣播、信標、NVS 參數、低功耗、狀態機、周期喚醒 ??適合人群:希望實現 BLE 信標類產品(定位標簽、資產管理)的開發者 ??預計篇幅:約 5200+ 字 ?? 項目目標 構建一個可廣泛應用于資產標簽、定位信標、設備標識等場景的藍牙廣播模塊,具備:…

圖解瀏覽器多進程渲染:從DNS到GPU合成的完整旅程

目錄 瀏覽器進程架構的演化 進程和線程關系圖示 進程&#xff08;Process&#xff09; 線程&#xff08;Thread&#xff09; 協程&#xff08;Coroutine&#xff09; 進程&線程&協程核心對比 單進程和多進程瀏覽器 單進程瀏覽器?編輯 單進程瀏覽器存在的問題…

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引發的HTTP 406 錯誤

HTTP 狀態碼 406 (Not Acceptable) 和 500 (Internal Server Error) 是兩類完全不同的錯誤&#xff0c;它們的含義、原因和解決方法都有顯著區別。以下是詳細對比&#xff1a; 1. HTTP 406 (Not Acceptable) 含義&#xff1a; 客戶端請求的內容類型與服務器支持的內容類型不匹…

C# 類和繼承(抽象成員)

抽象成員 抽象成員是指設計為被覆寫的函數成員。抽象成員有以下特征。 必須是一個函數成員。也就是說&#xff0c;字段和常量不能為抽象成員。必須用abstract修飾符標記。不能有實現代碼塊。抽象成員的代碼用分號表示。 例如&#xff0c;下面取自一個類定義的代碼聲明了兩個抽…