Python VTK 单窗口多分屏 同步操作

VTK中的vtkRenderWindow()可以创造一个显示窗口,我们可以配置多个vtkRenderer(),并用SetViewPort()来对该窗口进行多分屏。这里实现了多分屏的实时同步操作(通过控制相机对物体旋转、放大、缩小)。

import vtk

class InteractionCallback:
	def __init__(self):
		self.renderer_list = []
	
	def execute(self, this, event):
		if event == "ModifiedEvent":
			position = this.GetPosition()
			focal_point = this.GetFocalPoint()
			view_up = this.GetViewUp()
			
			camera1 = self.renderer_list[0].GetActiveCamera()
			camera2 = self.renderer_list[1].GetActiveCamera()
			
			if this == camera1:
				camera2.SetPosition(position)
				camera2.SetFocalPoint(focal_point)
				camera2.SetViewUp(view_up)
			
			elif this == camera2:
				camera1.SetPosition(position)
				camera1.SetFocalPoint(focal_point)
				camera1.SetViewUp(view_up)

def render(data1, data2):
	# 创建一个窗口
	render_window = vtk.vtkRenderWindow()
	render_window.SetSize(600, 300)
	
	callback = InteractionCallback()
	
	# 分屏
	
	# 创建renderer
	renderer1 = vtk.vtkRenderer()
	renderer1.SetViewPort(0.0, 0.0, 0.5, 1.0)
	# 根据需求创建自己的actor
	mapper1 = vtk.vtkPolyDataMapper()
	mapper1.SetInputData(data1)
	mapper1.Update()
	actor1 = vtk.vtkActor()
	actor1.SetMapper(mapper1)
	renderer1.AddActor(actor1)
	
	callback.renderer_list.append(renderer1)
	renderer1.GetActiveCamera().AddObserver(vtk.vtkCommand.ModifiedEvent, callback.execute)
	
	# 重复之前的操作创建和配置renderer,多分屏可用loop
	renderer2 = vtk.vtkRenderer()
	renderer2.SetViewPort(0.5, 0.0, 1.0, 1.0)
	# 根据需求创建自己的actor
	mapper2 = vtk.vtkPolyDataMapper()
	mapper2.SetInputData(data2)
	mapper2.Update()
	actor2 = vtk.vtkActor()
	actor2.SetMapper(mapper2)
	renderer2.AddActor(actor2)
	
	callback.renderer_list.append(renderer2)
	renderer2.GetActiveCamera().AddObserver(vtk.vtkCommand.ModifiedEvent, callback.execute)
	
	
	interactor = vtk.vtkRenderWindowInteractor()
	style = vtk.vtkInteractorStyleTrackballCamera()
	interactor.SetInteractorStyle(style)
	interactor.SetRenderWindow(render_window)
	interactor.Initialize()
	interactor.Start()
	
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值