def METHOD_NAME(obj):
    """Converts open3d geometry to a Klamp't geometry.
    """
    if isinstance(obj,open3d.geometry.PointCloud):
        import numpy as np
        pc = PointCloud()
        pc.setPoints(np.asarray(obj.points))
        if obj.has_colors():
            geometry.point_cloud_set_colors(pc,np.asarray(obj.colors).T,('r','g','b'),'rgb')
        #TODO: other properties
        return pc
    elif isinstance(obj,open3d.geometry.TriangleMesh):
        import numpy as np
        m = TriangleMesh()
        m.setVertices(np.asarray(obj.vertices))
        m.setIndices(np.asarray(obj.triangles))
        return m
    elif isinstance(obj,open3d.geometry.VoxelGrid):
        grid = VolumeGrid()
        import numpy as np
        if hasattr(obj, 'voxels'):
            # open3d <= 0.9.0
            occupied = np.array(obj.voxels,dtype=np.int32)
        else:
            occupied = np.array([v.grid_index for v in obj.get_voxels()],dtype=np.int32)
        imin = np.min(occupied,axis=0)
        imax = np.max(occupied,axis=0)
        assert imin.shape == (3,)
        assert imax.shape == (3,)
        bmin = obj.origin + (imin-1)*obj.voxel_size
        bmax = obj.origin + (imax+2)*obj.voxel_size
        grid.bbox.append(bmin[0])
        grid.bbox.append(bmin[1])
        grid.bbox.append(bmin[2])
        grid.bbox.append(bmax[0])
        grid.bbox.append(bmax[1])
        grid.bbox.append(bmax[2])
        grid.dims.append(imax[0]-imin[0]+3)
        grid.dims.append(imax[1]-imin[1]+3)
        grid.dims.append(imax[2]-imin[2]+3)
        grid.setValues(occupied.astype(float))
        return grid
    raise TypeError("Invalid type")