QT 5.9.2+VTK8.0实现等高线绘制

news2025/6/6 21:20:13

项目下载链接: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);
        //每个坐标点都需要创建一个顶点Cell
        cellArray->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-vtkDelaunay2D
    vtkSmartPointer<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.coloradmin.cn/o/2402128.html

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

相关文章

兼容老设备!EtherNet/IP转DeviceNet网关解决储能产线通讯难题

在新能源行业飞速发展的当下&#xff0c;工业自动化水平的高低直接影响着企业的生产效率与产品质量。JH-EIP-DVN疆鸿智能ETHERNET/IP和DEVICENET作为工业领域常用的通信协议&#xff0c;它们之间的转换应用在新能源生产线上发挥着关键作用。本文重点探讨ETHERNETIP从站转DEVICE…

LabVIEW自感现象远程实验平台

LabVIEW开发自感现象远程实验平台&#xff0c;通过整合 NI数据采集设备、菲尼克斯&#xff08;Phoenix Contact&#xff09;继电器模块及罗技&#xff08;Logitech&#xff09;高清摄像头&#xff0c;实现远程数据采集、仪器控制与实时监控三大核心功能。平台突破传统实验装置局…

Python----目标检测(《YOLOv3:AnIncrementalImprovement》和YOLO-V3的原理与网络结构)

一、《YOLOv3:AnIncrementalImprovement》 1.1、基本信息 标题&#xff1a;YOLOv3: An Incremental Improvement 作者&#xff1a;Joseph Redmon, Ali Farhadi 机构&#xff1a;华盛顿大学&#xff08;University of Washington&#xff09; 发表时间&#xff1a;2018年 代…

算法篇 八大排序(冒泡 插入 选择 堆 希尔 快排 归并 计数)

目录 引言 1.冒泡排序 思路 代码实现 2.选择排序 思路 代码实现&#xff08;存在易错点&#xff09; 3.插入排序 思路 代码实现 4.希尔排序 思路 代码实现 5.堆排序 思路 代码实现 6.快速排序&#xff08;快排&#xff09; 一.三路划分 思路 代码实现 二.自…

音视频之视频压缩编码的基本原理

系列文章&#xff1a; 1、音视频之视频压缩技术及数字视频综述 2、音视频之视频压缩编码的基本原理 一、预测编码&#xff1a; 1、预测编码的基本概念&#xff1a; 预测法是最简单、实用的视频压缩编码方法&#xff0c;经过压缩编码后传输的并不是像素本身的取样值&#xff0…

IDEA 包分层显示设置

方法一&#xff08;用的IntelliJ IDEA 2024.1.4版本&#xff09;&#xff1a; 找到项目视图设置入口&#xff1a;在左侧Project&#xff08;项目&#xff09;面板的顶部&#xff0c;有个三个点...的按钮 &#xff0c;点击它。 进入树形外观配置&#xff1a;在弹出的菜单中&…

深度学习和神经网络 卷积神经网络CNN

1.什么是卷积神经网络 一种前馈神经网络&#xff1b;受生物学感受野的机制提出专门处理网格结构数据的深度学习模型 核心特点&#xff1a;通过卷积操作自动提取空间局部特征&#xff08;如纹理、边缘&#xff09;&#xff0c;显著降低参数量 2.CNN的三个结构特征 局部连接&a…

PlayWright | 初识微软出品的 WEB 应用自动化测试框架

Playwright是微软大厂背书的跨平台 WEB 应用自动化测试框架&#xff0c;支持多开发语言&#xff08;TypeScript、JavaScript、.Net、Python、Java&#xff09;及多浏览器&#xff08;Chromium、WebKit、Firefox&#xff09;&#xff0c;同时支持移动端测试。 安装 playwright …

Mac电脑_钥匙串操作选项变灰的情况下如何删除?

Mac电脑_钥匙串操作选项变灰的情况下如何删除&#xff1f; 这时候 可以使用相关的终端命令进行操作。 下面附加文章《Mac电脑_钥匙串操作的终端命令》。 《Mac电脑_钥匙串操作的终端命令》 &#xff08;来源&#xff1a;百度~百度AI 发布时间&#xff1a;2025-06&#xff09;…

