VTK STL 体积 表面积测量 最短路径 读取中文路径

目录

开发环境:

vtkMassProperties

三、中文路径 数据读取


开发环境:

    系统:Win10   VTK:8.2.0     Qt:5.12.4

一、结构化对象 体积 面积

vtkMassProperties

VTK 计算体积和面积的主要类 vtkMassProperties

vtkSmartPointer< vtkSphereSource > sphereSource = vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetRadius( 100 );
sphereSource->SetPhiResolution( 21 );
sphereSource->SetThetaResolution( 41 );
sphereSource->Update();vtkSmartPointer< vtkTriangleFilter > triangleFilter= vtkSmartPointer< vtkTriangleFilter >::New();
triangleFilter->SetInputData( sphereSource->GetOutput() );
triangleFilter->Update();vtkSmartPointer< vtkMassProperties > polygonProperties = vtkSmartPointer< vtkMassProperties >::New();
polygonProperties->SetInputData( triangleFilter->GetOutput());
polygonProperties->Update();double area = polygonProperties->GetSurfaceArea();
double vol = polygonProperties->GetVolume();qDebug() << "Data area is:" << QString::number(area) << "Data volume is: " << QString::number( vol );

double to QString 保留二位小数 非科学计算法

QString lab = QString::number(volume, 'f', 2);

二、 最短路径计算机

vtkDijkstraGraphGeodesicPath

使用起来是很方便的,只需设置起点和终点:

auto dijkstra = vtkSmartPointer<vtkDijkstraGraphGeodesicPath>::New();
dijkstra->SetInputData(meshData);
dijkstra->SetStartVertex(startId);
dijkstra->SetEndVertex(endId);
dijkstra->Update();// Get result
tkIdList* idList = dijkstra->GetIdList();vtkPolyData* line = dijkstra->GetOutput();

code:

在一个球体上,通过鼠标右键拾取点,观察最短路径

#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkDijkstraGraphGeodesicPath.h>
#include <vtkCellPicker.h>
#include <vtkIdList.h>
#include <vtkPoints.h>
#include <vtkPolyLine.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>class MyInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:static MyInteractorStyle* New();vtkTypeMacro(MyInteractorStyle, vtkInteractorStyleTrackballCamera);MyInteractorStyle(){this->Mesh = nullptr;this->Picker = nullptr;this->PreId = -1;this->CurId = -1;}~MyInteractorStyle(){this->Mesh = nullptr;this->Picker = nullptr;this->PreId = -1;this->CurId = -1;}void OnRightButtonUp(){auto ren = this->GetDefaultRenderer();auto interactor = this->GetInteractor();int *clickPos = interactor->GetEventPosition();double pos[3];this->Picker->Pick(clickPos[0], clickPos[1], 0, ren);vtkIdType cellId = this->Picker->GetCellId();if (cellId != -1){vtkIdType pointId = this->Picker->GetPointId();this->CurId = pointId;DrawPoint();if (this->PreId != -1){DrawLine();}this->PreId = pointId;}vtkInteractorStyleTrackballCamera::OnRightButtonUp();}vtkPolyData* Mesh;vtkCellPicker* Picker;private:void DrawPoint(){auto ren = this->GetDefaultRenderer();double* pos = this->Mesh->GetPoint(this->CurId);auto sphere = vtkSmartPointer<vtkSphereSource>::New();sphere->SetRadius(0.01);sphere->SetCenter(pos);auto pointMapper = vtkSmartPointer<vtkPolyDataMapper>::New();pointMapper->SetInputConnection(sphere->GetOutputPort());auto pointActor = vtkSmartPointer<vtkActor>::New();pointActor->SetMapper(pointMapper);pointActor->GetProperty()->SetColor(1, 0, 0); // Redren->AddActor(pointActor);ren->Render();}void DrawLine(){auto dijkstra = vtkSmartPointer<vtkDijkstraGraphGeodesicPath>::New();dijkstra->SetInputData(this->Mesh);dijkstra->SetStartVertex(this->PreId);dijkstra->SetEndVertex(this->CurId);dijkstra->Update();vtkIdList* idList = dijkstra->GetIdList();auto points = vtkSmartPointer<vtkPoints>::New();for (vtkIdType i = 0; i < idList->GetNumberOfIds(); i++){vtkIdType id = idList->GetId(i);points->InsertNextPoint(this->Mesh->GetPoint(id));}auto polyLine = vtkSmartPointer<vtkPolyLine>::New();polyLine->GetPointIds()->SetNumberOfIds(points->GetNumberOfPoints());for (vtkIdType i = 0; i < points->GetNumberOfPoints(); i++){polyLine->GetPointIds()->SetId(i, i);}auto cells = vtkSmartPointer<vtkCellArray>::New();cells->InsertNextCell(polyLine);auto polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);polyData->SetLines(cells);		auto ren = this->GetDefaultRenderer();auto lineMapper = vtkSmartPointer<vtkPolyDataMapper>::New();lineMapper->SetInputData(polyData);//lineMapper->SetInputConnection(dijkstra->GetOutputPort());auto lineActor = vtkSmartPointer<vtkActor>::New();lineActor->SetMapper(lineMapper);lineActor->GetProperty()->SetColor(0, 1, 0); // GreenlineActor->GetProperty()->SetLineWidth(3);ren->AddActor(lineActor);ren->Render();}vtkIdType PreId;vtkIdType CurId;
};
vtkStandardNewMacro(MyInteractorStyle);int main(int argc, char* argv[])
{auto sphereSource = vtkSmartPointer<vtkSphereSource>::New();sphereSource->Update();auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(sphereSource->GetOutputPort());auto actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->EdgeVisibilityOn();auto picker = vtkSmartPointer<vtkCellPicker>::New();picker->AddPickList(actor);auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWin = vtkSmartPointer<vtkRenderWindow>::New();renderWin->SetSize(600, 600);renderWin->AddRenderer(renderer);auto style = vtkSmartPointer<MyInteractorStyle>::New();style->SetDefaultRenderer(renderer);style->Mesh = sphereSource->GetOutput();style->Picker = picker;auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWin);interactor->SetInteractorStyle(style);renderer->AddActor(actor);renderer->SetBackground(1, 1, 1);interactor->Start();return EXIT_SUCCESS;
}

