NamedColors
VTKExamples/Python/Visualization/NamedColors
Description¶
This example demonstrates the usage of the vtkNamedColors class. Some helper functions are also implemented. A cone is created and contoured using the BandedPolyDataContourFilter, it is then colored using a lookup table where the colors have been assigned using color names.
A list of available color names and any synonyms are also output.
Code¶
NamedColors.py
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' This example demonstrates the usage of the vtNamedColor class. ''' from __future__ import print_function import vtk import string def FindSynonyms(nc, colorName): ''' Find any synonyms for a specified color. :param: nc: The vtkNamedColor class :param: colorName: the name of the color to find the synonyms for. :return: The synonyms for colorName. ''' availableColors = nc.GetColorNames() # Make a list availableColors = availableColors.split('\n') synonyms = [] # We use lower case for comparison and # just the red, green, and blue components # of the color. lcolorName = colorName.lower() myColor = nc.GetColor3ub(colorName) for color in availableColors: rgb = nc.GetColor3ub(color) if list(myColor) == list(rgb): synonyms.append(color) return synonyms def DisplayCone(nc): ''' Create a cone, contour it using the banded contour filter and color it with the primary additive and subtractive colors. :param: nc: The vtkNamedColor class :return: The render window interactor. ''' # Create a cone coneSource = vtk.vtkConeSource() coneSource.SetCenter(0.0, 0.0, 0.0) coneSource.SetRadius(5.0) coneSource.SetHeight(10) coneSource.SetDirection(0,1,0) coneSource.Update() bounds = [1.0,-1.0,1.0,-1.0,1.0,-1.0] coneSource.GetOutput().GetBounds(bounds) elevation = vtk.vtkElevationFilter() elevation.SetInputConnection(coneSource.GetOutputPort()) elevation.SetLowPoint(0,bounds[2],0) elevation.SetHighPoint(0,bounds[3],0) bcf = vtk.vtkBandedPolyDataContourFilter() bcf.SetInputConnection(elevation.GetOutputPort()) bcf.SetScalarModeToValue() bcf.GenerateContourEdgesOn() bcf.GenerateValues(7,elevation.GetScalarRange()) # Build a simple lookup table of # primary additive and subtractive colors. lut = vtk.vtkLookupTable() lut.SetNumberOfTableValues(7) # Test setting and getting a color here. # We are also modifying alpha. # Convert to a list so that # SetColor(name,rgba) works. rgba = list(nc.GetColor4d("Red")) rgba[3] = 0.5 nc.SetColor("My Red",rgba) rgba = nc.GetColor4d("My Red") lut.SetTableValue(0,rgba) # Does "My Red" match anything? match = FindSynonyms(nc,"My Red") print("Matching colors to My Red:", match) rgba = nc.GetColor4d("DarkGreen") rgba[3] = 0.3 lut.SetTableValue(1,rgba) # Alternatively we can use our wrapper functions: lut.SetTableValue(2,nc.GetColor4d("Blue")) lut.SetTableValue(3,nc.GetColor4d("Cyan")) lut.SetTableValue(4,nc.GetColor4d("Magenta")) lut.SetTableValue(5,nc.GetColor4d("Yellow")) lut.SetTableValue(6,nc.GetColor4d("White")) lut.SetTableRange(elevation.GetScalarRange()) lut.Build() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(bcf.GetOutputPort()) mapper.SetLookupTable(lut) mapper.SetScalarModeToUseCellData() contourLineMapper = vtk.vtkPolyDataMapper() contourLineMapper.SetInputData(bcf.GetContourEdgesOutput()) contourLineMapper.SetScalarRange(elevation.GetScalarRange()) contourLineMapper.SetResolveCoincidentTopologyToPolygonOffset() actor = vtk.vtkActor() actor.SetMapper(mapper) contourLineActor = vtk.vtkActor() actor.SetMapper(mapper) contourLineActor.SetMapper(contourLineMapper) contourLineActor.GetProperty().SetColor( nc.GetColor3d("black")) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderer.AddActor(actor) renderer.AddActor(contourLineActor) renderer.SetBackground( nc.GetColor3d("SteelBlue")) renderWindow.Render() fnsave = "TestNamedColorsIntegration.png" renLgeIm = vtk.vtkRenderLargeImage() imgWriter = vtk.vtkPNGWriter() renLgeIm.SetInput(renderer) renLgeIm.SetMagnification(1) imgWriter.SetInputConnection(renLgeIm.GetOutputPort()) imgWriter.SetFileName(fnsave) imgWriter.Write() return renderWindowInteractor def CheckVTKVersion(requiredMajorVersion): ''' Check the VTK version. :param: requiredMajorVersion e.g. 6 ''' version = vtk.vtkVersion() if version.GetVTKMajorVersion() > requiredMajorVersion: raise else: return def main(): nc = vtk.vtkNamedColors() colorNames = nc.GetColorNames().split('\n') print("There are", len(colorNames), "colors:") print(colorNames) syn = nc.GetSynonyms().split('\n\n') synonyms = [] for ele in syn: synonyms.append(ele.split('\n')) print("There are", len(synonyms), "synonyms:") print(synonyms) iren = DisplayCone(nc) iren.Start() if __name__ == "__main__": try: CheckVTKVersion(6) except: print("You need VTK Version 6 or greater.") print("The class vtkNamedColors is in VTK version 6 or greater.") exit(0) main()