20 #include "visualizationThread.h" 28 VisualizationThread::VisualizationThread(DataToShow &_data) : data(_data)
37 void VisualizationThread::setPosition(
int x,
int y)
44 void VisualizationThread::setSize(
int sizex,
int sizey)
51 void VisualizationThread::run()
53 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(
new pcl::visualization::PCLVisualizer(
"3D Viewer"));
55 viewer->initCameraParameters();
56 viewer->setBackgroundColor (0, 0, 0);
58 viewer->setPosition(x,y);
59 if (sizex!=0 && sizey!=0)
60 viewer->setSize(sizex,sizey);
62 for (
unsigned int i=0; i<data.goodPointsIndexes->size(); i++)
67 pcl::PointXYZ point(data.cloud->points.at((*data.goodPointsIndexes)[i]).x,
68 data.cloud->points.at((*data.goodPointsIndexes)[i]).y,
69 data.cloud->points.at((*data.goodPointsIndexes)[i]).z);
70 viewer->addSphere (point, 0.002, 1, 1, 0,
"pointScored"+s);
73 pcl::PointXYZ origin(data.chosenPoint[0],data.chosenPoint[1],data.chosenPoint[2]);
74 pcl::PointXYZ normalOrigin;
75 pcl::PointXYZ normalOriginScaled;
76 if (data.hand==
"left")
78 normalOrigin.x=origin.x+data.chosenOrientation(0,2);
79 normalOrigin.y=origin.y+data.chosenOrientation(1,2);
80 normalOrigin.z=origin.z+data.chosenOrientation(2,2);
81 normalOriginScaled.x=origin.x+(data.chosenOrientation(0,2)/scale);
82 normalOriginScaled.y=origin.y+(data.chosenOrientation(1,2)/scale);
83 normalOriginScaled.z=origin.z+(data.chosenOrientation(2,2)/scale);
87 normalOrigin.x=origin.x-data.chosenOrientation(0,2);
88 normalOrigin.y=origin.y-data.chosenOrientation(1,2);
89 normalOrigin.z=origin.z-data.chosenOrientation(2,2);
90 normalOriginScaled.x=origin.x-(data.chosenOrientation(0,2)/scale);
91 normalOriginScaled.y=origin.y-(data.chosenOrientation(1,2)/scale);
92 normalOriginScaled.z=origin.z-(data.chosenOrientation(2,2)/scale);
95 viewer->addSphere (origin, 0.002, 1, 0, 0,
"pointChosen");
96 viewer->addArrow<pcl::PointXYZ,pcl::PointXYZ>(origin,normalOriginScaled,0,0,1,0,
"pz");
98 pcl::PointXYZ xaxis(normalOrigin.x+data.chosenOrientation(0,0),
99 normalOrigin.y+data.chosenOrientation(1,0),
100 normalOrigin.z+data.chosenOrientation(2,0));
102 pcl::PointXYZ xaxisScaled(normalOriginScaled.x+(data.chosenOrientation(0,0)/scale),
103 normalOriginScaled.y+(data.chosenOrientation(1,0)/scale),
104 normalOriginScaled.z+(data.chosenOrientation(2,0)/scale));
106 viewer->addArrow<pcl::PointXYZ,pcl::PointXYZ>(xaxisScaled,normalOriginScaled,1,0,0,0,
"px");
108 pcl::PointXYZ yaxis(normalOrigin.x+data.chosenOrientation(0,1),
109 normalOrigin.y+data.chosenOrientation(1,1),
110 normalOrigin.z+data.chosenOrientation(2,1));
112 pcl::PointXYZ yaxisScaled(normalOriginScaled.x+(data.chosenOrientation(0,1)/scale),
113 normalOriginScaled.y+(data.chosenOrientation(1,1)/scale),
114 normalOriginScaled.z+(data.chosenOrientation(2,1)/scale));
116 viewer->addArrow<pcl::PointXYZ,pcl::PointXYZ>(yaxisScaled,normalOriginScaled,0,1,0,0,
"py");
118 BoundingBox bb(data.boundingBox->getBoundingBox());
121 viewer->addPointCloudNormals<pcl::PointXYZRGB,pcl::Normal>(data.cloud,data.normals,10,0.01,
"normals");
123 pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(data.cloud);
124 viewer->addPointCloud<pcl::PointXYZRGB> (data.cloud, rgb,
"rgb");
125 viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3,
"rgb");
127 viewer->resetCamera();
128 viewer->setCameraPosition(-0.0611749,-0.040113,0.00667606,-0.105521,0.0891437,0.990413);
130 while (isRunning() && !viewer->wasStopped())
132 viewer->spinOnce(100);
133 boost::this_thread::sleep(boost::posix_time::microseconds (100000));
The Definition of the BoundingBox class.
void drawBoundingBox(boost::shared_ptr< pcl::visualization::PCLVisualizer > viewer, int viewport=0)
Draw a 3D box in a PCLVisualizer window.