点云数据格式

qt程序加载obj点云和pcd点云

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    initVTK();
    initVTKModel();

    connect(ui->btn_load_pcd,&QPushButton::clicked,this,&MainWindow::on_btn_load_clicked);
    connect(ui->btn_load_obj,&QPushButton::clicked,this,&MainWindow::showModel);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::initVTK()
{
    // 创建VTK部件
    CloudvtkWidget = ui->wid_cloud;
    Cloudstyle = vtkSmartPointer<vtkCloudStyle>::New();  //创建自定义交互样式

    // 初始化渲染器
    Cloudrenderer = vtkSmartPointer<vtkRenderer>::New();
    CloudrenderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();    //创建一个渲染窗口
    CloudrenderWindow->AddRenderer(Cloudrenderer);
    CloudvtkWidget->setRenderWindow(CloudrenderWindow);
    Cloudrenderer->SetBackground(0, 0, 0);

    // 配置交互器
    CloudrenderWindowInteractor = CloudvtkWidget->renderWindow()->GetInteractor();
    if (!CloudrenderWindowInteractor)
    {
        qDebug() << "未能获取渲染窗口交互器!";
        return;
    }
    CloudrenderWindowInteractor->SetInteractorStyle(Cloudstyle);  //将交互器的交互样式设置为之前创建的交互样式对象
    CloudrenderWindowInteractor->Initialize();   //初始化交互器,准备接受用户输入

    Cloudstyle->InitializeRenderer(Cloudrenderer);

    cloud = pcl::PointCloud<pcl::PointXYZRGB>::Ptr(new pcl::PointCloud<pcl::PointXYZRGB>()); //初始化点云数据
    // 创建演员并设置映射器
    cloudActor = vtkSmartPointer<vtkActor>::New();
    cloudActor->GetProperty()->SetRenderPointsAsSpheres(false); // 禁用点球体渲染
    cloudActor->GetProperty()->SetPointSize(2); // 初始点大小
}

void MainWindow::initVTKModel()
{
    // 创建VTK部件
    ModelvtkWidget = ui->wid_model;
    Modelstyle = vtkSmartPointer<vtkCloudStyle>::New();  //创建自定义交互样式

    // 初始化渲染器
    Modelrenderer = vtkSmartPointer<vtkRenderer>::New();
    ModelrenderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();    //创建一个渲染窗口
    ModelrenderWindow->AddRenderer(Modelrenderer);

    ModelvtkWidget->setRenderWindow(ModelrenderWindow);
    Modelrenderer->SetBackground(0, 0, 0);

    // 配置交互器
    ModelrenderWindowInteractor = ModelvtkWidget->renderWindow()->GetInteractor();
    if (!ModelrenderWindowInteractor)
    {
        qDebug() << "未能获取渲染窗口交互器!";
        return;
    }
    ModelrenderWindowInteractor->SetInteractorStyle(Modelstyle);  //将交互器的交互样式设置为之前创建的交互样式对象
    ModelrenderWindowInteractor->Initialize();   //初始化交互器,准备接受用户输入

    Modelstyle->InitializeRenderer(Modelrenderer);

    // 创建演员并设置映射器
    ModelActor = vtkSmartPointer<vtkActor>::New();
}

void MainWindow::on_btn_load_clicked()
{
    cloud->clear();

    QStringList pcdFilelist;
    pcdFilelist <<"D:\\C++\\Qt\\VTK_learn\\file\\output_cloud.pcd";

    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered = std::make_shared<pcl::PointCloud<pcl::PointXYZRGB>>();

    for(int i = 0; i < pcdFilelist.size(); ++i)
    {
        QString _file = pcdFilelist.at(i);
        if(!_file.contains("OPC_") && _file.endsWith("pcd"))
        {
            cloudPath = _file;
            QByteArray fileNameBit = _file.toLocal8Bit();
            const char* fileNameChar = fileNameBit.data();
            cloud_filtered->clear();
            if(pcl::io::loadPCDFile<pcl::PointXYZRGB>(fileNameChar, *cloud_filtered) == -1)
            {
                continue;
            }
        }
        *cloud += *cloud_filtered;
    }
    if(cloud->empty())
        return;
    //
    qDebug()<<"显示点云";

    showCloud();
}

