def Mesh2VTKUGrid(mesh):
	vtkcelltypes=((),(vtk.VTK_EMPTY_CELL,vtk.VTK_VERTEX,vtk.VTK_LINE),(vtk.VTK_EMPTY_CELL,vtk.VTK_VERTEX,vtk.VTK_LINE,vtk.VTK_TRIANGLE,vtk.VTK_QUAD,vtk.VTK_POLYGON,vtk.VTK_POLYGON),(vtk.VTK_EMPTY_CELL,vtk.VTK_VERTEX,vtk.VTK_LINE,vtk.VTK_TRIANGLE,vtk.VTK_TETRA,vtk.VTK_CONVEX_POINT_SET,vtk.VTK_CONVEX_POINT_SET,vtk.VTK_CONVEX_POINT_SET,vtk.VTK_HEXAHEDRON))
	npoints=mesh.num_vertices()
	geom=mesh.geometry()
	pts=vtk.vtkPoints()
	pts.SetNumberOfPoints(npoints)
	for i in xrange(npoints):
		p=geom.point(i)
		pts.SetPoint(i,p.x(),p.y(),p.z())
	dim = mesh.topology().dim()
	ncells=mesh.num_cells()
	cells=vtk.vtkCellArray()
	cellTypes=vtk.vtkUnsignedCharArray()
	cellTypes.SetNumberOfTuples(ncells)
	cellLocations=vtk.vtkIdTypeArray()
	cellLocations.SetNumberOfTuples(ncells)
	loc=0
	for (cell,i) in zip(mesh.cells(),xrange(ncells)) :
		ncellpoints=len(cell)
		cells.InsertNextCell(ncellpoints)
		for cpoint in cell:
			cells.InsertCellPoint(cpoint)
		cellTypes.SetTuple1(i,vtkcelltypes[dim][ncellpoints])
		cellLocations.SetTuple1(i,loc)
		loc+=1+ncellpoints
	ugrid = vtk.vtkUnstructuredGrid()
	ugrid.SetPoints(pts)
	ugrid.SetCells(cellTypes,cellLocations,cells)
	return ugrid
def Mesh2VTKUGrid(mesh):
    vtkcelltypes=((),(vtk.VTK_EMPTY_CELL,vtk.VTK_VERTEX,vtk.VTK_LINE),(vtk.VTK_EMPTY_CELL,vtk.VTK_VERTEX,vtk.VTK_LINE,vtk.VTK_TRIANGLE,vtk.VTK_QUAD,vtk.VTK_POLYGON,vtk.VTK_POLYGON),(vtk.VTK_EMPTY_CELL,vtk.VTK_VERTEX,vtk.VTK_LINE,vtk.VTK_TRIANGLE,vtk.VTK_TETRA,vtk.VTK_CONVEX_POINT_SET,vtk.VTK_CONVEX_POINT_SET,vtk.VTK_CONVEX_POINT_SET,vtk.VTK_HEXAHEDRON))
    npoints=mesh.num_vertices()
    geom=mesh.geometry()
    pts=vtk.vtkPoints()
    pts.SetNumberOfPoints(npoints)
    for i in xrange(npoints):
        p=geom.point(i)
        pts.SetPoint(i,p.x(),p.y(),p.z())
    dim = mesh.topology().dim()
    ncells=mesh.num_cells()
    cells=vtk.vtkCellArray()
    cellTypes=vtk.vtkUnsignedCharArray()
    cellTypes.SetNumberOfTuples(ncells)
    cellLocations=vtk.vtkIdTypeArray()
    cellLocations.SetNumberOfTuples(ncells)
    loc=0
    for (cell,i) in zip(mesh.cells(),xrange(ncells)) :
        ncellpoints=len(cell)
        cells.InsertNextCell(ncellpoints)
        for cpoint in cell:
            cells.InsertCellPoint(cpoint)
        cellTypes.SetTuple1(i,vtkcelltypes[dim][ncellpoints])
        cellLocations.SetTuple1(i,loc)
        loc+=1+ncellpoints
    ugrid = vtk.vtkUnstructuredGrid()
    ugrid.SetPoints(pts)
    ugrid.SetCells(cellTypes,cellLocations,cells)
    return ugrid
    if not oldArray:
        print 'Attribute "%s" does not exists!' % arrayName
        continue

    valid_tuples = []
    for idx, val in idx_vals_tuples:
        if idx < 0 or idx >= nPoints:
            print 'Skipping invalid tuples (%d, %lf)' % (idx, val)
            continue

        valid_tuples.append((idx, val))

    if len(valid_tuples) == 0:
        continue

    vtkPropIdx = vtk.vtkIdTypeArray()
    vtkPropIdx.SetName("PropIdx" + arrayName)
    vtkPropIdx.SetNumberOfValues(len(valid_tuples))

    vtkPropVals = vtk.vtkDoubleArray()
    vtkPropVals.SetName("PropVals" + arrayName)
    vtkPropVals.SetNumberOfValues(len(valid_tuples))

    # Record changes
    for i, (idx, val) in enumerate(valid_tuples):
        vtkPropIdx.SetValue(i, idx)
        vtkPropVals.SetValue(i, val)

    # Set new array
    pdo.GetFieldData().AddArray(vtkPropIdx)
    pdo.GetFieldData().AddArray(vtkPropVals)