NamedColors
VTKExamples/Python/Visualization/NamedColors
Description
==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()