In my application, I display a volume image using MIP. In addition, I want to add a red line with the MIP. However, even I set the line color to red, it still shown as black:
I am interested in doing something very similar but with vtk.js. Using your example, I was able to achieve what I think you want by using a second renderer and setting the renderWindow to have two layers. Can anyone suggest if this is the best way to do this? Is it possible to do the same thing in vtk.js?
import vtkmodules.all as vtk
img = vtk.vtkImageData()
img.SetDimensions(256, 256, 256)
img.AllocateScalars(vtk.VTK_DOUBLE, 1)
for i in range(256):
for j in range(256):
for k in range(256):
img.SetScalarComponentFromDouble(i, j, k, 0, i+j+k)
mapper = vtk.vtkSmartVolumeMapper()
mapper.SetInputData(img)
mapper.SetBlendModeToMaximumIntensity()
volume = vtk.vtkVolume()
volume.SetMapper(mapper)
line = vtk.vtkLineSource()
line.SetPoint1(0, 0, 0)
line.SetPoint2(300, 300, 300)
line.Update()
lineMapper = vtk.vtkPolyDataMapper()
lineMapper.SetInputData(line.GetOutput())
lineActor = vtk.vtkActor()
lineActor.SetMapper(lineMapper)
lineActor.GetProperty().SetColor(1, 0, 0)
lineActor.GetProperty().SetLineWidth(10)
render = vtk.vtkRenderer()
render.SetLayer(0)
topRender = vtk.vtkRenderer()
topRender.SetLayer(1)
render.AddActor(volume)
topRender.AddActor(lineActor)
renWin = vtk.vtkRenderWindow()
renWin.SetNumberOfLayers(2)
renWin.AddRenderer(render)
renWin.AddRenderer(topRender)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
iren.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
iren.Initialize()
# have both renderers use same camera
render.SetActiveCamera(topRender.GetActiveCamera())
topRender.ResetCamera()
iren.Start()