參考url:https://lorensen.github.io/VTKExamples/site/Cxx/GeometricObjects/Cell3DDemonstration
效果圖:
實現:
vtkSmartPointer<vtkUnstructuredGrid> MakeTetrahedron(){
// Make a tetrahedron.
int numberOfVertices = 4;
vtkSmartPointer<vtkCellArray> cellArray =
vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer< vtkPoints > points =
vtkSmartPointer< vtkPoints > :: New();
points->InsertNextPoint(0, 0, 0);
points->InsertNextPoint(1, 0, 0);
points->InsertNextPoint(0, 1, 0);
points->InsertNextPoint(0, 0, 1);
points->InsertNextPoint(3, 0, 0);
points->InsertNextPoint(4, 0, 0);
points->InsertNextPoint(3, 1, 0);
points->InsertNextPoint(3, 0, 1);
{
vtkSmartPointer<vtkTetra> tetra =
vtkSmartPointer<vtkTetra>::New();
for (int i = 0; i < numberOfVertices; ++i)
{
tetra->GetPointIds()->SetId(i, i);
}
cellArray->InsertNextCell(tetra);
}
{
vtkSmartPointer<vtkTetra> tetra =
vtkSmartPointer<vtkTetra>::New();
for (int i = 0; i < numberOfVertices; ++i)
{
tetra->GetPointIds()->SetId(i, i+4);
}
cellArray->InsertNextCell(tetra);
}
vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid =
vtkSmartPointer<vtkUnstructuredGrid>::New();
unstructuredGrid->SetPoints(points);
unstructuredGrid->SetCells(VTK_TETRA, cellArray);
//unstructuredGrid->InsertNextCell(VTK_TETRA, 4, )
return unstructuredGrid;
}
int main(int argc, char *argv[])
{
vtkSmartPointer<vtkUnstructuredGrid> test = MakeTetrahedron();
vtkSmartPointer<vtkPlane> plane =
vtkSmartPointer<vtkPlane>::New();
plane->SetOrigin(0,0,0.5);
plane->SetNormal(0.0, 0.0, -1.0);
vtkSmartPointer<vtkClipDataSet> clipper =
vtkSmartPointer<vtkClipDataSet>::New();
clipper->SetInputData(test);
clipper->SetClipFunction(plane);
//clipper->SetValue(0);
clipper->Update();
vtkSmartPointer<vtkDataSetMapper> mapper =
vtkSmartPointer<vtkDataSetMapper>::New();
mapper->SetInputData(clipper->GetOutput());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =
vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
renderWindowInteractor->SetInteractorStyle(style);
renderWindowInteractor->Start();
return 0;
}