As of today, VTK does not have a specialized class to store point clouds. One way to store a point cloud is to create a
vtkPolyData using only
vtkVertex cells. It works sometimes: some filters taking a
vtkPolyData as input can work with point cloud. However it is not always the case.
This issue needs to be able to differentiate poly data and point clouds to do volume rendering. This could potentially be handled by scanning the whole input data set, and looking if any rank has something else than a
vtkVertex cell, in which case regular rendering can be performed, and otherwise a point cloud specific volume rendering can be performed. I think that this would be very sloppy as, for instance, a user could still add a
vtkTetra cell in the point cloud, and totally change the display. The prior step scanning the whole input to check if the data set is a point cloud or something else is also tedious.
This is why I think we would greatly benefit from having a specialized point cloud class, which we could call
vtkPointCloud, being a concrete subclass of
vtkPointSet. Besides the fact that this would help fixing the issue I mentioned, it would be a good starting point to having a clean point cloud algorithm library, as point clouds often need specific algorithms because of their lack of structure. Point clouds also tend to be a lot denser than meshes, which would be a good occasion to think about bringing in more efficient point locators in VTK.
Since points and cells are the same concept in point clouds, we can debate on whether we set that there is no cell data and only point data, or if we can find a way for both cell and point data to return the same pointer.
Please share your opinion if you have concerns, thoughts, suggestions about this.