VTK8.2.0+QT5.9.1+VS2017 TXT点云数据读取实例

#include "qtgui.h"
#include <QAction>

QtGui::QtGui(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	AboutSignalorSlot();
}
void QtGui::AboutSignalorSlot()
{
	connect(ui.actionOpen, SIGNAL(triggered()),this,SLOT(OpenFILE()));
}
void QtGui::OpenFILE()
{
	QString curPath = QDir::currentPath(); //获取应用程序当前目录。
	QString dlgTitle = "选择一个文件";
	QString filter = "文本文件(*.txt);;LAS文件(*.las);;所有文件(*.*)";
	QString aFileName = QFileDialog::getOpenFileName(
		this,
		dlgTitle, curPath, filter);
	if (!aFileName.isEmpty())
	{
		//QString转string类
		std::string file_name = aFileName.toStdString();
		ShowCLud(file_name.c_str());
		
	}
}
void QtGui::ShowCLud(const char* ptr)
{

	vtkSmartPointer<vtkPoints> m_Points = vtkSmartPointer<vtkPoints>::New();
	vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();   //_存放细胞顶点,用于渲染(显示点云所必须的)
	FILE *fp = NULL;
	fp = fopen(ptr, "r"); 
	if (!fp) {
		exit(1);
	}
	double x = 0, y = 0, z = 0, p=0;
	int i = 0;
	while (!feof(fp)) {
		fscanf(fp, "%ld,%lf,%lf,%lf",&p,&x, &y, &z);
		m_Points->InsertPoint(i, x, y, z);      //_加入点信息
		vertices->InsertNextCell(1);     //_加入细胞顶点信息----用于渲染点集
		vertices->InsertCellPoint(i++);
	}
	fclose(fp);
	//
	vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
	polyData->SetPoints(m_Points);       //_设置点集
	polyData->SetVerts(vertices);        //_设置渲染顶点


//以下为可视化操作

	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	cylinderMapper->SetInputData(polyData);

	vtkSmartPointer<vtkActor> cylinderActor =
		vtkSmartPointer<vtkActor>::New();
	cylinderActor->SetMapper(cylinderMapper);
	cylinderActor->GetProperty()->SetPointSize(4);
	cylinderActor->GetProperty()->SetColor(0.0, 1.0, 0.0);
	
	vtkSmartPointer<vtkRenderer> renderer =
		vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cylinderActor);
	renderer->SetBackground(0.0, 0.0, 0.0);

	vtkSmartPointer<vtkRenderWindow> renWin =
		vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(renderer);
	renWin->Render();

	ui.qvtkWidget->SetRenderWindow(renWin);

}


#pragma once
#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#endif

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

#include <QtWidgets/QMainWindow>
#include<QFileDialog>
#include <QFile>
#include<QDIR>
#include<iostream>
#include "ui_qtgui.h"


#include <vtkSmartPointer.h>
#include <vtkSimplePointsReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

using namespace std;


class QtGui : public QMainWindow
{
	Q_OBJECT

public:
	QtGui(QWidget *parent = Q_NULLPTR);
	void AboutSignalorSlot();//关联信号和槽函数

private:
	Ui::QtGuiClass ui;
private slots:
	void OpenFILE();
	void ShowCLud(const char* ptr);
};

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༄yi笑奈何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值