# SplatFace

VTKExamples/Python/VisualizationAlgorithms/SplatFace

### Code

SplatFace.py

    #!/usr/bin/env python

    """
    """

    import vtk

    def main():
        colors = vtk.vtkNamedColors()

        fileName = get_program_parameters()

        # Create the RenderWindow, Renderer and Interactor.
        #
        ren1 = vtk.vtkRenderer()
        renWin = vtk.vtkRenderWindow()
        renWin.AddRenderer(ren1)

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

        # Read cyberware file.
        #
        cyber = vtk.vtkPolyDataReader()
        cyber.SetFileName(fileName)

        normals = vtk.vtkPolyDataNormals()
        normals.SetInputConnection(cyber.GetOutputPort())

        mask = vtk.vtkMaskPoints()
        mask.SetInputConnection(normals.GetOutputPort())
        mask.SetOnRatio(8)
        # mask.RandomModeOn()

        splatter = vtk.vtkGaussianSplatter()
        splatter.SetInputConnection(mask.GetOutputPort())
        splatter.SetSampleDimensions(100, 100, 100)
        splatter.SetEccentricity(2.5)
        splatter.NormalWarpingOn()
        splatter.SetScaleFactor(1.0)
        splatter.SetRadius(0.025)

        contour = vtk.vtkContourFilter()
        contour.SetInputConnection(splatter.GetOutputPort())
        contour.SetValue(0, 0.25)

        splatMapper = vtk.vtkPolyDataMapper()
        splatMapper.SetInputConnection(contour.GetOutputPort())
        splatMapper.ScalarVisibilityOff()

        splatActor = vtk.vtkActor()
        splatActor.SetMapper(splatMapper)
        splatActor.GetProperty().SetColor(colors.GetColor3d("Flesh"))

        cyberMapper = vtk.vtkPolyDataMapper()
        cyberMapper.SetInputConnection(cyber.GetOutputPort())
        cyberMapper.ScalarVisibilityOff()

        cyberActor = vtk.vtkActor()
        cyberActor.SetMapper(cyberMapper)
        cyberActor.GetProperty().SetRepresentationToWireframe()
        cyberActor.GetProperty().SetColor(colors.GetColor3d("Turquoise"))

        # Add the actors to the renderer, set the background and size.
        #
        ren1.AddActor(cyberActor)
        ren1.AddActor(splatActor)
        ren1.SetBackground(colors.GetColor3d("Wheat"))
        renWin.SetSize(640, 480)

        camera = vtk.vtkCamera()
        camera.SetClippingRange(0.0332682, 1.66341)
        camera.SetFocalPoint(0.0511519, -0.127555, -0.0554379)
        camera.SetPosition(0.516567, -0.124763, -0.349538)
        camera.SetViewAngle(18.1279)
        camera.SetViewUp(-0.013125, 0.99985, -0.0112779)
        ren1.SetActiveCamera(camera)

        # Render the image.
        #
        renWin.Render()
        iren.Start()

    def get_program_parameters():
        import argparse
        description = 'Elliptical splatting.'
        epilogue = '''
        b) Surface reconstructed using elliptical splats into 100^3 volume followed by isosurface extraction.
           Points regularly subsampled and overlaid on original mesh.
        '''
        parser = argparse.ArgumentParser(description=description, epilog=epilogue,
                                         formatter_class=argparse.RawDescriptionHelpFormatter)
        parser.add_argument('filename', help='fran_cut.vtk.')
        args = parser.parse_args()
        return args.filename

    if __name__ == '__main__':
        main()