#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);
};