[vtkusers] How to map colors based on multiple scalars?

Charles Kind charles.kind at bristol.ac.uk
Mon Dec 11 05:00:39 EST 2017


Lasse,

This one had me stumped for a while too. Below is the code I have used to
implement HSV varying colours over the unit sphere. I am not sure about
extending beyond three variables. First declare an UnsignedCharArray and
chuck your tuples in. Then convert your chosen colours to RGB.

def ColorVectors(pd):
    numPoints = pd.GetNumberOfPoints()
    Colors = vtk.vtkUnsignedCharArray()
    Colors.SetNumberOfComponents(3)
    Colors.SetName("Colors")
    #Color by Vector
    #Set Hue from planar angle
    #Set Value and reverse order [0,1]->[1,0]
    for x in range(numPoints):
        azi =
math.atan2(pd.GetPointData().GetAbstractArray(0).GetTuple(x)[0],pd.GetPointData().GetAbstractArray(0).GetTuple(x)[1])
+ math.pi
        cH = azi / (2*math.pi)
        pol =
math.acos(pd.GetPointData().GetAbstractArray(0).GetTuple(x)[2])
        cV = ((pol / math.pi)-1)*(-1)
        cS  = math.sin(pol)
        cR = 255*vtk.vtkMath.HSVToRGB(cH,cS,cV)[0]
        cG = 255*vtk.vtkMath.HSVToRGB(cH,cS,cV)[1]
        cB = 255*vtk.vtkMath.HSVToRGB(cH,cS,cV)[2]
        Colors.InsertNextTuple3(cR, cG, cB)
    pd.GetPointData().SetScalars(Colors)
    return pd

Then what I did here, as I was colouring vectors and my PolyData contained
points, vectors, and color data was in my glyph creation,

def MakeGlyphs(arrowSource,csG):
    glyph3D = vtk.vtkGlyph3D()
    glyph3D.SetSourceConnection(arrowSource.GetOutputPort())
    glyph3D.SetVectorModeToUseVector()
    glyph3D.SetInputData(csG)
    glyph3D.SetInputArrayToProcess(0,0,1,0,'m')
    glyph3D.SetInputArrayToProcess(0,0,0,0,'colors')
    #glyph3D.SetScaleFactor(1e-07)
    glyph3D.SetColorModeToColorByScalar()
    glyph3D.Update()
    return glyph3D

was to tell the glyph which arrays to use and set color mode to scalar. This
worked!!

Good luck,

Charlie



--
Sent from: http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html


More information about the vtkusers mailing list