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

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.lryc.cn/news/2402128.html

相关文章:

  • CppCon 2015 学习:3D Face Tracking and Reconstruction using Modern C++
  • Three.js进阶之音频处理与展示
  • 4.2 HarmonyOS NEXT分布式AI应用实践:联邦学习、跨设备协作与个性化推荐实战
  • 兼容老设备!EtherNet/IP转DeviceNet网关解决储能产线通讯难题
  • 健康检查:在 .NET 微服务模板中优雅配置 Health Checks
  • 【Pytorch学习笔记】模型模块08——AlexNet模型详解
  • LabVIEW自感现象远程实验平台
  • AppTrace 视角下 App 一键拉起:提升应用转化率的高效方案​
  • 梯度下降:机器学习优化的核心算法
  • Vue-6-前端框架Vue之基于Plotly.js绘制曲线
  • Python----目标检测(《YOLOv3:AnIncrementalImprovement》和YOLO-V3的原理与网络结构)
  • Redux:不可变数据与纯函数的艺术
  • 算法篇 八大排序(冒泡 插入 选择 堆 希尔 快排 归并 计数)
  • 技术文档写作全攻略
  • 网络安全全景解析
  • 音视频之视频压缩编码的基本原理
  • IDEA 包分层显示设置
  • 书籍将正方形矩阵顺时针转动90°(8)0605
  • 【docker】容器技术如何改变软件开发与部署格局
  • C#抽象类深度解析 _ 核心特性与实战指南
  • 时序数据库IoTDB的UDF Sample算法在数据监控、故障预防的应用
  • Flask-SQLAlchemy使用小结
  • 深度学习和神经网络 卷积神经网络CNN
  • 用 NGINX 构建高效 POP3 代理`ngx_mail_pop3_module`
  • 解决:如何在Windows adb使用dmesg | grep检查内核日志
  • PlayWright | 初识微软出品的 WEB 应用自动化测试框架
  • Mac电脑_钥匙串操作选项变灰的情况下如何删除?
  • Git Patch 使用详解:生成、应用与多提交合并导出
  • 2025前端微服务 - 无界 的实战应用
  • Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)