void tet_mitk_render(
QmitkRenderWindow *renderWindow, Eigen::MatrixXd const& V,
Eigen::MatrixXi const& F, Eigen::MatrixXi const& FTBM)
{
vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
//获取面片的点
vtkSmartPointer<vtkPolyData> cube = vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
for (int i = 0; i < V.rows(); i++)
{
double p[3] = { V(i, 0), V(i, 1), V(i, 2) };
points->InsertNextPoint(p);
}
for (int i = 0; i < F.rows(); i++) {
polys->InsertNextCell(3);
polys->InsertCellPoint(F(i, 0));
polys->InsertCellPoint(F(i, 1));
polys->InsertCellPoint(F(i, 2));
}
cube->SetPoints(points);
cube->SetPolys(polys);
cubeMapper->SetInputData(cube);
vtkSmartPointer<vtkPolyData> cub = cubeMapper->GetInput();
vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
int nb_cells = cub->GetNumberOfCells();
printf("nb_cells = %d\n", nb_cells);
for (int i = 0; i < nb_cells; i++) {
if (FTBM.rows() == nb_cells)
{
if (FTBM(i, 0) == CAGE_BOUNDARY_MARKER) {
scalars->InsertTuple1(i, 0);
}
else if (FTBM(i, 0) == LIVER_BOUNDARY_MARKER) {
scalars->InsertTuple1(i, 1);
}
else if (FTBM(i, 0) == PORTALVEIN_BOUNDARY_MARKER) {
scalars->InsertTuple1(i, 2);
}
else if (FTBM(i, 0) == TUMOR_BOUNDARY_MARKER) {
scalars->InsertTuple1(i, 3);
}
else {
scalars->InsertTuple1(i, 4);
}
}
else {
scalars->InsertTuple1(i, 4);
}
}
cub->GetCellData()->SetScalars(scalars);
cubeMapper->SetInputData(cub);
vtkSmartPointer<vtkLookupTable> pColorTable = vtkSmartPointer<vtkLookupTable>::New();
pColorTable->SetNumberOfColors(6);
pColorTable->SetTableValue(0, 1.0, 0.0, 0.0, 0.3);
pColorTable->SetTableValue(1, 0.0, 1.0, 0.0, 0.5);
pColorTable->SetTableValue(2, 0.0, 0.0, 1.0, 1.0);
pColorTable->SetTableValue(3, 1.0, 1.0, 1.0, 1.0);
pColorTable->SetTableValue(4, 0.0, 0.0, 1.0, 1.0);
pColorTable->SetTableValue(5, 1.0, 1.0, 0.0, 1.0);
pColorTable->Build();
cubeMapper->SetScalarRange(0, 6);
cubeMapper->SetScalarVisibility(1);
cubeMapper->SetLookupTable(pColorTable);
vtkSmartPointer<vtkActor> ref_organ_actor = vtkSmartPointer<vtkActor>::New();
ref_organ_actor->SetMapper(cubeMapper);
mitk::VtkPropRenderer *renderer = renderWindow->GetRenderer();
renderer->GetVtkRenderer()->AddActor(ref_organ_actor);
}
MITK表面网格,通过顶点和三角面片进行渲染
于 2022-08-12 11:08:05 首次发布