Hello all,
I have met a development issue here, I want to coloring different cell with different color, I have draft code with VTK(not in 3D Slicer), the code as below:
import vtk
sphereSource = vtk.vtkSphereSource()
sphereSource.SetCenter(0,0,0)
sphereSource.SetRadius(60.0)
sphereSource.Update()
sphereSource = sphereSource.GetOutput() # vtkPolyData()
cellData = vtk.vtkUnsignedCharArray()
cellData.SetNumberOfComponents(3)
cellData.SetNumberOfTuples(sphereSource.GetNumberOfCells())
cellData.SetName('Colors')
for i in range(0,sphereSource.GetNumberOfCells()):
cellData.InsertTuple(i,(255,255,255))
sphereSource.GetCellData().SetScalars(cellData)
sphereSource.Modified()
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(sphereSource)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
renderer.AddActor(actor)
renderer.SetBackground((1,1,1))
renderWindow.Render()
renderWindowInteractor.Start()
and the result as below photo:
![图片|302x332](upload://kU4E3fiQzwRcKBvkAUpOsobPYF0.png)
Almost the same code in 3D Slicer python console:
# Hide the cube
v = slicer.util.getNode('View1')
v.SetBoxVisible(False)
# Sphere
sphereSource = vtk.vtkSphereSource()
sphereSource.SetCenter(0,0,0)
sphereSource.SetRadius(60.0)
sphereSource.Update()
sphereSource = sphereSource.GetOutput() # vtkPolyData()
# Create a model with the sphere and add it to scene
modelNode = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLModelNode')
modelNode.SetAndObservePolyData(sphereSource)
modelNode.CreateDefaultDisplayNodes()
modelNode.SetName('My sphere')
cellData = vtk.vtkUnsignedCharArray()
cellData.SetNumberOfComponents(3)
cellData.SetNumberOfTuples(sphereSource.GetNumberOfCells())
cellData.SetName('Colors')
for i in range(0,sphereSource.GetNumberOfCells()):
cellData.InsertTuple(i,(255.0, 255.0, 255.0))
sphereSource.GetCellData().SetScalars(cellData)
sphereSource.Modified()
# Set up coloring by selection array
#modelNode.GetDisplayNode().SetActiveScalar("Colors", vtk.vtkAssignAttribute.CELL_DATA)
modelNode.GetDisplayNode().SetAndObserveColorNodeID("")
modelNode.GetDisplayNode().SetScalarVisibility(True)
But the result as below photo:
Both code want to set all of the cells on the surface to white color (255.0, 255.0, 255.0), but I got different result, I have referenced c++ code as below link:
https://kitware.github.io/vtk-examples/site/Cxx/PolyData/ColorCellsWithRGB/
The result in 3D Slicer is not what I want. Am I missing something or need some extra configuration on 3D Slicer? Look forward to your kindly reply. Thanks in advance!
environment:
OS: Win10 x64
3D Slicer version: 4.11.20200930