How to extract surface from polydata

@cory.quammen, I also cannot get the vtk.vtkBooleanOperationPolyDataFilter filter to work:
The vtk.vtkBooleanOperationPolyDataFilter needs triangulated poly data as inputs.

import vtki
import vtk

# create cylinders and triangulate the meshes
c1 = vtki.Cylinder((0,0,0), (1,0,0), 2, 20).tri_filter()
c2 = vtki.Cylinder((0,0,0), (1,1,0), 2, 20).tri_filter()

tubes = vtki.MultiBlock([c1, c2])
merged = tubes.combine()
merged.plot(show_edges=True)

Apply the filter

# Get the intersection:
alg = vtk.vtkBooleanOperationPolyDataFilter()
alg.SetInputData(0, c1)
alg.SetInputData(1, c2)
alg.SetOperationToIntersection()
alg.Update()
intersection = vtki.wrap(alg.GetOutput())
alg.SetOperationToUnion()
alg.Update()
union = vtki.wrap(alg.GetOutput())

And plot up the result:

p = vtki.Plotter()
p.add_mesh(union, opacity=0.75, color='w')
p.add_mesh(intersection, color='r')
p.show()