BlobbyLogo
VTKExamples/Python/Visualization/BlobbyLogo
Description¶
This is the blobby vtk logo described in chapter 12 of the VTK textbook.
This examples uses the data v.vtk, t.vtk and k.vtk.
Other Languages
See (Cxx)
Code¶
BlobbyLogo.py
#!/usr/bin/env python """ """ import vtk def main(): colors = vtk.vtkNamedColors() fileName1, fileName2, fileName3 = get_program_parameters() aRenderer = vtk.vtkRenderer() aRenderWindow = vtk.vtkRenderWindow() aRenderWindow.AddRenderer(aRenderer) anInteractor = vtk.vtkRenderWindowInteractor() anInteractor.SetRenderWindow(aRenderWindow) aRenderWindow.SetSize(300, 300) # Read the geometry file containing the letter v. letterV = vtk.vtkPolyDataReader() letterV.SetFileName(fileName1) # Read the geometry file containing the letter t. letterT = vtk.vtkPolyDataReader() letterT.SetFileName(fileName2) # Read the geometry file containing the letter k. letterK = vtk.vtkPolyDataReader() letterK.SetFileName(fileName3) # Create a transform and transform filter for each letter. VTransform = vtk.vtkTransform() VTransformFilter = vtk.vtkTransformPolyDataFilter() VTransformFilter.SetInputConnection(letterV.GetOutputPort()) VTransformFilter.SetTransform(VTransform) TTransform = vtk.vtkTransform() TTransformFilter = vtk.vtkTransformPolyDataFilter() TTransformFilter.SetInputConnection(letterT.GetOutputPort()) TTransformFilter.SetTransform(TTransform) KTransform = vtk.vtkTransform() KTransformFilter = vtk.vtkTransformPolyDataFilter() KTransformFilter.SetInputConnection(letterK.GetOutputPort()) KTransformFilter.SetTransform(KTransform) # Now append them all. appendAll = vtk.vtkAppendPolyData() appendAll.AddInputConnection(VTransformFilter.GetOutputPort()) appendAll.AddInputConnection(TTransformFilter.GetOutputPort()) appendAll.AddInputConnection(KTransformFilter.GetOutputPort()) # Create normals. logoNormals = vtk.vtkPolyDataNormals() logoNormals.SetInputConnection(appendAll.GetOutputPort()) logoNormals.SetFeatureAngle(60) # Map to rendering primitives. logoMapper = vtk.vtkPolyDataMapper() logoMapper.SetInputConnection(logoNormals.GetOutputPort()) # Now an actor. logo = vtk.vtkActor() logo.SetMapper(logoMapper) # Now create an implicit model of the same letter. blobbyLogoImp = vtk.vtkImplicitModeller() blobbyLogoImp.SetInputConnection(appendAll.GetOutputPort()) blobbyLogoImp.SetMaximumDistance(.075) blobbyLogoImp.SetSampleDimensions(64, 64, 64) blobbyLogoImp.SetAdjustDistance(0.05) # Extract an iso surface. blobbyLogoIso = vtk.vtkContourFilter() blobbyLogoIso.SetInputConnection(blobbyLogoImp.GetOutputPort()) blobbyLogoIso.SetValue(1, 1.5) # Map to rendering primitives. blobbyLogoMapper = vtk.vtkPolyDataMapper() blobbyLogoMapper.SetInputConnection(blobbyLogoIso.GetOutputPort()) blobbyLogoMapper.ScalarVisibilityOff() tomato = vtk.vtkProperty() tomato.SetDiffuseColor(colors.GetColor3d("tomato")) tomato.SetSpecular(.3) tomato.SetSpecularPower(20) banana = vtk.vtkProperty() banana.SetDiffuseColor(colors.GetColor3d("banana")) banana.SetDiffuse(.7) banana.SetSpecular(.4) banana.SetSpecularPower(20) # Now an actor. blobbyLogo = vtk.vtkActor() blobbyLogo.SetMapper(blobbyLogoMapper) blobbyLogo.SetProperty(banana) # Position the letters. VTransform.Translate(-16.0, 0.0, 12.5) VTransform.RotateY(40) KTransform.Translate(14.0, 0.0, 0.0) KTransform.RotateY(-40) # Move the polygonal letters to the front. logo.SetProperty(tomato) logo.SetPosition(0, 0, 6) aRenderer.AddActor(logo) aRenderer.AddActor(blobbyLogo) aRenderer.SetBackground(colors.GetColor3d("SlateGray")) aRenderWindow.Render() # Interact with the data. anInteractor.Start() def get_program_parameters(): import argparse description = 'Use implicit modeller to create the VTK logo.' epilogue = ''' ''' parser = argparse.ArgumentParser(description=description, epilog=epilogue) parser.add_argument('filename1', help='v.vtk.') parser.add_argument('filename2', help='t.vtk.') parser.add_argument('filename3', help='k.vtk.') args = parser.parse_args() return args.filename1, args.filename2, args.filename3 if __name__ == '__main__': main()