# SimpleRayCast

VTKExamples/Python/VolumeRendering/SimpleRayCast

Other Languages

See (Cxx), (Java)

### Code

SimpleRayCast.py

    #!/usr/bin/env python

    import vtk

    def main():
        fileName = get_program_parameters()

        colors = vtk.vtkNamedColors()

        # This is a simple volume rendering example that
        # uses a vtkFixedPointVolumeRayCastMapper

        # Create the standard renderer, render window
        # and interactor.
        ren1 = vtk.vtkRenderer()

        renWin = vtk.vtkRenderWindow()
        renWin.AddRenderer(ren1)

        iren = vtk.vtkRenderWindowInteractor()
        iren.SetRenderWindow(renWin)

        # Create the reader for the data.
        reader = vtk.vtkStructuredPointsReader()
        reader.SetFileName(fileName)

        # Create transfer mapping scalar value to opacity.
        opacityTransferFunction = vtk.vtkPiecewiseFunction()
        opacityTransferFunction.AddPoint(20, 0.0)
        opacityTransferFunction.AddPoint(255, 0.2)

        # Create transfer mapping scalar value to color.
        colorTransferFunction = vtk.vtkColorTransferFunction()
        colorTransferFunction.AddRGBPoint(0.0, 0.0, 0.0, 0.0)
        colorTransferFunction.AddRGBPoint(64.0, 1.0, 0.0, 0.0)
        colorTransferFunction.AddRGBPoint(128.0, 0.0, 0.0, 1.0)
        colorTransferFunction.AddRGBPoint(192.0, 0.0, 1.0, 0.0)
        colorTransferFunction.AddRGBPoint(255.0, 0.0, 0.2, 0.0)

        # The property describes how the data will look.
        volumeProperty = vtk.vtkVolumeProperty()
        volumeProperty.SetColor(colorTransferFunction)
        volumeProperty.SetScalarOpacity(opacityTransferFunction)
        volumeProperty.ShadeOn()
        volumeProperty.SetInterpolationTypeToLinear()

        # The mapper / ray cast function know how to render the data.
        volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper()
        volumeMapper.SetInputConnection(reader.GetOutputPort())

        # The volume holds the mapper and the property and
        # can be used to position/orient the volume.
        volume = vtk.vtkVolume()
        volume.SetMapper(volumeMapper)
        volume.SetProperty(volumeProperty)

        ren1.AddVolume(volume)
        ren1.SetBackground(colors.GetColor3d("Wheat"))
        ren1.GetActiveCamera().Azimuth(45)
        ren1.GetActiveCamera().Elevation(30)
        ren1.ResetCameraClippingRange()
        ren1.ResetCamera()

        renWin.SetSize(600, 600)
        renWin.Render()

        iren.Start()

    def get_program_parameters():
        import argparse
        description = 'Volume rendering of a high potential iron protein.'
        epilogue = '''
        This is a simple volume rendering example that uses a vtkFixedPointVolumeRayCastMapper.
        '''
        parser = argparse.ArgumentParser(description=description, epilog=epilogue,
                                         formatter_class=argparse.RawDescriptionHelpFormatter)
        parser.add_argument('filename', help='ironProt.vtk.')
        args = parser.parse_args()
        return args.filename

    if __name__ == '__main__':
        main()