void MainWindow::showCloud()
{

    vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();

    // 创建VTK点集和颜色数组
    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
    vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
    colors->SetName("Colors");
    colors->SetNumberOfComponents(3); // RGB三个分量
    // 预分配内存
    points->Allocate(cloud->points.size());
    colors->Allocate(cloud->points.size() * 3);

    // 创建顶点单元数组
    vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();

    // 遍历点云中的每一个点,将其添加到VTK点集中,并设置其颜色
    for (size_t i = 0; i < cloud->points.size(); ++i) {
        points->InsertNextPoint(cloud->points[i].x, cloud->points[i].y, cloud->points[i].z);
        colors->InsertNextTuple3(cloud->points[i].r, cloud->points[i].g, cloud->points[i].b);
        // 直接插入顶点
        vertices->InsertNextCell(1);
        vertices->InsertCellPoint(i);
    }
    // 填充完成后设置修改标志
    points->Modified();
    colors->Modified();

    // 将点和颜色信息附加到polydata上
    polyData->SetPoints(points);
    polyData->SetVerts(vertices);

    polyData->GetPointData()->SetScalars(colors);

    // 设置渲染管道
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(polyData);
    mapper->ScalarVisibilityOn(); // 启用标量可见性以使用点的颜色信息
    cloudActor->SetMapper(mapper);

    cloudActor->SetPickable(true);   // 允许点云交互

    // 添加演员到渲染器,并设置背景颜色
    Cloudrenderer->RemoveAllViewProps();  // 清除旧数据
    Cloudrenderer->AddActor(cloudActor);
    Cloudrenderer->SetBackground(0.5, 0.5, 0.5);

    Cloudrenderer->GetActiveCamera()->SetViewUp(0,0,1);  //确保视图上方向为Z轴正方向
    Cloudrenderer->ResetCamera();    // 必须重置相机
    CloudvtkWidget->renderWindow()->Render();
    CloudvtkWidget->update();
}


void MainWindow::showModel()
{

    qDebug()<<"showModel";
    QString path = "D:\\C++\\Qt\\VTK_learn\\file\\OCC_Model.obj";

    vtkSmartPointer<vtkOBJReader> modelReader = vtkSmartPointer<vtkOBJReader>::New();
    modelReader->SetFileName(path.toUtf8().data());
    modelReader->Update();

    vtkSmartPointer<vtkPolyDataMapper> modelmapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    modelmapper->SetInputConnection(nullptr);
    modelmapper->SetInputConnection(modelReader->GetOutputPort());

    ModelActor->SetMapper(modelmapper);

    Modelrenderer->AddActor(ModelActor);
    Modelrenderer->SetBackground(0.5, 0.5, 0.5);

    Modelrenderer->GetActiveCamera()->SetViewUp(0,0,1);  //确保视图上方向为Z轴正方向
    Modelrenderer->ResetCamera();    // 必须重置相机
    ModelvtkWidget->renderWindow()->Render(); //完整渲染
    ModelvtkWidget->update(); //强制刷新,更新UI数据。
    qDebug()<<"showModel end ";

}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCore>
#include <QtGui>
#include <QMessageBox>

#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkAutoInit.h>
#include <vtkPolyData.h>
#include <vtkAxesActor.h>
#include <vtkOBJReader.h>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkBillboardTextActor3D.h>
#include <QVTKInteractorAdapter.h>
#include <vtkGenericOpenGLRenderWindow.h>

#include "vtkCloudStyle.h"
#include "vtkheader.h"


//PCL头
#include<pcl/io/ply_io.h>		//用来读取.ply格式的点云

#include<pcl/point_types.h>		//用于点云变量定义
#include <pcl/point_cloud.h>

#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/filter.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/search/kdtree.h>
#include <pcl/features/normal_3d.h>
#include <pcl/segmentation/region_growing.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/common/geometry.h>
#include <pcl/segmentation/extract_clusters.h>
#include <vtkPlaneSource.h>
#include <pcl/features/normal_3d.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/filters/statistical_outlier_removal.h>


QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void initVTK();
    void initVTKModel();

private slots:
    void on_btn_load_clicked();
    void showCloud();
    void showModel();

private:
    Ui::MainWindow *ui;

    //点云加载PCD格式的文件
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;      //点云数据
    QVTKOpenGLNativeWidget *CloudvtkWidget;
    vtkSmartPointer<vtkRenderer> Cloudrenderer;
    vtkSmartPointer<vtkGenericOpenGLRenderWindow> CloudrenderWindow;
    vtkSmartPointer<vtkActor> cloudActor;
    vtkSmartPointer<vtkRenderWindowInteractor> CloudrenderWindowInteractor;  //交互
    vtkSmartPointer<vtkCloudStyle> Cloudstyle;   //样式实现

    //模型点云加载OBJ格式的文件
    QVTKOpenGLNativeWidget *ModelvtkWidget;
    vtkSmartPointer<vtkRenderer> Modelrenderer;
    vtkSmartPointer<vtkGenericOpenGLRenderWindow> ModelrenderWindow;
    vtkSmartPointer<vtkActor> ModelActor;
    vtkSmartPointer<vtkRenderWindowInteractor> ModelrenderWindowInteractor;  //交互
    vtkSmartPointer<vtkCloudStyle> Modelstyle;   //样式实现

    QString cloudPath; // 点云文件路径


};
#endif // MAINWINDOW_H

pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp \
    vtkcloudstyle.cpp

HEADERS += \
    mainwindow.h \
    vtkcloudstyle.h

FORMS += \
    mainwindow.ui

INCLUDEPATH +=  $$PWD

include ($$PWD/vtk/vtk.pri)
# 设置源文件编码为 UTF-8
QMAKE_CXXFLAGS += /source-charset:utf-8
QMAKE_CXXFLAGS += /execution-charset:utf-8

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

vtk.pri

#include path
INCLUDEPATH += D:/PCL1.12.1/include/pcl-1.12
INCLUDEPATH += D:/PCL1.12.1/3rdParty/Boost/include/boost-1_78
INCLUDEPATH += D:/PCL1.12.1/3rdParty/Eigen/eigen3
INCLUDEPATH += D:/PCL1.12.1/3rdParty/FLANN/include
INCLUDEPATH += D:/PCL1.12.1/3rdParty/OpenNI2/Include
INCLUDEPATH += D:/PCL1.12.1/3rdParty/Qhull/include
INCLUDEPATH += D:/PCL1.12.1/3rdParty/VTK/debug/include/vtk-9.1
INCLUDEPATH += D:/PCL1.12.1/3rdParty/VTK/release/include/vtk-9.1

CONFIG(debug,debug|release){
LIBS += -LD:/PCL1.12.1/lib\
        -lpcl_commond\
        -lpcl_featuresd\
        -lpcl_filtersd\
        -lpcl_iod\
        -lpcl_io_plyd\
        -lpcl_kdtreed\
        -lpcl_keypointsd\
        -lpcl_mld\
        -lpcl_octreed\
        -lpcl_outofcored\
        -lpcl_peopled\
        -lpcl_recognitiond\
        -lpcl_registrationd\
        -lpcl_sample_consensusd\
        -lpcl_searchd\
        -lpcl_segmentationd\
        -lpcl_stereod\
        -lpcl_surfaced\
        -lpcl_trackingd\
        -lpcl_visualizationd

LIBS += -LD:/PCL1.12.1/3rdParty/Boost/lib\
        -llibboost_filesystem-vc142-mt-gd-x64-1_78\
        -llibboost_system-vc142-mt-gd-x64-1_78\
        -llibboost_thread-vc142-mt-gd-x64-1_78

        #-llibboost_atomic-vc142-mt-gd-x64-1_78\
        #-llibboost_bzip2-vc142-mt-gd-x64-1_78\
        #-llibboost_chrono-vc142-mt-gd-x64-1_78\
        #-llibboost_container-vc142-mt-gd-x64-1_78\
        #-llibboost_context-vc142-mt-gd-x64-1_78\
        #-llibboost_contract-vc142-mt-gd-x64-1_78\
        #-llibboost_coroutine-vc142-mt-gd-x64-1_78\
        #-llibboost_date_time-vc142-mt-gd-x64-1_78\
        #-llibboost_exception-vc142-mt-gd-x64-1_78\
        #-llibboost_graph_parallel-vc142-mt-gd-x64-1_78\
        #-llibboost_graph-vc142-mt-gd-x64-1_78\
        #-llibboost_iostreams-vc142-mt-gd-x64-1_78\
        #-llibboost_json-vc142-mt-gd-x64-1_78\
        #-llibboost_locale-vc142-mt-gd-x64-1_78\
        #-llibboost_log_setup-vc142-mt-gd-x64-1_78\
        #-llibboost_log-vc142-mt-gd-x64-1_78\
        #-llibboost_math_c99f-vc142-mt-gd-x64-1_78\
        #-llibboost_math_c99l-vc142-mt-gd-x64-1_78\
        #-llibboost_math_c99-vc142-mt-gd-x64-1_78\
        #-llibboost_math_tr1f-vc142-mt-gd-x64-1_78\
        #-llibboost_math_tr1l-vc142-mt-gd-x64-1_78\
        #-llibboost_math_tr1-vc142-mt-gd-x64-1_78\
        #-llibboost_mpi-vc142-mt-gd-x64-1_78\
        #-llibboost_nowide-vc142-mt-gd-x64-1_78\
        #-llibboost_numpy38-vc142-mt-gd-x64-1_78\
        #-llibboost_prg_exec_monitor-vc142-mt-gd-x64-1_78\
        #-llibboost_program_options-vc142-mt-gd-x64-1_78\
        #-llibboost_python38-vc142-mt-gd-x64-1_78\
        #-llibboost_random-vc142-mt-gd-x64-1_78\
        #-llibboost_regex-vc142-mt-gd-x64-1_78\
        #-llibboost_serialization-vc142-mt-gd-x64-1_78\
        #-llibboost_test_exec_monitor-vc142-mt-gd-x64-1_78\
        #-llibboost_timer-vc142-mt-gd-x64-1_78\
        #-llibboost_type_erasure-vc142-mt-gd-x64-1_78\
        #-llibboost_unit_test_framework-vc142-mt-gd-x64-1_78\
        #-llibboost_wave-vc142-mt-gd-x64-1_78\
        #-llibboost_wserialization-vc142-mt-gd-x64-1_78\
        #-llibboost_zlib-vc142-mt-gd-x64-1_78

LIBS += -LD:/PCL1.12.1/3rdParty/FLANN/lib\
        -lflann-gd\
        -lflann_cpp_s-gd\
        -lflann_cpp-gd\
        -lflann_s-gd

LIBS += -LD:/PCL1.12.1/3rdParty/OpenNI2/Lib\
        -lOpenNI2

LIBS += -LD:/PCL1.12.1/3rdParty/Qhull/lib\
        -lqhullcpp_d\
        -lqhullstatic_d\
        -lqhullstatic_rd\
        -lqhull_rd

LIBS += -LD:/PCL1.12.1/3rdParty/VTK/debug/lib\
        -lvtkcgns-9.1d\
        -lvtkChartsCore-9.1d\
        -lvtkCommonColor-9.1d\
        -lvtkCommonComputationalGeometry-9.1d\
        -lvtkCommonCore-9.1d\
        -lvtkCommonDataModel-9.1d\
        -lvtkCommonExecutionModel-9.1d\
        -lvtkCommonMath-9.1d\
        -lvtkCommonMisc-9.1d\
        -lvtkCommonSystem-9.1d\
        -lvtkCommonTransforms-9.1d\
        -lvtkDICOMParser-9.1d\
        -lvtkDomainsChemistry-9.1d\
        -lvtkDomainsChemistryOpenGL2-9.1d\
        -lvtkdoubleconversion-9.1d\
        -lvtkexodusII-9.1d\
        -lvtkexpat-9.1d\
        -lvtkFiltersAMR-9.1d\
        -lvtkFiltersCore-9.1d\
        -lvtkFiltersExtraction-9.1d\
        -lvtkFiltersFlowPaths-9.1d\
        -lvtkFiltersGeneral-9.1d\
        -lvtkFiltersGeneric-9.1d\
        -lvtkFiltersGeometry-9.1d\
        -lvtkFiltersHybrid-9.1d\
        -lvtkFiltersHyperTree-9.1d\
        -lvtkFiltersImaging-9.1d\
        -lvtkFiltersModeling-9.1d\
        -lvtkFiltersParallel-9.1d\
        -lvtkFiltersParallelImaging-9.1d\
        -lvtkFiltersPoints-9.1d\
        -lvtkFiltersProgrammable-9.1d\
        -lvtkFiltersSelection-9.1d\
        -lvtkFiltersSMP-9.1d\
        -lvtkFiltersSources-9.1d\
        -lvtkFiltersStatistics-9.1d\
        -lvtkFiltersTexture-9.1d\
        -lvtkFiltersTopology-9.1d\
        -lvtkFiltersVerdict-9.1d\
        -lvtkfmt-9.1d\
        -lvtkfreetype-9.1d\
        -lvtkGeovisCore-9.1d\
        -lvtkgl2ps-9.1d\
        -lvtkglew-9.1d\
        -lvtkGUISupportQt-9.1d\
        -lvtkGUISupportQtQuick-9.1d\
        -lvtkGUISupportQtSQL-9.1d\
        -lvtkhdf5_hl-9.1d\
        -lvtkhdf5-9.1d\
        -lvtkImagingColor-9.1d\
        -lvtkImagingCore-9.1d\
        -lvtkImagingFourier-9.1d\
        -lvtkImagingGeneral-9.1d\
        -lvtkImagingHybrid-9.1d\
        -lvtkImagingMath-9.1d\
        -lvtkImagingMorphological-9.1d\
        -lvtkImagingSources-9.1d\
        -lvtkImagingStatistics-9.1d\
        -lvtkImagingStencil-9.1d\
        -lvtkInfovisCore-9.1d\
        -lvtkInfovisLayout-9.1d\
        -lvtkInteractionImage-9.1d\
        -lvtkInteractionStyle-9.1d\
        -lvtkInteractionWidgets-9.1d\
        -lvtkIOAMR-9.1d\
        -lvtkIOAsynchronous-9.1d\
        -lvtkIOCGNSReader-9.1d\
        -lvtkIOChemistry-9.1d\
        -lvtkIOCityGML-9.1d\
        -lvtkIOCONVERGECFD-9.1d\
        -lvtkIOCore-9.1d\
        -lvtkIOEnSight-9.1d\
        -lvtkIOExodus-9.1d\
        -lvtkIOExport-9.1d\
        -lvtkIOExportGL2PS-9.1d\
        -lvtkIOExportPDF-9.1d\
        -lvtkIOGeometry-9.1d\
        -lvtkIOHDF-9.1d\
        -lvtkIOImage-9.1d\
        -lvtkIOImport-9.1d\
        -lvtkIOInfovis-9.1d\
        -lvtkIOIOSS-9.1d\
        -lvtkIOLegacy-9.1d\
        -lvtkIOLSDyna-9.1d\
        -lvtkIOMINC-9.1d\
        -lvtkIOMotionFX-9.1d\
        -lvtkIOMovie-9.1d\
        -lvtkIONetCDF-9.1d\
        -lvtkIOOggTheora-9.1d\
        -lvtkIOParallel-9.1d\
        -lvtkIOParallelXML-9.1d\
        -lvtkIOPLY-9.1d\
        -lvtkIOSegY-9.1d\
        -lvtkIOSQL-9.1d\
        -lvtkioss-9.1d\
        -lvtkIOTecplotTable-9.1d\
        -lvtkIOVeraOut-9.1d\
        -lvtkIOVideo-9.1d\
        -lvtkIOXML-9.1d\
        -lvtkIOXMLParser-9.1d\
        -lvtkjpeg-9.1d\
        -lvtkjsoncpp-9.1d\
        -lvtkkissfft-9.1d\
        -lvtklibharu-9.1d\
        -lvtklibproj-9.1d\
        -lvtklibxml2-9.1d\
        -lvtkloguru-9.1d\
        -lvtklz4-9.1d\
        -lvtklzma-9.1d\
        -lvtkmetaio-9.1d\
        -lvtknetcdf-9.1d\
        -lvtkogg-9.1d\
        -lvtkParallelCore-9.1d\
        -lvtkParallelDIY-9.1d\
        -lvtkpng-9.1d\
        -lvtkpugixml-9.1d\
        -lvtkRenderingAnnotation-9.1d\
        -lvtkRenderingContext2D-9.1d\
        -lvtkRenderingContextOpenGL2-9.1d\
        -lvtkRenderingCore-9.1d\
        -lvtkRenderingFreeType-9.1d\
        -lvtkRenderingGL2PSOpenGL2-9.1d\
        -lvtkRenderingImage-9.1d\
        -lvtkRenderingLabel-9.1d\
        -lvtkRenderingLOD-9.1d\
        -lvtkRenderingOpenGL2-9.1d\
        -lvtkRenderingQt-9.1d\
        -lvtkRenderingSceneGraph-9.1d\
        -lvtkRenderingUI-9.1d\
        -lvtkRenderingVolume-9.1d\
        -lvtkRenderingVolumeOpenGL2-9.1d\
        -lvtkRenderingVtkJS-9.1d\
        -lvtksqlite-9.1d\
        -lvtksys-9.1d\
        -lvtkTestingRendering-9.1d\
        -lvtktheora-9.1d\
        -lvtktiff-9.1d\
        -lvtkverdict-9.1d\
        -lvtkViewsContext2D-9.1d\
        -lvtkViewsCore-9.1d\
        -lvtkViewsQt-9.1d\
        -lvtkViewsInfovis-9.1d\
        -lvtkWrappingTools-9.1d\
        -lvtkzlib-9.1d

} else {
LIBS += -LD:/PCL1.12.1/lib\
        -lpcl_common\
        -lpcl_features\
        -lpcl_filters\
        -lpcl_io\
        -lpcl_kdtree\
        -lpcl_registration\
        -lpcl_segmentation\
        -lpcl_surface\
        -lpcl_iod\
        -lpcl_io_ply\
        -lpcl_keypoints\
        -lpcl_ml\
        -lpcl_octree\
        -lpcl_outofcore\
        -lpcl_people\
        -lpcl_recognition\
        -lpcl_sample_consensus\
        -lpcl_search\
        -lpcl_stereo\
        -lpcl_tracking\
        -lpcl_visualization


LIBS += -LD:/PCL1.12.1/3rdParty/Boost/lib\
        -llibboost_filesystem-vc142-mt-x64-1_78\
        -llibboost_system-vc142-mt-x64-1_78\
        -llibboost_thread-vc142-mt-x64-1_78

        #-llibboost_wave-vc142-mt-x64-1_78\
        #-llibboost_wserialization-vc142-mt-x64-1_78\
        #-llibboost_zlib-vc142-mt-x64-1_78\
        #-llibboost_atomic-vc142-mt-x64-1_78\
        #-llibboost_bzip2-vc142-mt-x64-1_78\
        #-llibboost_chrono-vc142-mt-x64-1_78\
        #-llibboost_container-vc142-mt-x64-1_78\
        #-llibboost_context-vc142-mt-x64-1_78\
        #-llibboost_contract-vc142-mt-x64-1_78\
        #-llibboost_coroutine-vc142-mt-x64-1_78\
        #-llibboost_date_time-vc142-mt-x64-1_78\
        #-llibboost_exception-vc142-mt-x64-1_78\
        #-llibboost_graph_parallel-vc142-mt-x64-1_78\
        #-llibboost_graph-vc142-mt-x64-1_78\
        #-llibboost_iostreams-vc142-mt-x64-1_78\
        #-llibboost_json-vc142-mt-x64-1_78\
        #-llibboost_locale-vc142-mt-x64-1_78\
        #-llibboost_log_setup-vc142-mt-x64-1_78\
        #-llibboost_log-vc142-mt-x64-1_78\
        #-llibboost_math_c99f-vc142-mt-x64-1_78\
        #-llibboost_math_c99l-vc142-mt-x64-1_78\
        #-llibboost_math_c99-vc142-mt-x64-1_78\
        #-llibboost_math_tr1f-vc142-mt-x64-1_78\
        #-llibboost_math_tr1l-vc142-mt-x64-1_78\
        #-llibboost_math_tr1-vc142-mt-x64-1_78\
        #-llibboost_mpi-vc142-mt-x64-1_78\
        #-llibboost_nowide-vc142-mt-x64-1_78\
        #-llibboost_numpy38-vc142-mt-x64-1_78\
        #-llibboost_prg_exec_monitor-vc142-mt-x64-1_78\
        #-llibboost_program_options-vc142-mt-x64-1_78\
        #-llibboost_python38-vc142-mt-x64-1_78\
        #-llibboost_random-vc142-mt-x64-1_78\
        #-llibboost_regex-vc142-mt-x64-1_78\
        #-llibboost_serialization-vc142-mt-x64-1_78\
        #-llibboost_test_exec_monitor-vc142-mt-x64-1_78\
        #-llibboost_timer-vc142-mt-x64-1_78\
        #-llibboost_type_erasure-vc142-mt-x64-1_78\
        #-llibboost_unit_test_framework-vc142-mt-x64-1_78

LIBS += -LD:/PCL1.12.1/3rdParty/FLANN/lib\
        -lflann\
        -lflann_cpp_s\
        -lflann_cpp\
        -lflann_s

LIBS += -LD:/PCL1.12.1/3rdParty/OpenNI2\Lib
        -lOpenNI2

LIBS += -LD:/PCL1.12.1/3rdParty/Qhull/lib\
        -lqhullcpp\
        -lqhullstatic\
        -lqhullstatic_r\
        -lqhull_r

LIBS += -LD:/PCL1.12.1/3rdParty/VTK/release/lib\
        -lvtkcgns-9.1\
        -lvtkChartsCore-9.1\
        -lvtkCommonColor-9.1\
        -lvtkCommonComputationalGeometry-9.1\
        -lvtkCommonCore-9.1\
        -lvtkCommonDataModel-9.1\
        -lvtkCommonExecutionModel-9.1\
        -lvtkCommonMath-9.1\
        -lvtkCommonMisc-9.1\
        -lvtkCommonSystem-9.1\
        -lvtkCommonTransforms-9.1\
        -lvtkDICOMParser-9.1\
        -lvtkDomainsChemistry-9.1\
        -lvtkDomainsChemistryOpenGL2-9.1\
        -lvtkdoubleconversion-9.1\
        -lvtkexodusII-9.1\
        -lvtkexpat-9.1\
        -lvtkFiltersAMR-9.1\
        -lvtkFiltersCore-9.1\
        -lvtkFiltersExtraction-9.1\
        -lvtkFiltersFlowPaths-9.1\
        -lvtkFiltersGeneral-9.1\
        -lvtkFiltersGeneric-9.1\
        -lvtkFiltersGeometry-9.1\
        -lvtkFiltersHybrid-9.1\
        -lvtkFiltersHyperTree-9.1\
        -lvtkFiltersImaging-9.1\
        -lvtkFiltersModeling-9.1\
        -lvtkFiltersParallel-9.1\
        -lvtkFiltersParallelImaging-9.1\
        -lvtkFiltersPoints-9.1\
        -lvtkFiltersProgrammable-9.1\
        -lvtkFiltersSelection-9.1\
        -lvtkFiltersSMP-9.1\
        -lvtkFiltersSources-9.1\
        -lvtkFiltersStatistics-9.1\
        -lvtkFiltersTexture-9.1\
        -lvtkFiltersTopology-9.1\
        -lvtkFiltersVerdict-9.1\
        -lvtkfmt-9.1\
        -lvtkfreetype-9.1\
        -lvtkGeovisCore-9.1\
        -lvtkgl2ps-9.1\
        -lvtkglew-9.1\
        -lvtkGUISupportQt-9.1\
        -lvtkGUISupportQtQuick-9.1\
        -lvtkGUISupportQtSQL-9.1\
        -lvtkhdf5_hl-9.1\
        -lvtkhdf5-9.1\
        -lvtkImagingColor-9.1\
        -lvtkImagingCore-9.1\
        -lvtkImagingFourier-9.1\
        -lvtkImagingGeneral-9.1\
        -lvtkImagingHybrid-9.1\
        -lvtkImagingMath-9.1\
        -lvtkImagingMorphological-9.1\
        -lvtkImagingSources-9.1\
        -lvtkImagingStatistics-9.1\
        -lvtkImagingStencil-9.1\
        -lvtkInfovisCore-9.1\
        -lvtkInfovisLayout-9.1\
        -lvtkInteractionImage-9.1\
        -lvtkInteractionStyle-9.1\
        -lvtkInteractionWidgets-9.1\
        -lvtkIOAMR-9.1\
        -lvtkIOAsynchronous-9.1\
        -lvtkIOCGNSReader-9.1\
        -lvtkIOChemistry-9.1\
        -lvtkIOCityGML-9.1\
        -lvtkIOCONVERGECFD-9.1\
        -lvtkIOCore-9.1\
        -lvtkIOEnSight-9.1\
        -lvtkIOExodus-9.1\
        -lvtkIOExport-9.1\
        -lvtkIOExportGL2PS-9.1\
        -lvtkIOExportPDF-9.1\
        -lvtkIOGeometry-9.1\
        -lvtkIOHDF-9.1\
        -lvtkIOImage-9.1\
        -lvtkIOImport-9.1\
        -lvtkIOInfovis-9.1\
        -lvtkIOIOSS-9.1\
        -lvtkIOLegacy-9.1\
        -lvtkIOLSDyna-9.1\
        -lvtkIOMINC-9.1\
        -lvtkIOMotionFX-9.1\
        -lvtkIOMovie-9.1\
        -lvtkIONetCDF-9.1\
        -lvtkIOOggTheora-9.1\
        -lvtkIOParallel-9.1\
        -lvtkIOParallelXML-9.1\
        -lvtkIOPLY-9.1\
        -lvtkIOSegY-9.1\
        -lvtkIOSQL-9.1\
        -lvtkioss-9.1\
        -lvtkIOTecplotTable-9.1\
        -lvtkIOVeraOut-9.1\
        -lvtkIOVideo-9.1\
        -lvtkIOXML-9.1\
        -lvtkIOXMLParser-9.1\
        -lvtkjpeg-9.1\
        -lvtkjsoncpp-9.1\
        -lvtkkissfft-9.1\
        -lvtklibharu-9.1\
        -lvtklibproj-9.1\
        -lvtklibxml2-9.1\
        -lvtkloguru-9.1\
        -lvtklz4-9.1\
        -lvtklzma-9.1\
        -lvtkmetaio-9.1\
        -lvtknetcdf-9.1\
        -lvtkogg-9.1\
        -lvtkParallelCore-9.1\
        -lvtkParallelDIY-9.1\
        -lvtkpng-9.1\
        -lvtkpugixml-9.1\
        -lvtkRenderingAnnotation-9.1\
        -lvtkRenderingContext2D-9.1\
        -lvtkRenderingContextOpenGL2-9.1\
        -lvtkRenderingCore-9.1\
        -lvtkRenderingFreeType-9.1\
        -lvtkRenderingGL2PSOpenGL2-9.1\
        -lvtkRenderingQt-9.1\
        -lvtkRenderingImage-9.1\
        -lvtkRenderingLabel-9.1\
        -lvtkRenderingLOD-9.1\
        -lvtkRenderingOpenGL2-9.1\
        -lvtkRenderingSceneGraph-9.1\
        -lvtkRenderingUI-9.1\
        -lvtkRenderingVolume-9.1\
        -lvtkRenderingVolumeOpenGL2-9.1\
        -lvtkRenderingVtkJS-9.1\
        -lvtksqlite-9.1\
        -lvtksys-9.1\
        -lvtkTestingRendering-9.1\
        -lvtktheora-9.1\
        -lvtktiff-9.1\
        -lvtkverdict-9.1\
        -lvtkViewsContext2D-9.1\
        -lvtkViewsCore-9.1\
        -lvtkViewsInfovis-9.1\
        -lvtkViewsQt-9.1\
        -lvtkWrappingTools-9.1\
        -lvtkzlib-9.1
}

