# DataSetSurface

VTKExamples/Python/GeometricObjects/DataSetSurface

### Code

DataSetSurface.py

    import vtk

    # Setup the coordinates of eight points
    # (the two faces must be in counter clockwise order as viewd from the outside)
    P0 = [0.0, 0.0, 0.0]
    P1 = [1.0, 0.0, 0.0]
    P2 = [1.0, 1.0, 0.0]
    P3 = [0.0, 1.0, 0.0]
    P4 = [0.0, 0.0, 1.0]
    P5 = [1.0, 0.0, 1.0]
    P6 = [1.0, 1.0, 1.0]
    P7 = [0.0, 1.0, 1.0]

    # Create the points
    points = vtk.vtkPoints()
    points.InsertNextPoint(P0)
    points.InsertNextPoint(P1)
    points.InsertNextPoint(P2)
    points.InsertNextPoint(P3)
    points.InsertNextPoint(P4)
    points.InsertNextPoint(P5)
    points.InsertNextPoint(P6)
    points.InsertNextPoint(P7)

    # Create a hexahedron from the points
    hexa = vtk.vtkHexahedron()
    hexa.GetPointIds().SetId(0, 0)
    hexa.GetPointIds().SetId(1, 1)
    hexa.GetPointIds().SetId(2, 2)
    hexa.GetPointIds().SetId(3, 3)
    hexa.GetPointIds().SetId(4, 4)
    hexa.GetPointIds().SetId(5, 5)
    hexa.GetPointIds().SetId(6, 6)
    hexa.GetPointIds().SetId(7, 7)

    # Add the hexahedron to a cell array
    hexs = vtk.vtkCellArray()
    hexs.InsertNextCell(hexa)

    # Add the points and hexahedron to an unstructured grid
    uGrid = vtk.vtkUnstructuredGrid()
    uGrid.SetPoints(points)
    uGrid.InsertNextCell(hexa.GetCellType(), hexa.GetPointIds())

    surface = vtk.vtkDataSetSurfaceFilter()
    surface.SetInputData(uGrid)
    surface.Update()

    aBeamMapper = vtk.vtkDataSetMapper()
    aBeamMapper.SetInputConnection(surface.GetOutputPort())
    aBeamActor = vtk.vtkActor()
    aBeamActor.SetMapper(aBeamMapper)
    aBeamActor.AddPosition(0, 0, 0)
    aBeamActor.GetProperty().SetColor(1, 1, 0)
    aBeamActor.GetProperty().SetOpacity(0.60)
    aBeamActor.GetProperty().EdgeVisibilityOn()
    aBeamActor.GetProperty().SetEdgeColor(1, 1, 1)
    aBeamActor.GetProperty().SetLineWidth(1.5)

    # create a plane to cut,here it cuts in the XZ direction (xz normal=(1,0,0);XY =(0,0,1),YZ =(0,1,0)
    plane = vtk.vtkPlane()
    plane.SetOrigin(0.5, 0, 0)
    plane.SetNormal(1, 0, 0)

    # create cutter
    cutter = vtk.vtkCutter()
    cutter.SetCutFunction(plane)
    cutter.SetInputData(aBeamActor.GetMapper().GetInput())
    cutter.Update()
    cutterMapper = vtk.vtkDataSetMapper()
    cutterMapper.SetInputConnection(cutter.GetOutputPort())

    # create plane actor
    planeActor = vtk.vtkActor()
    planeActor.GetProperty().SetColor(1, 0.5, 0.5)
    planeActor.GetProperty().SetLineWidth(2)
    planeActor.SetMapper(cutterMapper)

    # Setup a renderer, render window, and interactor
    renderer = vtk.vtkRenderer()
    renderWindow = vtk.vtkRenderWindow()
    # renderWindow.SetWindowName("Test")

    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)

    # Add the actor to the scene
    renderer.AddActor(aBeamActor)
    renderer.AddActor(planeActor)
    renderer.SetBackground(0, 0, 0)  # Background color white

    # Render and interact
    renderWindow.Render()

    renderWindowInteractor.Start()