DbViewer: fixed voxel assert

This commit is contained in:
matlabbe
2017-07-23 22:33:26 -04:00
parent 62b9911176
commit 48148a9e26

View File

@@ -2560,6 +2560,7 @@ void DatabaseViewer::update(int value,
if(!data.imageRaw().empty()) if(!data.imageRaw().empty())
{ {
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud; pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;
pcl::IndicesPtr indices(new std::vector<int>);
if(!data.depthRaw().empty() && data.cameraModels().size()==1) if(!data.depthRaw().empty() && data.cameraModels().size()==1)
{ {
cv::Mat depth = data.depthRaw(); cv::Mat depth = data.depthRaw();
@@ -2570,8 +2571,9 @@ void DatabaseViewer::update(int value,
cloud = util3d::cloudFromDepthRGB( cloud = util3d::cloudFromDepthRGB(
data.imageRaw(), data.imageRaw(),
depth, depth,
data.cameraModels()[0]); data.cameraModels()[0],
if(cloud->size()) 1,0,0,indices.get());
if(indices->size())
{ {
cloud = util3d::transformPointCloud(cloud, data.cameraModels()[0].localTransform()); cloud = util3d::transformPointCloud(cloud, data.cameraModels()[0].localTransform());
} }
@@ -2579,13 +2581,13 @@ void DatabaseViewer::update(int value,
} }
else else
{ {
cloud = util3d::cloudRGBFromSensorData(data, 1, 0, 0, 0, ui_->parameters_toolbox->getParameters()); cloud = util3d::cloudRGBFromSensorData(data, 1, 0, 0, indices.get(), ui_->parameters_toolbox->getParameters());
} }
if(cloud->size()) if(indices->size())
{ {
if(ui_->doubleSpinBox_voxelSize->value() > 0.0) if(ui_->doubleSpinBox_voxelSize->value() > 0.0)
{ {
cloud = util3d::voxelize(cloud, ui_->doubleSpinBox_voxelSize->value()); cloud = util3d::voxelize(cloud, indices, ui_->doubleSpinBox_voxelSize->value());
} }
if(ui_->checkBox_showMesh->isChecked() && !cloud->is_dense) if(ui_->checkBox_showMesh->isChecked() && !cloud->is_dense)
@@ -2646,12 +2648,13 @@ void DatabaseViewer::update(int value,
else if(ui_->checkBox_showCloud->isChecked()) else if(ui_->checkBox_showCloud->isChecked())
{ {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
cloud = util3d::cloudFromSensorData(data, 1, 0, 0, 0, ui_->parameters_toolbox->getParameters()); pcl::IndicesPtr indices(new std::vector<int>);
if(cloud->size()) cloud = util3d::cloudFromSensorData(data, 1, 0, 0, indices.get(), ui_->parameters_toolbox->getParameters());
if(indices->size())
{ {
if(ui_->doubleSpinBox_voxelSize->value() > 0.0) if(ui_->doubleSpinBox_voxelSize->value() > 0.0)
{ {
cloud = util3d::voxelize(cloud, ui_->doubleSpinBox_voxelSize->value()); cloud = util3d::voxelize(cloud, indices, ui_->doubleSpinBox_voxelSize->value());
} }
cloudViewer_->addCloud("cloud", cloud, pose); cloudViewer_->addCloud("cloud", cloud, pose);
@@ -3521,7 +3524,7 @@ void DatabaseViewer::updateConstraintView(
{ {
if(ui_->doubleSpinBox_voxelSize->value() > 0.0) if(ui_->doubleSpinBox_voxelSize->value() > 0.0)
{ {
cloudFrom = util3d::voxelize(cloudFrom, ui_->doubleSpinBox_voxelSize->value()); cloudFrom = util3d::voxelize(cloudFrom, indicesFrom, ui_->doubleSpinBox_voxelSize->value());
} }
constraintsViewer_->addCloud("cloud0", cloudFrom, pose, Qt::red); constraintsViewer_->addCloud("cloud0", cloudFrom, pose, Qt::red);
} }
@@ -3529,7 +3532,7 @@ void DatabaseViewer::updateConstraintView(
{ {
if(ui_->doubleSpinBox_voxelSize->value() > 0.0) if(ui_->doubleSpinBox_voxelSize->value() > 0.0)
{ {
cloudTo = util3d::voxelize(cloudTo, ui_->doubleSpinBox_voxelSize->value()); cloudTo = util3d::voxelize(cloudTo, indicesTo, ui_->doubleSpinBox_voxelSize->value());
} }
constraintsViewer_->addCloud("cloud1", cloudTo, pose, Qt::cyan); constraintsViewer_->addCloud("cloud1", cloudTo, pose, Qt::cyan);
} }