vtkCloudStyle.h

#ifndef VTKCLOUDSTYLE_H
#define VTKCLOUDSTYLE_H

#include <QObject>
#include <QVector3D>
#include <QDebug>
#include <QTimer>
#include <vtkRenderer.h>                        //渲染器类,管理场景的渲染过程
#include <vtkInteractorStyleTrackballCamera.h>  //交互样式类,定义了用户如何通过鼠标操作来控制3D场景的相机

class vtkCloudStyle : public QObject, public vtkInteractorStyleTrackballCamera
{
    Q_OBJECT

public:
    static vtkCloudStyle* New();  // 新的工厂方法,用于创建实例
    vtkTypeMacro(vtkCloudStyle, vtkInteractorStyleTrackballCamera);  // 类型宏,用于为 CustomInteractorStyle 类提供类型识别功能,允许 VTK 内部进行类型检查和类型转换

    vtkCloudStyle();
    ~vtkCloudStyle() override;

    void InitializeRenderer(vtkRenderer *renderer);
    virtual void OnLeftButtonDown() override;

signals:
    void signal_cloudPointPicked(double x, double y, double z);

};

#endif // VTKCLOUDSTYLE_H

vtkcloudstyle.cpp

#include "vtkcloudstyle.h"
#include <QDebug>
#include "vtkheader.h"

