def DoTheRendering(fn, options):
        with EasyPovRayRender(options) as epv:
            epv.setBackground(options.background)

            cam_fov = 60.
            cam_distance_factor = ComputeCameraDistanceFactor(
                cam_fov, options.res, wbbox)
            epv.setCamera((0, 0, cam_distance_factor * 1.05),
                          lookat=(0, 0, 0),
                          fov=cam_fov,
                          up='y')
            epv.addLight(10. * Vec3(1, 0.5, 2), 1.2)
            options.vessel_clip = ('zslice', -150 * trafo.w, +150 * trafo.w)

            pvcm = matplotlibColormapToPovray('DATACOLORMAP', cm)
            epv.declareColorMap(pvcm)
            if not options.not_render_volume:
                epvvol = epv.declareVolumeData(volumedata,
                                               volume_ld.GetWorldBox())
                epv.addVolumeDataSlice(epvvol, (0, 0, planeZCoord), (0, 0, 1.),
                                       pvcm)
            if not options.not_render_vessels:
                addVesselTree(epv, vessel_graph, trafo=trafo, options=options)

            CallPovrayAndOptionallyMakeMPLPlot(epv, fn, cm, label, options)
def renderSliceWithDistribution(vesselgroup, imagefn, options):
    vessel_ld = krebsutils.read_lattice_data_from_hdf(
        vesselgroup['vessels/lattice'])
    vessel_graph = krebsutils.read_vessels_from_hdf(
        vesselgroup['vessels'],
        ['position', 'flags', 'radius', 'pressure', 'shearforce', 'nodeflags'],
        return_graph=True)
    vessel_graph.edges['radius'] *= 4.

    #kwargs = deepcopy(kwargs)
    wbbox = vessel_ld.worldBox
    trafo = calc_centering_normalization_trafo(wbbox)
    height = (wbbox[5] - wbbox[4]) * trafo.w

    print('Vessel BBox:' + str(vessel_ld.worldBox))
    print(vessel_ld)
    print('Post Trafo Ld BBox:' + str(transform_ld(trafo, vessel_ld).worldBox))

    hasGfField = 'field_ld' in vesselgroup and vessel_ld.shape[2] == 1
    #hasGfField = False
    if hasGfField:
        volume_ld = krebsutils.read_lattice_data_from_hdf(
            vesselgroup['field_ld'])
        print('Volume BBox:' + str(volume_ld.worldBox))
        print(volume_ld)
        volumedata = np.asarray(vesselgroup['gf'])
        #print volumedata.shape, volumedata.min(), volumedata.max()
        volume_ld = transform_ld(trafo, volume_ld)
        print('Post Trafo Volume BBox:' + str(volume_ld.worldBox))
        print('volume data bounds:' + str(volumedata.min()),
              str(volumedata.max()))

    colorfactory(vessel_graph)

    with EasyPovRayRender(**options) as epv:
        epv.setBackground(options.pop('background', 0.0))

        cam_fov = 60.
        cam_distance_factor = ComputeCameraDistanceFactor(
            cam_fov, options['res'], wbbox)

        epv.setCamera((0, 0, cam_distance_factor * 1.05),
                      lookat=(0, 0, 0),
                      fov=cam_fov,
                      up='y')

        epv.addLight(10. * Vec3(1, 0.5, 2), 1.2)

        cm = matplotlib.cm.ScalarMappable(cmap=cm_gf)
        cm.set_clim(-0.01, 1.01)
        pvcm = matplotlibColormapToPovray('DATACOLORMAP', cm)
        epv.declareColorMap(pvcm)

        if hasGfField:
            volumedata = epv.declareVolumeData(volumedata, volume_ld.worldBox,
                                               volume_ld)
            epv.addVolumeDataSlice(volumedata, (0, 0, 0), (0, 0, 1.), pvcm)
        addVesselTree(epv, vessel_graph, trafo=trafo, **options)

        imagefn = epv.render(imagefn)
    cm = InsertGraphColors(vessel_graph, volumedata, data_name)

    with EasyPovRayRender(options) as epv:
        epv.setBackground(options.background)
        cam_fov = 60.
        cam_distance_factor = ComputeCameraDistanceFactor(
            cam_fov, options.res, wbbox)
        epv.setCamera((0, 0, cam_distance_factor * 1.05),
                      lookat=(0, 0, 0),
                      fov=cam_fov,
                      up='y')
        epv.addLight(10. * Vec3(1, 0.5, 2), 1.2)
        if (wbbox[1] - wbbox[0]) < (wbbox[5] - wbbox[4]) * 2.:
            options.vessel_clip = ('zslice', -300 * trafo.w, +300 * trafo.w)

        addVesselTree(epv, vessel_graph, trafo=trafo, options=options)

        CallPovrayAndOptionallyMakeMPLPlot(epv, imagefn, cm, label, options)


def renderVasculatureWTumor(
    (vessel_ld, vessel_graph, data_name), gtumor, imagefn, label, kwargs):
    kwargs = deepcopy(kwargs)

    wbbox = vessel_ld.worldBox
    trafo = calc_centering_normalization_trafo(wbbox)

    cm = InsertGraphColors(vessel_graph, None, data_name)

    with EasyPovRayRender(**kwargs) as epv:
        epv.setBackground(kwargs.pop('background', 1.0))