1#!/usr/bin/env python 2import vtk 3from vtk.util.misc import vtkGetDataRoot 4VTK_DATA_ROOT = vtkGetDataRoot() 5 6# This script shows a cube with edges and faces (using a coincident 7# topology offset for polygons) and with ambient, diffuse and specular 8# lighting. 9# Three polydata mappers are tested with (top row) and without 10# (bottom row) lighting: 11# 1) left renderer shows a vtkPolyDataMapper which effectively is a 12# vtkOpenGLPolyDataMapper 13# 2) middle renderer shows a vtkCompositePolyDataMapper which delegates 14# to a vtkOpenGLPolyDataMapper 15# 3) right renderer shows a vtkCompositePolyDataMapper2 which does the 16# opengl rendering by itself 17 18# The cube 19cube = vtk.vtkCubeSource() 20rib=float(1.) 21cube.SetBounds(-rib/2,rib/2,-rib/2,rib/2,-rib/2,rib/2) 22cube.SetCenter(0,0,0) 23cube.Update() 24 25# Rotate the cube to show the faces being displaced 26transform = vtk.vtkTransform() 27transform.Identity() 28transform.RotateX(45) 29transform.RotateY(45) 30transformer=vtk.vtkTransformPolyDataFilter() 31transformer.SetInputConnection(cube.GetOutputPort()) 32transformer.SetTransform(transform) 33transformer.Update() 34 35# A trivial multi-block to be used as input for 36# vtkCompositePolyDataMapper and vtkCompositePolyDataMapper2 37mbd = vtk.vtkMultiBlockDataSet() 38mbd.SetNumberOfBlocks(1) 39mbd.SetBlock(0,transformer.GetOutput()) 40source=vtk.vtkTrivialProducer() 41source.SetOutput(mbd) 42 43# Set up the render window and the interactor. 44renWin=vtk.vtkRenderWindow() 45renWin.SetSize(600,400) 46iren=vtk.vtkRenderWindowInteractor() 47iren.SetRenderWindow(renWin) 48 49mappers=list() 50actors=list() 51renderers=list() 52 53polyMapper = vtk.vtkPolyDataMapper() 54polyMapper.SetInputConnection(transformer.GetOutputPort()) 55mappers.append(polyMapper) 56 57mbdMapper = vtk.vtkCompositePolyDataMapper() 58mbdMapper.SetInputConnection(source.GetOutputPort()) 59mappers.append(mbdMapper) 60 61mbdMapper2 = vtk.vtkCompositePolyDataMapper2() 62mbdMapper2.SetInputConnection(source.GetOutputPort()) 63mappers.append(mbdMapper2) 64 65x=0 66dx=float(1)/len(mappers) 67 68# Define the property: lighting intensities, color, 69# edge visibility, point visibilty 70p1=vtk.vtkProperty() 71p1.SetColor(1,0,0) 72p1.LightingOff() 73p1.SetAmbient(0.2) 74p1.SetDiffuse(0.7) 75p1.SetSpecular(0.4) 76p1.SetSpecularPower(35) 77p1.EdgeVisibilityOn() 78p1.SetEdgeColor(1,1,1) 79p1.VertexVisibilityOn() 80p1.SetVertexColor(0,1,0) 81p1.SetPointSize(4) 82 83# Top row has lighting on 84p2=vtk.vtkProperty() 85p2.DeepCopy(p1) 86p2.LightingOn() 87 88light=vtk.vtkLight() 89light.SetPosition(1,1,1) 90 91for m in mappers: 92 # Push back the polygons 93 m.SetRelativeCoincidentTopologyPolygonOffsetParameters(10,2) 94 95 # Bottom renderer shows cube without lighting 96 actors.append(vtk.vtkActor()) 97 a1=actors[-1] 98 a1.SetMapper(m) 99 a1.SetProperty(p1) 100 renderers.append(vtk.vtkRenderer()) 101 r1 = renderers[-1] 102 r1.AddActor(a1) 103 r1.RemoveAllLights() 104 r1.AddLight(light) 105 r1.SetViewport(x,0,x+dx,0.5) 106 renWin.AddRenderer(r1) 107 108 # Top renderer shows cube with lighting 109 actors.append(vtk.vtkActor()) 110 a2=actors[-1] 111 a2.SetMapper(m) 112 a2.SetProperty(p2) 113 renderers.append(vtk.vtkRenderer()) 114 r2 = renderers[-1] 115 r2.AddActor(a2) 116 r2.RemoveAllLights() 117 r2.AddLight(light) 118 r2.SetViewport(x,0.5,x+dx,1.0) 119 renWin.AddRenderer(r2) 120 x=x+dx 121 122iren.Initialize() 123renWin.Render() 124# --- end of script --- 125