vtkStandardNewMacro(vtkCloudStyle);   //创建实例

vtkCloudStyle::vtkCloudStyle()
{

}

vtkCloudStyle::~vtkCloudStyle()
{

}

void vtkCloudStyle::InitializeRenderer(vtkRenderer* renderer)
{
    this->CurrentRenderer = renderer;
}

void vtkCloudStyle::OnLeftButtonDown()  //方法三
{
    if (this->Interactor->GetControlKey())
    {
        // 检查当前渲染器
        if (!this->CurrentRenderer)
        {
            qDebug() << "当前渲染器未初始化!";
            return;
        }
        vtkNew<vtkPointPicker> pointPicker; // 使用专门的点拾取器
        pointPicker->SetTolerance(0.005);
        pointPicker->Pick(this->Interactor->GetEventPosition()[0], this->Interactor->GetEventPosition()[1], 0, this->CurrentRenderer);

        if (pointPicker->GetPointId() != -1)   // 确保拾取到点
        {
            double* pos = pointPicker->GetPickPosition();
            emit signal_cloudPointPicked(pos[0], pos[1], pos[2]);
        }
    }

    vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
    this->Interactor->Render();
}

vtkheader.h

#ifndef VTKHEADER_H
#define VTKHEADER_H

#include <vtkActor.h> //演员类,在场景中表示一个对象
#include <vtkAutoInit.h>
#include <vtkAssembly.h>
#include <vtkArcSource.h>
#include <vtkAxesActor.h>
#include <vtkArrowSource.h>
#include <vtkAppendPolyData.h>
#include <vtkActor2DCollection.h>
#include <vtkAOSDataArrayTemplate.h>
#include <vtkBillboardTextActor3D.h> //3D文本演员
#include <vtkCallbackCommand.h>
#include <vtkCommand.h> //包括TimerEvent事件类型
#include <vtkCutter.h>
#include <vtkCamera.h>
#include <vtkCellLocator.h>
#include <vtkCoordinate.h> //坐标转换
#include <vtkCellArray.h>
#include <vtkCardinalSpline.h>
#include <vtkCellPicker.h> //查找某个点在几何模型中的位置信息
#include <vtkCylinderSource.h> //圆柱体源类,生成圆柱体几何形状
#include <vtkCaptionActor2D.h>
#include <vtkCameraOrientationWidget.h>
#include <vtkFollower.h>
#include <vtkFeatureEdges.h>  //提取几何模型的边缘特征
#include <vtkFreeTypeStringToImage.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkInteractorStyleTrackballCamera.h> //交互样式类,定义了用户如何通过鼠标操作来控制3D场景的相机
#include <vtkKdTreePointLocator.h>
#include <vtkLineSource.h> //专门用于创建线段的数据源
#include <vtkMatrix4x4.h>
#include <vtkMath.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkOBJReader.h>
#include <vtkOutputWindow.h>
#include <QVTKOpenGLWidget.h>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkOpenGLPolyDataMapper.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkPointPicker.h>  //点拾取
#include <vtkPointSource.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkProperty.h>
#include <vtkPointData.h>
#include <vtkParametricSpline.h>
#include <vtkParametricFunction.h>
#include <vtkParametricFunctionSource.h>
#include <vtkPolyDataMapper.h> //多边形数据映射器类,将几何数据映射到图形管线
#include <vtkPlaneSource.h>
#include <vtkPlane.h>
#include <vtkPointGaussianMapper.h>
#include <vtkRendererCollection.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h> //渲染器类,管理场景的渲染过程
#include <vtkSmartPointer.h> //智能指针类,自动管理VTK对象的内存
#include <vtkSphereSource.h>
#include <vtkTextSource.h>
#include <vtkTriangle.h>
#include <vtkTextProperty.h>
#include <vtkTubeFilter.h>
#include <vtkTimerLog.h>
#include <vtkTextActor.h>
#include <vtkTextProperty.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>
#include <vtkTransformFilter.h>
#include <vtkUnicodeString.h>
#include <vtkVoxelGrid.h>
#include <vtkVectorText.h>
#include <vtkWorldPointPicker.h>

#endif // VTKHEADER_H

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