# Planes

VTKExamples/Python/GeometricObjects/Planes

### Code

Planes.py

    #!/usr/bin/env python

    import vtk

    # Use this variable to select one of the two methods below.
    SELECT_FRUSTUM_METHOD = True

    if SELECT_FRUSTUM_METHOD:
        # one way
        camera = vtk.vtkCamera()
        planesArray = [0 for i in range(24)]

        camera.GetFrustumPlanes(1, planesArray)

        planes = vtk.vtkPlanes()
        planes.SetFrustumPlanes(planesArray)

    else:
        # another way
        sphereSource = vtk.vtkSphereSource()
        sphereSource.Update()
        bounds = [0 for i in range(6)]
        sphereSource.GetOutput().GetBounds(bounds)

        planes = vtk.vtkPlanes()
        planes.SetBounds(bounds)

    # At this point we have the planes created by either of the methods above.
    # You can do whatever you want with them.

    # For visualisation we will produce an n-sided convex hull
    # and visualise it.

    # To generate the convex hull we supply a vtkPolyData object and a bounding box.
    # We define the bounding box to be where we expect the resulting polyhedron to lie.
    # Make it a generous fit as it is only used to create the initial
    # polygons that are eventually clipped.
    hull  = vtk.vtkHull()
    hull.SetPlanes(planes)

    pd = vtk.vtkPolyData()

    hull.GenerateHull(pd, -200, 200, -200, 200, -200, 200)

    mapper = vtk.vtkPolyDataMapper()
    if vtk.VTK_MAJOR_VERSION <= 5:
        mapper.SetInput(pd)
    else:
        mapper.SetInputData(pd)

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    renderer = vtk.vtkRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)
    renderer.AddActor(actor)

    renderWindow.Render()
    renderWindowInteractor.Start()