PlatonicSolid
VTKExamples/Python/GeometricObjects/PlatonicSolid
Description¶
Display all five Platonic solids in a grid.
Code¶
PlatonicSolid.py
#!/usr/bin/env python import vtk class PlatonicSolids(): def PlatonicSolids(self): # Each face has a different cell scalar # So create a lookup table with a different colour # for each face. lut = vtk.vtkLookupTable() lut.SetNumberOfTableValues(20) lut.SetTableRange(0.0, 19.0) lut.Build() lut.SetTableValue(0, 0, 0, 0) lut.SetTableValue(1, 0, 0, 1) lut.SetTableValue(2, 0, 1, 0) lut.SetTableValue(3, 0, 1, 1) lut.SetTableValue(4, 1, 0, 0) lut.SetTableValue(5, 1, 0, 1) lut.SetTableValue(6, 1, 1, 0) lut.SetTableValue(7, 1, 1, 1) lut.SetTableValue(8, 0.7, 0.7, 0.7) lut.SetTableValue(9, 0, 0, 0.7) lut.SetTableValue(10, 0, 0.7, 0) lut.SetTableValue(11, 0, 0.7, 0.7) lut.SetTableValue(12, 0.7, 0, 0) lut.SetTableValue(13, 0.7, 0, 0.7) lut.SetTableValue(14, 0.7, 0.7, 0) lut.SetTableValue(15, 0, 0, 0.4) lut.SetTableValue(16, 0, 0.4, 0) lut.SetTableValue(17, 0, 0.4, 0.4) lut.SetTableValue(18, 0.4, 0, 0) lut.SetTableValue(19, 0.4, 0, 0.4) PlatonicSolids = list() # There are five Platonic solids. PlatonicSolids.append(vtk.vtkPlatonicSolidSource()) PlatonicSolids.append(vtk.vtkPlatonicSolidSource()) PlatonicSolids.append(vtk.vtkPlatonicSolidSource()) PlatonicSolids.append(vtk.vtkPlatonicSolidSource()) PlatonicSolids.append(vtk.vtkPlatonicSolidSource()) # Specify the Platonic Solid to create. for idx, item in enumerate(PlatonicSolids): PlatonicSolids[idx].SetSolidType(idx) names = ["Tetrahedron","Cube","Octahedron","Icosahedron", "Dodecahedron"] renderers = list() mappers = list() actors = list() textmappers = list() textactors = list() # Create a common text property. textProperty = vtk.vtkTextProperty() textProperty.SetFontSize(10) textProperty.SetJustificationToCentered() # Create a parametric function source, renderer, mapper # and actor for each object. for idx, item in enumerate(PlatonicSolids): PlatonicSolids[idx].Update() mappers.append(vtk.vtkPolyDataMapper()) mappers[idx].SetInputConnection(PlatonicSolids[idx].GetOutputPort()) mappers[idx].SetLookupTable(lut) mappers[idx].SetScalarRange(0, 20) actors.append(vtk.vtkActor()) actors[idx].SetMapper(mappers[idx]) textmappers.append(vtk.vtkTextMapper()) textmappers[idx].SetInput(names[idx]) textmappers[idx].SetTextProperty(textProperty) textactors.append(vtk.vtkActor2D()) textactors[idx].SetMapper(textmappers[idx]) textactors[idx].SetPosition(120, 16) renderers.append(vtk.vtkRenderer()) rowDimensions = 3 colDimensions = 2 for idx in range(rowDimensions * colDimensions): if idx >= len(PlatonicSolids): renderers.append(vtk.vtkRenderer) rendererSize = 300 # Create the RenderWindow # renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(rendererSize * rowDimensions / colDimensions, rendererSize * colDimensions ) # Add and position the renders to the render window. viewport = list() idx = -1 for row in range(rowDimensions): for col in range(colDimensions): idx += 1 viewport[:] = [] viewport.append(float(col) * rendererSize / (colDimensions * rendererSize)) viewport.append(float(rowDimensions - (row+1)) * rendererSize / (rowDimensions * rendererSize)) viewport.append(float(col+1)*rendererSize / (colDimensions * rendererSize)) viewport.append(float(rowDimensions - row) * rendererSize / (rowDimensions * rendererSize)) if idx > (len(PlatonicSolids) - 1): continue renderers[idx].SetViewport(viewport) renderWindow.AddRenderer(renderers[idx]) renderers[idx].AddActor(actors[idx]) renderers[idx].AddActor(textactors[idx]) renderers[idx].SetBackground(0.4,0.3,0.2) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderWindow.Render() interactor.Start() if __name__ == "__main__": po = PlatonicSolids() po.PlatonicSolids()