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.
 
 
 
 
 
 

164 lines
4.8 KiB

#
# This example displays all possible combinations of font families and styles.
#
#
# First we include the VTK Tcl packages which will make available
# all of the vtk commands to Tcl
#
package require vtk
package require vtkinteraction
#
# We set the font size constraints, default text and colors
#
set current_font_size 16
set min_font_size 3
set max_font_size 50
set default_text "ABCDEFGHIJKLMnopqrstuvwxyz 0123456789 !@#$%()-=_+[]{};:,./<>?"
# set default_text "The quick red fox"
set text_color [list [expr 246 / 255.0] [expr 255 / 255.0] [expr 11 / 255.0]]
set bg_color [list [expr 56 / 255.0] [expr 56 / 255.0] [expr 154 / 255.0]]
#
# We create the render window which will show up on the screen
# We put our renderer into the render window using AddRenderer.
# Do not set the size of the window here.
#
vtkRenderWindow renWin
vtkRenderer ren1
eval ren1 SetBackground $bg_color
renWin AddRenderer ren1
#
# We create text actors for each font family and several combinations of bold,
# italic and shadowed style.
#
set text_actors {}
foreach family {
Arial
Courier
Times
} {
foreach {bold italic shadow} {
0 0 0
0 0 1
1 0 0
0 1 0
1 1 0
} {
set mapper [vtkTextMapper mapper_${family}_${bold}_${italic}_${shadow}]
set attribs {}
if {$bold} {
lappend attribs "b"
}
if {$italic} {
lappend attribs "i"
}
if {$shadow} {
lappend attribs "s"
}
set face_name "$family"
if {[llength $attribs]} {
set face_name "$face_name ([join $attribs ,])"
}
$mapper SetInput "$face_name: $default_text"
set tprop [$mapper GetTextProperty]
eval $tprop SetFontFamilyTo$family
eval $tprop SetColor $text_color
$tprop SetBold $bold
$tprop SetItalic $italic
$tprop SetShadow $shadow
set actor [vtkActor2D actor_${family}_${bold}_${italic}_${shadow}]
$actor SetMapper $mapper
lappend text_actors $actor
ren1 AddActor $actor
}
}
#
# vtkTkRenderWidget is a Tk widget that we can render into. It has a
# GetRenderWindow method that returns a vtkRenderWindow. This can then
# be used to create a vtkRenderer and etc. We can also specify a
# vtkRenderWindow to be used when creating the widget by using the -rw
# option, which is what we do here by using renWin. It also takes
# -width and -height options that can be used to specify the widget
# size, hence the render window size.
#
set vtkw [vtkTkRenderWidget .ren \
-width 800 \
-rw renWin]
#
# Setup Tk bindings and VTK observers for that widget.
#
::vtk::bind_tk_render_widget $vtkw
#
# Once the VTK widget has been created it can be inserted into a whole Tk GUI
# as well as any other standard Tk widgets.
#
# We create a size slider controlling the font size.
# The orientation of this widget is horizontal (-orient option). We label
# it using the -label option. Finally, we bind the scale to Tcl code
# by assigning the -command option to the name of a Tcl
# procedure. Whenever the slider value changes this procedure will be
# called, enabling us to propagate this GUI setting to the
# corresponding VTK object.
#
set size_slider [scale .size \
-from $min_font_size -to $max_font_size -res 1 \
-orient horizontal \
-label "Font size:" \
-command set_font_size]
#
# The procedure is called by the slider-widget handler whenever the
# slider value changes (either through user interaction or
# programmatically). It receives the slider value as parameter. We
# update the corresponding VTK objects by calling the
# SetFontSize method using this parameter and we render the scene to
# update the pipeline.
#
proc set_font_size {size} {
global text_actors
set i 0
foreach actor $text_actors {
incr i
[[$actor GetMapper] GetTextProperty] SetFontSize $size
$actor SetDisplayPosition 10 [expr $i * ($size + 5)]
}
renWin SetSize 800 [expr 20 + $i * ($size + 5)]
renWin Render
}
$size_slider set $current_font_size
#
# Finally we pack the VTK widget and the sliders on top of each other
# (-side top) inside the main root widget.
#
pack $size_slider -side top -fill both
pack $vtkw -side top -fill both -expand yes
#
# We set the window manager (wm command) so that it registers a
# command to handle the WM_DELETE_WINDOW protocal request. This
# request is triggered when the widget is closed using the standard
# window manager icons or buttons. In this case the exit callback
# will be called and it will free up any objects we created then exit
# the application.
#
wm protocol . WM_DELETE_WINDOW ::vtk::cb_exit
#
# You only need this line if you run this script from a Tcl shell
# (tclsh) instead of a Tk shell (wish)
#
tkwait window .