如何在同一渲染风中渲染2.vtp切片

2024-09-28 21:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须以.vtp格式(也是在vtm中)创建一些切片,我希望这些切片能够一起可视化,以便在以后处理它们

我已经设置了读卡器、贴图器、角色、渲染窗口和摄影机坐标,但在渲染图像时,它只提供第一个切片(切片10),而不提供第二个切片(切片11)

import vtk

colors = vtk.vtkNamedColors()
Slice10 = 'Slice10_0_0.vtp'
reader1 = vtk.vtkXMLPolyDataReader()
reader1.SetFileName(Slice10)

Slice11 = 'Slice11_0_0.vtp'
reader2 = vtk.vtkXMLPolyDataReader()
reader2.SetFileName(Slice11)

# mapper
mapper1 = vtk.vtkPolyDataMapper()
mapper1.SetInputConnection(reader1.GetOutputPort())

mapper2 = vtk.vtkPolyDataMapper()
mapper2.SetInputConnection(reader2.GetOutputPort())

# actors
actor1 = vtk.vtkActor() 
actor1.SetMapper(mapper1)

actor2 = vtk.vtkActor()
actor2.SetMapper(mapper1)

'''RENDER'''
renderer = vtk.vtkRenderer()
# Background
renderer.SetBackground(1., 1., 1.)
# Add actor to the scene
renderer.AddActor(actor1)
renderer.AddActor(actor2)

'''Render window'''
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)

'''Interactor'''
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
renderWindowInteractor.SetRenderWindow(renderWindow)

'''Add camera coordinates'''
axes = vtk.vtkAxesActor()
widget = vtk.vtkOrientationMarkerWidget()
widget.SetOutlineColor(0.9300, 0.5700, 0.1300)
widget.SetOrientationMarker(axes)
widget.SetInteractor(renderWindowInteractor)
widget.SetViewport(0.0, 0.0, 0.4, 0.4)
widget.SetEnabled(1)
widget.InteractiveOn()

# Reset camera
renderer.ResetCamera()

'''Begin interaction'''
renderWindow.Render()
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()
renderWindowInteractor.Start()

我希望两个切片在同一个渲染窗口中,一个在另一个上,可能有一定的距离,但中心相同,以便将它们保存在一起作为一个唯一的图像并进行处理


Tags: 图像切片widgetrenderervtkreader1mapper1reader2
1条回答
网友
1楼 · 发布于 2024-09-28 21:49:58

您的代码基本上是正确的,只是为两个不同的角色设置了相同的映射器,因此实际上显示了两次相同的几何体(第19行到第24行)。更改:

# actors
actor1 = vtk.vtkActor() 
actor1.SetMapper(mapper1)

actor2 = vtk.vtkActor()
actor2.SetMapper(mapper1)

致:

# actors
actor1 = vtk.vtkActor() 
actor1.SetMapper(mapper1)

actor2 = vtk.vtkActor()
actor2.SetMapper(mapper2)

它会起作用的

相关问题 更多 >