/* \brief Visual update. Create visualizations and add them to the viewer * */ void update() { //remove existing shapes from visualizer clearView(); //prevent the display of too many cubes bool displayCubeLegend = displayCubes && static_cast<int> (displayCloud->points.size ()) <= MAX_DISPLAYED_CUBES; showLegend(displayCubeLegend); if (displayCubeLegend) { //show octree as cubes showCubes(sqrt(octree.getVoxelSquaredSideLen(displayedDepth))); if (showPointsWithCubes) { //add original cloud in visualizer pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> color_handler(cloud, "z"); viz.addPointCloud(cloud, color_handler, "cloud"); } } else { //add current cloud in visualizer pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> color_handler(displayCloud,"z"); viz.addPointCloud(displayCloud, color_handler, "cloud"); } }
/* \brief Helper function that draw info for the user on the viewer * */ void showLegend(bool showCubes) { char dataDisplay[256]; sprintf(dataDisplay, "Displaying data as %s", (showCubes) ? ("CUBES") : ("POINTS")); viz.removeShape("disp_t"); viz.addText(dataDisplay, 0, 60, 1.0, 0.0, 0.0, "disp_t"); char level[256]; sprintf(level, "Displayed depth is %d on %d", displayedDepth, octree.getTreeDepth()); viz.removeShape("level_t1"); viz.addText(level, 0, 45, 1.0, 0.0, 0.0, "level_t1"); viz.removeShape("level_t2"); sprintf(level, "Voxel size: %.4fm [%lu voxels]", sqrt(octree.getVoxelSquaredSideLen(displayedDepth)), displayCloud->points.size()); viz.addText(level, 0, 30, 1.0, 0.0, 0.0, "level_t2"); viz.removeShape("org_t"); if (showPointsWithCubes) viz.addText("Displaying original cloud", 0, 15, 1.0, 0.0, 0.0, "org_t"); }