在类中先声明vtk的显示对象
vtkRenderer out_render;
vtkVertexGlyphFilter glyphFilter;
vtkPolyDataMapper mapper; // 新建制图器
vtkActor actor; // 新建角色
然后在init中先初始化一下:
out_render = vtkRenderer.New();
glyphFilter = vtkVertexGlyphFilter.New();
mapper = vtkPolyDataMapper.New(); // 新建制图器
actor = vtkActor.New(); // 新建角色
然后在显示方法中,可以通过一个变量AutoSize来控制显示方式,当为true时,每次加载数据都新建,相当于初始化,这样每次都会刷新界面显示,包含显示比例等,当为false时,不会再次新建,因此显示的比例保持不变,只是显示内容会刷新。
//将点云对象可视化
vtkRenderer showPointCloud(PointCloudXYZ in_pc)
{
if(AutoSize)
{
out_render = vtkRenderer.New();
glyphFilter = vtkVertexGlyphFilter.New();
mapper = vtkPolyDataMapper.New(); // 新建制图器
actor = vtkActor.New(); // 新建角色
}
if (cloud != null && cloud.Width > 0)
{
points.Reset();
points.Initialize();
//把点云指针中的点依次放进points
for (int i = 0; i < cloud.Size; i++)
{
points.InsertNextPoint(cloud.GetX(i), cloud.GetY(i), cloud.GetZ(i));
}
colors_rgb = setColorBaseAxis('z', cloud); //创建每个点的属性数据,这里代表颜色 vtkUnsignedCharArray
polydata.SetPoints(points); //将points数据传进polydata
polydata.GetPointData().SetScalars(colors_rgb); //将点数据的颜色属性传进polydata
glyphFilter.SetInputConnection(polydata.GetProducerPort());
//设置颜色模式,这个是默认模式,不加也行
//即把unsigned char类型的标量属性数据当作颜色值,不执行隐式。对于其他类型的标量数据,将通过查询表映射
mapper.SetColorModeToDefault();
mapper.SetScalarVisibility(1);
mapper.SetInputConnection(glyphFilter.GetOutputPort());// 连接管道
actor.SetMapper(mapper); // 传递制图器
out_render.AddActor(actor);
//添加颜色刻度表
//out_render.AddActor(scalarBar);
// 设置Viewport窗口
out_render.SetViewport(0.0, 0.0, 1.0, 1.0);
// 打开渐变色背景开关
out_render.GradientBackgroundOn();
out_render.SetBackground(0.2, 0.3, 0.3);
out_render.SetBackground2(0.8, 0.8, 0.8);
}
return out_render;
}