PCL点云之旅09 - 点云的点大小设置

143 阅读1分钟

实现效果

image.png

image.png

步骤拆分

  1. 首先添加槽函数
  2. 新建QT class 附带UI文件,文件类型选择弹窗类型
  3. 加入spinBox和sliderWidget
  4. 分别设置其最大值和最小值,两个组件数据双向绑定
  5. 将设置的点大小作为QString传入到点云模型当中去
  6. 更新所有点云模型点大小

代码实现

  • UI设计

image.png

  • 弹窗头文件
#ifndef PCL_POINTSIZE_CHANGE_H
#define PCL_POINTSIZE_CHANGE_H

#include <QDialog>

namespace Ui {
class pcl_pointsize_change;
}

class pcl_pointsize_change : public QDialog
{
    Q_OBJECT

public:
    explicit pcl_pointsize_change(QWidget *parent = nullptr);
    ~pcl_pointsize_change();

signals:
    void sendData(QString data);

private slots:
    void on_buttonBox_accepted();

private:
    Ui::pcl_pointsize_change *ui;
};

#endif // PCL_POINTSIZE_CHANGE_H
  • 具体类文件
#include "pcl_pointsize_change.h"
#include "ui_pcl_pointsize_change.h"

pcl_pointsize_change::pcl_pointsize_change(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::pcl_pointsize_change)
{
    ui->setupUi(this);
    ui->spinBox->setMinimum(0);
    ui->spinBox->setMaximum(10);
    ui->spinBox->setSingleStep(1);
    ui->spinBox->setValue(5);
    ui->horizontalSlider->setMaximum(10);
    ui->horizontalSlider->setMinimum(0);
    ui->horizontalSlider->setSingleStep(1);
    ui->horizontalSlider->setValue(5);
    connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));
    connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
}

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

void pcl_pointsize_change::on_buttonBox_accepted()
{
    QString value=QString("%1").arg(ui->horizontalSlider->value());
    emit sendData(value);
    this->close();
}
  • 槽函数链接
void MainWindow::pointcloud_size_change(){
    dialog_slider=new pcl_pointsize_change();
    connect(dialog_slider,SIGNAL(sendData(QString)),this,SLOT(Slider_setting(QString)));
    if(dialog_slider->exec()==QDialog::Accepted){}
    delete dialog_slider;
}

void MainWindow::Slider_setting(QString data){
    point_size=data.toInt();
    for(int i=0;i<cloud_name.size();i++){
        viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,point_size,cloud_name[i]);
    }
}