2025前端微服务 - 无界 的实战应用

遇饮酒时须饮酒&#xff0c;得高歌处且高歌 文章目录 什么是前端微服务主流框架概述无界 - 腾讯乾坤 - 阿里Micro-app Vue3项目引用⑴. 项目依赖安装⑵. main.ts 文件配置⑶. 路由配置⑷. 页面设置 隐藏子应用菜单及顶部信息栏子应用样式冲突问题虚拟路由⑴. 路由⑵. 页面 跨域…

【设计模式-4.8】行为型——中介者模式

说明&#xff1a;本文介绍行为型设计模式之一的中介者模式 定义 中介者模式&#xff08;Mediator Pattern&#xff09;又叫作调节者模式或调停者模式。用一个中介对象封装一系列对象交互&#xff0c;中介者使各对象不需要显式地互相作用&#xff0c;从而使其耦合松散&#xf…

行列式的性质

1 行列式使用如下性质定义 1&#xff09;单位矩阵行列式值为 1&#xff0c; &#xff0c;对于任意单位矩阵均成立&#xff1b; 2&#xff09;当矩阵交换一行后&#xff0c;行列式值改变符号&#xff0c;如置换矩阵的行列式值为 &#xff08;根据行交换次数决定&#xff09;&…

联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率

在金融行业核心基础设施国产化浪潮与网络安全强监管的双重背景下&#xff0c;上海证券交易所&#xff08;以下简称“上交所”&#xff09;积极拥抱变革&#xff0c;携手长期合作伙伴联软科技&#xff0c;成功部署了联软安全策略管理系统&#xff08;NSPM&#xff09;。该项目不…

Flask + ECharts+MYSQL物联网数字化大屏

基于Flask+ECharts的物联网数字化大屏系统,包含中国地图实时数据更新功能。这个系统模拟了物联网设备在全国范围内的分布和运行状况,并实时更新数据。 一、系统架构设计 技术栈 后端:Flask(轻量级路由+API支持) 前端:ECharts(地图+动态图表)、WebSocket(实时更新)…

数据库系统概论(十六)数据库安全性(安全标准,控制,视图机制,审计与数据加密)

数据库系统概论&#xff08;十六&#xff09;数据库安全性 前言一、数据库安全性1. 什么是数据库安全性&#xff1f;2. 为何会存在安全问题&#xff1f; 二、安全标准的发展1. 早期的“开拓者”&#xff1a;TCSEC标准2. 走向国际统一&#xff1a;CC标准3. TCSEC和CC标准有什么不…

vue3从入门到精通(基础+进阶+案例)

Vue是什么&#xff1f; 渐进式JavaScript框架&#xff0c;易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的Web前端框架 为什么要学习Vue Vue是目前前端最火的框架之一 Vue是目前企业技术栈中要求的知识点 Vue可以提升开发体验 。。。 Vue简介 Vue(发音为/vju/,…

【Linux 学习计划】-- 系统中进程是如何调度的(内核进程调度队列)

目录 回顾进程优先级与进程调度的引入 内核runqueue图例 关于queue[140]前100个位置 | 实时进程与分时进程 遍历需要调度的进程与bitmap的引入 active、expired指针 结语 回顾进程优先级与进程调度的引入 在我们之前的学习中&#xff0c;我们是有学习过进程优先级这个概…

C#、VB.net——如何设置窗体应用程序的外边框不可拉伸

以Visual studio 2015为例&#xff0c;具体操作如下&#xff1a; 1、将窗体的“FormBorderStyle”属性值修改为“FixedSingle”&#xff1a; 2、点击“格式”——“锁定控件”&#xff1a; 这样生成的程序边框即可固定住&#xff0c;无法拉伸。

基于SpringBoot的房屋租赁系统的设计与实现(thymeleaf+MySQL)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Spring Boot统一功能处理深度解析

第一章&#xff1a;为什么需要统一功能处理&#xff1f; 想象你正在开发一个电商系统&#xff0c;包含用户管理、商品管理、订单管理等模块。每个模块都需要&#xff1a; 用户身份验证操作日志记录异常统一处理数据格式标准化 如果每个模块都单独实现这些功能&#xff1a; …