Qt使用VTK加载点云数据
·
点云数据格式
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
更多推荐
所有评论(0)