Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
2.7 KiB

2 years ago
package require vtk
package require vtkinteraction
# This script demonstrates the use of mangled Mesa to generate an
# off-screen copy of the OpenGL render window. A cone is created
# and added to the OpenGL renderer. When the user press the Print
# button, a copy of the scene is rendered on the Mesa window
# (which is set to render in memory) and then the scene is save to
# a png file using the png writer.
# Create the pipeline
# Note that an equivalent Mesa object has to be created for each
# OpenGL object.
# The OpenGL render window
vtkRenderWindow rw
# The Mesa equivalent
vtkXMesaRenderWindow mrw
mrw OffScreenRenderingOn
# OpenGL
vtkRenderer ren
rw AddRenderer ren
# Mesa
vtkMesaRenderer mren
mrw AddRenderer mren
vtkConeSource cone
# OpenGL
vtkPolyDataMapper map
map SetInputConnection [cone GetOutputPort]
# Mesa
vtkMesaPolyDataMapper mmap
mmap SetInputConnection [cone GetOutputPort]
# OpenGL
vtkActor actor
actor SetMapper map
# Mesa
vtkMesaActor mactor
mactor SetMapper mmap
# Add the actor to the renderer
ren AddActor actor
mren AddActor mactor
# These are for creating an image from the Mesa render window
vtkWindowToImageFilter w2if
w2if SetInput mrw
vtkPNGWriter writer
writer SetInputConnection [w2if GetOutputPort]
writer SetFileName "MesaPrintout.png"
set mesaCamera [mren GetActiveCamera]
set openGLCamera [ren GetActiveCamera]
proc PrintWithMesa {} {
global mesaCamera openGLCamera
# This is needed to create a default mesa light
mrw Render
set mesaLights [mren GetLights]
eval $mesaLights InitTraversal
set mesaLight [$mesaLights GetNextItem]
set openGLLights [ren GetLights]
eval $openGLLights InitTraversal
set openGLLight [$openGLLights GetNextItem]
eval $mesaCamera SetPosition [$openGLCamera GetPosition]
eval $mesaCamera SetFocalPoint [$openGLCamera GetFocalPoint]
eval $mesaCamera SetViewUp [$openGLCamera GetViewUp]
eval $mesaCamera SetClippingRange [$openGLCamera GetClippingRange]
eval $mesaLight DeepCopy $openGLLight
mrw Render
# This is here to force the window to image filter to
# update it's image. Required.
w2if Modified
writer Write
}
# ------------------- Create the UI ---------------------
wm withdraw .
# Create the toplevel window
toplevel .top
wm title .top {Printing with Mesa Offscreen Demo}
# Create two frames
frame .top.f1
frame .top.f2
pack .top.f1 .top.f2 -side top -expand 1 -fill both
vtkTkRenderWidget .top.f1.rw -width 400 -height 400 -rw rw
::vtk::bind_tk_render_widget .top.f1.rw
pack .top.f1.rw -expand 1 -fill both
button .top.f2.b0 -text "Print" -command {PrintWithMesa}
button .top.f2.b1 -text "Quit" -command ::vtk::cb_exit
pack .top.f2.b0 -expand 1 -fill x
pack .top.f2.b1 -expand 1 -fill x