三、中文路径 数据读取

		QString filePath="气管.stl"QByteArray cdata = filePath.toLocal8Bit(); // muststd::string FilePath = cdata.toStdString();std::cout << "FilePath" << FilePath << std::endl;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14411.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGis Pro如何通过C#进行插件开发?

文章目录 0.引言1.开发工具准备2.VS&#xff08;C#&#xff09;创建ArcGIS Pro模块加载项3.编译并使用ArcGis Pro插件 0.引言 ArcGIS Pro插件&#xff08;Add-ins&#xff09;可以让用户更加容易的自定义和扩展ArcGIS Pro应用程序&#xff0c;它创建一系列自定义工具提供了一个…

[论文笔记] Gemini: A Computation-Centric Distributed Graph Processing System

Gemini: A Computation-Centric Distributed Graph Processing System Gemini: 以计算为中心的分布式图处理系统 [Paper] [Slides] [Code] OSDI’16 摘要 提出了 Gemini, 一个分布式图处理系统, 应用了多种针对计算性能的优化以在效率之上构建可扩展性. Gemini 采用: 稀疏-…

web3创业有哪些机会及具体案列(二)

目录 1. 去中心化金融&#xff08;DeFi&#xff09;&#xff1a;2. 去中心化身份验证和数字身份&#xff1a;3. 去中心化市场和电子商务&#xff1a;4. 区块链游戏和虚拟资产&#xff1a;5. 数据隐私和安全&#xff1a;6. 去中心化社交媒体&#xff1a;7. 去中心化能源交易&…

通用二进制方式安装Mysql

一、去官网下载MySQL glibc版本 示例环境为CentOS 7.9版本&#xff0c;要安装的Mysql版本为5.7 1.选择版本下载到自己本地 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2.将下载的tar包上传到自己的CentOS虚拟主机上 传输完成后&#xff0c;查看确认一下 …

【计算机网络】第 2 课 - 计算机网络的性能指标

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、性能指标 2.1、速率 2.2、带宽 2.3、吞吐量 2.4、时延 2.5、时延带宽积 2.6、往返时间 2.7、利用率 2.8、丢…

【5G PHY】5G控制资源集CORESET介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

组合模式:如何设计实现支持递归遍历的文件系统目录树结构?

组合模式跟我们之前讲的面向对象设计中的“组合关系&#xff08;通过组合来组装两个类&#xff09;”&#xff0c;完全是两码事。这里讲的“组合模式”&#xff0c;主要是用来处理树形结构数据。这里的“数据”&#xff0c;你可以简单理解为一组对象集合&#xff0c;待会我们会…

JVM04-优化JVM内存分配以及内存持续上升问题和CPU过高问题排查

1-JVM内存分配 1.1-JVM内存分配性能问题 JVM内存分配不合理最直接的表现就是频繁的GC&#xff0c;这会导致上下文切换等性能问题&#xff0c;从而降低系统的吞吐量、增加系统的响应时间。因此&#xff0c;如果你在线上环境或性能测试时&#xff0c;发现频繁的GC&#xff0c;且…

Spring异常处理器

文章目录 1. 异常分析2. 异常处理器2.1 异常处理器核心2.2 异常处理顺序 3. 自定义异常 1. 异常分析 问题:   程序允许不免的在各层都可能会产生异常&#xff0c;我们该如何处理这些异常? 如果只是在方法里面单独使用 try… catch… 语句去一个一个的进行捕捉处理的话&#x…

MAC M1上docker rocketmq简单环境搭建和代码

工作了这么多年&#xff0c;rocketmq还没有用过&#xff0c;由于现在的工作中涉及到了&#xff0c;周六吃完午饭就开始搞&#xff0c;结果到现在3点钟才把环境弄好&#xff0c;测试代码搞起。 整个流程分成两步 安装简单的rocket环境起springboot项目测试 参考文章&#xff…

SQL Server 2012数据库允许远程连接设置

1、打开 SQL Server Management Studio 2、打开 Security 按照如下设置&#xff0c;然后点确定 3、打开SQL Server Configuration ManagerMent 4、如下图都设置为Enabled 6、sql server重启

企业和公司扩展WordPress网站的4种方法

Netflix 通过邮递观看 DVD。Apple 是一家计算机公司&#xff0c;而不是电话公司。WordPress 是一个博客平台。 这三个陈述有什么共同点&#xff1f;十年前都是对的&#xff0c;现在都不是了。如今&#xff0c;Netflix 以数字方式提供原创内容而闻名。Apple 正在推出其广受欢迎…