MultipleViewports
Repository source: MultipleViewports
Description¶
This example creates a window with 4 viewports. Updating the camera position in one viewport will also update the position in the other viewports.
See MultipleRenderWindows for an example using multiple windows.
Other languages
See (Cxx), (PythonicAPI), (Java)
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
MultipleViewports.py
#!/usr/bin/env python
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import (
vtkConeSource,
vtkCubeSource,
vtkCylinderSource,
vtkSphereSource
)
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
colors = vtkNamedColors()
# One render window, multiple viewports.
rw = vtkRenderWindow()
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(rw)
# Define viewport ranges.
xmins = [0, .5, 0, .5]
xmaxs = [0.5, 1, 0.5, 1]
ymins = [0, 0, .5, .5]
ymaxs = [0.5, 0.5, 1, 1]
# Have some fun with colors.
ren_bkg = ['AliceBlue', 'GhostWhite', 'WhiteSmoke', 'Seashell']
actor_color = ['Bisque', 'RosyBrown', 'Goldenrod', 'Chocolate']
sources = get_sources()
for i in range(4):
ren = vtkRenderer()
rw.AddRenderer(ren)
ren.SetViewport(xmins[i], ymins[i], xmaxs[i], ymaxs[i])
# Share the camera between viewports.
if i == 0:
camera = ren.GetActiveCamera()
camera.Azimuth(30)
camera.Elevation(30)
else:
ren.SetActiveCamera(camera)
# Create a mapper and actor
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(sources[i].GetOutputPort())
actor = vtkActor()
actor.GetProperty().SetColor(colors.GetColor3d(actor_color[i]))
actor.SetMapper(mapper)
ren.AddActor(actor)
ren.SetBackground(colors.GetColor3d(ren_bkg[i]))
ren.ResetCamera()
rw.Render()
rw.SetWindowName('MultipleViewPorts')
rw.SetSize(600, 600)
iren.Start()
def get_sources():
sources = list()
# Create a sphere
sphere = vtkSphereSource()
sphere.SetCenter(0.0, 0.0, 0.0)
sphere.Update()
sources.append(sphere)
# Create a cone
cone = vtkConeSource()
cone.SetCenter(0.0, 0.0, 0.0)
cone.SetDirection(0, 1, 0)
cone.Update()
sources.append(cone)
# Create a cube
cube = vtkCubeSource()
cube.SetCenter(0.0, 0.0, 0.0)
cube.Update()
sources.append(cube)
# Create a cylinder
cylinder = vtkCylinderSource()
cylinder.SetCenter(0.0, 0.0, 0.0)
cylinder.Update()
sources.append(cylinder)
return sources
if __name__ == '__main__':
main()