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

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.lqws.cn/news/89569.html

相关文章:

  • electron定时任务,打印内存占用情况
  • 升级:用vue canvas画一个能源监测设备和设备的关系监测图!
  • Qt 仪表盘源码分享
  • Electron桌面应用下,在拍照、展示pdf等模块时,容易导致应用白屏
  • 不确定性分析在LEAP能源-环境系统建模中的整合与应用
  • 【QT】QString 与QString区别
  • 基于LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用
  • 【QT】`QTextCursor::insertText()`中插入彩色文本
  • qt 事件顺序
  • Kafka集群部署(docker容器方式)SASL认证(zookeeper)
  • QT常用控件(1)
  • 便捷高效能源服务触手可及,能耗监测系统赋能智能建筑与智慧城市
  • uefi和legacy有什么区别_从几方面分析uefi和legacy的区别
  • C#学习12——预处理
  • 服装产品属性描述数据集(19197条),AI智能体知识库收集~
  • Qwen与Llama分词器核心差异解析
  • 从Java的JDK源码中学设计模式之装饰器模式
  • Rust 学习笔记:关于 Cargo 的练习题
  • 大宽带怎么做
  • 软件评测师 案例真题笔记
  • 05 APP 自动化- Appium 单点触控 多点触控
  • Bash shell四则运算
  • AD转嘉立创EDA
  • n8n 自动化平台 Docker 部署教程(附 PostgreSQL 与更新指南)
  • impala中更改公网ip为内网ip
  • 深入解析 Java 中的 synchronized:从使用到底层原理的全面详解
  • LRC and VIP
  • 数据挖掘顶刊《IEEE Transactions on Knowledge and Data Engineering》2025年5月研究热点都有些什么?
  • SQL思路解析:窗口滑动的应用
  • MyBatis 的动态 SQL