# BooleanOperationPolyDataFilter

VTKExamples/Python/PolyData/BooleanOperationPolyDataFilter

### Description

Computes the intersection of two spheres

NOTE: This example requires version 5.9.20111206 or higher.

### Code

BooleanOperationPolyDataFilter.py

    #!/usr/bin/env python

    import vtk

    sphereSource1 = vtk.vtkSphereSource()
    sphereSource1.SetCenter(0.25, 0, 0)
    sphereSource1.Update()
    input1 = sphereSource1.GetOutput()
    sphere1Tri = vtk.vtkTriangleFilter()
    sphere1Tri.SetInputData(input1)

    sphereSource2 = vtk.vtkSphereSource()
    sphereSource2.Update()
    input2 = sphereSource2.GetOutput()
    sphere2Tri = vtk.vtkTriangleFilter()
    sphere2Tri.SetInputData(input2)

    input1Mapper = vtk.vtkPolyDataMapper()
    if vtk.VTK_MAJOR_VERSION <= 5:
        input1Mapper.SetInputConnection(input1.GetProducerPort())
    else:
        input1Mapper.SetInputData(input1)

    input1Mapper.ScalarVisibilityOff()
    input1Actor = vtk.vtkActor()
    input1Actor.SetMapper(input1Mapper)
    input1Actor.GetProperty().SetColor(1,0,0)
    input1Actor.SetPosition(input1.GetBounds()[1]-input1.GetBounds()[0],0 ,0)
    input2Mapper = vtk.vtkPolyDataMapper()
    if vtk.VTK_MAJOR_VERSION <= 5:
        input2Mapper.SetInputConnection(input2.GetProducerPort())
    else:
        input2Mapper.SetInputData(input2)

    input2Mapper.ScalarVisibilityOff()
    input2Actor = vtk.vtkActor()
    input2Actor.SetMapper(input2Mapper)
    input2Actor.GetProperty().SetColor(0,1,0)
    input2Actor.SetPosition(-(input2.GetBounds()[1]-input2.GetBounds()[0]), 0, 0)

    booleanOperation = vtk.vtkBooleanOperationPolyDataFilter()
    #booleanOperation.SetOperationToUnion()
    booleanOperation.SetOperationToIntersection()
    #booleanOperation.SetOperationToDifference()

    booleanOperation.SetInputConnection(0, sphere1Tri.GetOutputPort())
    booleanOperation.SetInputConnection(1, sphere2Tri.GetOutputPort())
    booleanOperation.Update()

    booleanOperationMapper = vtk.vtkPolyDataMapper()
    booleanOperationMapper.SetInputConnection(booleanOperation.GetOutputPort())
    booleanOperationMapper.ScalarVisibilityOff()

    booleanOperationActor = vtk.vtkActor()
    booleanOperationActor.SetMapper(booleanOperationMapper)

    renderer = vtk.vtkRenderer()
    renderer.AddViewProp(input1Actor)
    renderer.AddViewProp(input2Actor)
    renderer.AddViewProp(booleanOperationActor)
    renderer.SetBackground(.1, .2, .3)
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer( renderer )

    renWinInteractor = vtk.vtkRenderWindowInteractor()
    renWinInteractor.SetRenderWindow( renderWindow )

    renderWindow.Render()
    renWinInteractor.Start()