-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpointcloudviewer.cpp
79 lines (70 loc) · 2.56 KB
/
pointcloudviewer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "pointcloudviewer.h"
#include "vtkPolyLine.h"
#include "vtkSmartPointer.h"
#include <vtkRenderWindow.h> // invalid static_cast error
#include <vtkJPEGWriter.h>
#include <vtkWindowToImageFilter.h>
#include <QCoreApplication>
using namespace pcl;
PointCloudViewer::PointCloudViewer(QWidget *parent) : QVTKWidget(parent),firstCloudSet(false),firstShapeSet(false),firstBoxesSet(false),firstLineSet(false)
{
vtkSmartPointer<vtkRenderWindow> renderWindow = visualizer.getRenderWindow();
SetRenderWindow(renderWindow);
visualizer.setCameraPosition(-1,-1,-1,0,90,0);
}
void PointCloudViewer::showCloud(pcl::PointCloud<pcl::PointXYZRGBA>::ConstPtr Cloud)
{
if(!firstCloudSet)
{
firstCloudSet = true;
visualizer.addPointCloud(Cloud);
}
else
visualizer.updatePointCloud(Cloud);
update();
// static int i=0;
// windowToJPG(visualizer.getRenderWindow(),QString("/home/nao/Desktop/" + QString::number(i++) + ".jpeg").toStdString().data());
visualizer.spinOnce(100);
}
void PointCloudViewer::windowToJPG(vtkRenderWindow *rw, const char *filename)
{
vtkWindowToImageFilter *filter = vtkWindowToImageFilter::New();
filter->SetInput(rw);
vtkJPEGWriter *jw = vtkJPEGWriter::New();
jw->SetInput(filter->GetOutput());
jw->SetFileName(filename);
jw->Write();
jw->Delete();
filter->Delete();
}
void PointCloudViewer::showPlane(pcl::ModelCoefficients::Ptr plane)
{
firstShapeSet = true;
visualizer.addPlane(*plane);
update();
}
void PointCloudViewer::ShowBoxes(const std::vector<std::pair<pcl::PointXYZ,pcl::PointXYZ> >& boxes)
{
for(int i=0;i<boxes.size();i++)
visualizer.addCube(boxes[i].first.x,boxes[i].second.x,boxes[i].first.y,boxes[i].second.y,boxes[i].first.z,boxes[i].second.z,1,0,0,QString::number(i).toStdString());
firstBoxesSet = true;
update();
}
void PointCloudViewer::clearScreen()
{
if(firstShapeSet || firstBoxesSet || firstCloudSet)
visualizer.removeAllShapes();
}
void PointCloudViewer::ShowLines(const std::vector<Segment3D>& Lines)
{
for(int i=0;i<Lines.size();i++)
{
const char* s =(QString("Line")+QString::number(i)).toStdString().data();
visualizer.addLine(PointXYZ(Lines[i].source().x(),Lines[i].source().y(),Lines[i].source().z()),
PointXYZ(Lines[i].target().x(),Lines[i].target().y(),Lines[i].target().z()),
1,0,0,s);
visualizer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 10, s);
}
firstLineSet = true;
update();
}