绘制(2D)多边形与给定的3d顶点和转换与VTK



我有一些3d模型,我想分别显示模型的每个面。对于每个面,我有一个顶点列表(作为pcl::PointCloud),平移向量(作为Eigen::Vector3f)和旋转矩阵(作为Eigen::Quaternionf)。这些脸可以有不同的形状。它可以是矩形、圆形(n角多边形)和梯形。

对于矩形面,我使用了vtkCubeSource,到目前为止效果很好。对于圆脸,我可以使用vtk圆柱体源。对于梯形,到目前为止我还没有找到一个解决方案。 最好的是像vtkPolyLineSource这样的类,我只需要任何多边形的顶点列表。但据我所知,vtkPolyLineSource只会绘制线条,而不会用颜色填充多边形。

是否有一种方法来绘制多边形到三维空间与vtk?由于可以直接从文件中绘制3d模型,我认为应该有一种绘制模型(或只是一张脸)的方法,但到目前为止我找不到它。这是我第一次接触VTK,所以我想我只是忽略了正确的课程。

我不直接加载模型文件的一个原因是,我需要不同颜色和不透明度的面(在运行时定义)

使用vtkPolygon

vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
// ... fill in your points with n points
// Create the polygon
vtkSmartPointer<vtkPolygon> polygon = vtkSmartPointer<vtkPolygon>::New();
polygon->GetPointIds()->SetNumberOfIds(n); 
for (int j = 0; j < n; j++)
{
    polygon->GetPointIds()->SetId(j, j);
}
// Add the polygon to a list of polygons
vtkSmartPointer<vtkCellArray> polygons = vtkSmartPointer<vtkCellArray>::New();
polygons->InsertNextCell(polygon);
// Create a PolyData
vtkPolyData* polygonPolyData =  vtkPolyData::New();
polygonPolyData->SetPoints(points);
polygonPolyData->SetPolys(polygons);
// create mapper and actor using this polydata  - the usual stuff

最新更新