qtvtkvs2015测试代码

该代码实现了一个基于Qt、VTK和PCL的点云处理应用。它包括一个打开PCD文件的按钮,用于加载点云数据。点云数据加载后,使用PCL库进行处理,并通过VTK进行可视化展示。应用中包含了坐标轴的添加以及相机重置功能。
摘要由CSDN通过智能技术生成
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_qt_vtk_video.h"

#include <QFileDialog>
#include <vtkRenderWindow.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>


#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

class qt_vtk_video : public QMainWindow
{
    Q_OBJECT

public:
    qt_vtk_video(QWidget *parent = Q_NULLPTR);

	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;


	void initialVtkWidget();
	void onOpenFile();

private:
    Ui::qt_vtk_videoClass ui;

protected slots:
	   void openPDB();
};



在这里插入图片描述

#include "qt_vtk_video.h"


void qt_vtk_video::initialVtkWidget()
{
	cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
	viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
	viewer->addPointCloud(cloud, "cloud");
	ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
	viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());
	ui.qvtkWidget->update();
}


void qt_vtk_video::openPDB()
{
	QString fileName = QFileDialog::getOpenFileName(this, "Open PCD PointCloud", ".", "Open PCD files(*.pcd)");
	if (!fileName.isEmpty()) {
		std::string file_name = fileName.toStdString();
		pcl::PCLPointCloud2 cloud2;
		Eigen::Vector4f origin;
		Eigen::Quaternionf orientation;
		int pcd_version;
		int data_type;
		unsigned int data_idx;
		int offset = 0;
		pcl::PCDReader rd;
		rd.readHeader(file_name, cloud2, origin, orientation, pcd_version, data_type, data_idx);
		if (data_type == 0)
		{
			pcl::io::loadPCDFile(fileName.toStdString(), *cloud);
		}
		else if (data_type == 2)
		{
			pcl::PCDReader reader;
			reader.read<pcl::PointXYZ>(fileName.toStdString(), *cloud);
		}


		viewer->addCoordinateSystem(0.5);
		viewer->updatePointCloud(cloud, "cloud");
		viewer->resetCamera();
		ui.qvtkWidget->update();
	}

}


qt_vtk_video::qt_vtk_video(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	initialVtkWidget();
}

/********************************************************************************
** Form generated from reading UI file 'qt_vtk_video.ui'
**
** Created by: Qt User Interface Compiler version 5.12.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QT_VTK_VIDEO_H
#define UI_QT_VTK_VIDEO_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>
#include "QVTKWidget.h"

QT_BEGIN_NAMESPACE

class Ui_qt_vtk_videoClass
{
public:
    QWidget *centralWidget;
    QVTKWidget *qvtkWidget;
    QPushButton *pushButton;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *qt_vtk_videoClass)
    {
        if (qt_vtk_videoClass->objectName().isEmpty())
            qt_vtk_videoClass->setObjectName(QString::fromUtf8("qt_vtk_videoClass"));
        qt_vtk_videoClass->resize(787, 751);
        centralWidget = new QWidget(qt_vtk_videoClass);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        qvtkWidget = new QVTKWidget(centralWidget);
        qvtkWidget->setObjectName(QString::fromUtf8("qvtkWidget"));
        qvtkWidget->setGeometry(QRect(90, 60, 631, 591));
        pushButton = new QPushButton(centralWidget);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(90, 30, 141, 23));
        qt_vtk_videoClass->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(qt_vtk_videoClass);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 787, 23));
        qt_vtk_videoClass->setMenuBar(menuBar);
        mainToolBar = new QToolBar(qt_vtk_videoClass);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        qt_vtk_videoClass->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(qt_vtk_videoClass);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        qt_vtk_videoClass->setStatusBar(statusBar);

        retranslateUi(qt_vtk_videoClass);
        QObject::connect(pushButton, SIGNAL(clicked()), qt_vtk_videoClass, SLOT(openPDB()));

        QMetaObject::connectSlotsByName(qt_vtk_videoClass);
    } // setupUi

    void retranslateUi(QMainWindow *qt_vtk_videoClass)
    {
        qt_vtk_videoClass->setWindowTitle(QApplication::translate("qt_vtk_videoClass", "qt_vtk_video", nullptr));
        pushButton->setText(QApplication::translate("qt_vtk_videoClass", "\346\211\223\345\274\200pdb\347\202\271\344\272\221\346\226\207\344\273\266", nullptr));
    } // retranslateUi

};

namespace Ui {
    class qt_vtk_videoClass: public Ui_qt_vtk_videoClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QT_VTK_VIDEO_H

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值