colors= vtk.vtkNamedColors()
polyData = vtk.vtkPolyData()
sphereSource = vtk.vtkSphereSource()
sphereSource.SetThetaResolution(20);
sphereSource.SetPhiResolution(11);
sphereSource.Update();
polyData = sphereSource.GetOutput();
cutValue = 0.1;
center = polyData.GetCenter();
plane1 = vtk.vtkPlane()
plane1.SetOrigin(center[0]- cutValue, center[1], center[2]);
plane1.SetNormal(1.0, 0.0, 0.0);
plane2 = vtk.vtkPlane()
plane2.SetOrigin(center[0] + cutValue, center[1], center[2]);
plane2.SetNormal(-1.0, 0.0, 0.0);
plane3 = vtk.vtkPlane()
plane3.SetOrigin(center[0], center[1]- cutValue, center[2]);
plane3.SetNormal(0.0, 1.0, 0.0);
plane4 = vtk.vtkPlane()
plane4.SetOrigin(center[0], center[1] + cutValue, center[2]);
plane4.SetNormal(0.0, -1.0, 0.0);
planes = vtk.vtkPlaneCollection()
planes.AddItem(plane1);
planes.AddItem(plane2);
planes.AddItem(plane3);
# planes.AddItem(plane4);
clipper = vtk.vtkClipClosedSurface()
clipper.SetInputData(polyData);
clipper.SetClippingPlanes(planes);
clipMapper = vtk.vtkDataSetMapper()
clipMapper.SetInputConnection(clipper.GetOutputPort());
clipActor = vtk.vtkActor() ;
clipActor.SetMapper(clipMapper);
clipActor.GetProperty().SetColor(1.0000, 0.3882, 0.2784);
clipActor.GetProperty().SetInterpolationToFlat();
ren1 = vtk.vtkRenderer();
ren1.SetBackground(colors.GetColor3d("SteelBlue"));
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1);
renWin.SetSize(512, 512);
renWin.SetWindowName("ClipClosedSurface");
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin);
ren1.AddActor(clipActor);
ren1.ResetCamera();
ren1.GetActiveCamera().Azimuth(120);
ren1.GetActiveCamera().Elevation(30);
ren1.GetActiveCamera().Dolly(1.0);
ren1.ResetCameraClippingRange();
renWin.Render();
iren.Initialize();
iren.Start();
改用vtkClipPolyData,设置切割平面后:
clipper = vtk.vtkClipPolyData()
clipper.SetInputData(polyData);
clipper.SetClipFunction(plane1);