使用给定的3D顶点绘制(2D)多边形并使用VTK进行变换

时间:2016-09-11 14:07:42

标签: drawing polygon vtk 3d-model

我有一些3D模型,我想单独显示模型的每个面。对于每个面,我有一个顶点列表(如pcl :: PointCloud),平移向量(如Eigen :: Vector3f)和旋转矩阵(如Eigen :: Quaternionf)。面可以具有不同的形状。它将是矩形,圆形(n-verts多边形)和梯形。

对于矩形面,我到目前为止使用了vtkCubeSource并且效果很好。对于圆脸,我可以使用vtkCylinderSource。对于梯形面,到目前为止我还没有找到解决方案。

最好的是类似vtkPolyLineSource的类,我只需要任何多边形的顶点列表。但据我所知,vtkPolyLineSource只是绘制线条并且不用颜色填充多边形。

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

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

1 个答案:

答案 0 :(得分:0)

使用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