MinIntensityRendering
Repository source: MinIntensityRendering
Other languages
See (Cxx)
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
MinIntensityRendering.py
#!/usr/bin/env python3
from pathlib import Path
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingVolumeOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonDataModel import vtkPiecewiseFunction
from vtkmodules.vtkIOLegacy import vtkStructuredPointsReader
from vtkmodules.vtkImagingCore import vtkImageClip
from vtkmodules.vtkRenderingCore import (
    vtkColorTransferFunction,
    vtkRenderer,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkVolume,
    vtkVolumeProperty
)
from vtkmodules.vtkRenderingVolume import vtkFixedPointVolumeRayCastMapper
def get_program_parameters():
    import argparse
    description = 'Minimum intensity rendering.'
    epilogue = '''
    '''
    parser = argparse.ArgumentParser(description=description, epilog=epilogue,
                                     formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('file_name', help='The file name to use e.g. ironProt.vtk.')
    args = parser.parse_args()
    return args.file_name
def main():
    fn = get_program_parameters()
    fp = Path(fn)
    file_check = True
    if not fp.is_file():
        print(f'Missing image file: {fp}.')
        file_check = False
    if not file_check:
        return
    colors = vtkNamedColors()
    # Create the renderers, render window, and interactor.
    ren_win = vtkRenderWindow()
    iren = vtkRenderWindowInteractor()
    iren.render_window = ren_win
    ren = vtkRenderer(background=colors.GetColor3d('MidnightBlue'))
    ren_win.AddRenderer(ren)
    ren_win.window_name = 'MinIntensityRendering'
    # Read the data from a vtk file.
    reader = vtkStructuredPointsReader(file_name=fp)
    # Create a transfer function mapping scalar value to opacity.
    opacity_tf = vtkPiecewiseFunction()
    opacity_tf.AddSegment(0, 1.0, 256, 0.1)
    color_tf = vtkColorTransferFunction()
    color_tf.AddRGBPoint(0, 1.0, 1.0, 1.0)
    color_tf.AddRGBPoint(255, 1.0, 1.0, 1.0)
    # Need to crop to actually see the minimum intensity.
    clip = vtkImageClip(output_whole_extent=(0, 66, 0, 66, 30, 37), clip_data=True)
    property = vtkVolumeProperty()
    property.scalar_opacity = opacity_tf
    property.color = color_tf
    property.SetInterpolationTypeToLinear()
    mapper = vtkFixedPointVolumeRayCastMapper()
    mapper.SetBlendModeToMinimumIntensity()
    reader >> clip >> mapper
    volume = vtkVolume(mapper=mapper)
    volume.property = property
    ren.AddViewProp(volume)
    ren_win.Render()
    ren.active_camera.Zoom(1.3)
    iren.Start()
if __name__ == '__main__':
    main()
