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.

207 lines
4.6 KiB

2 years ago
package require vtk
package require vtkinteraction
# Renderer, renwin
vtkRenderer ren1
ren1 SetBackground 0.1 0.2 0.4
vtkRenderWindow renWin
renWin AddRenderer ren1
renWin SetSize 600 600
# The Tk render widget
set vtkw [vtkTkRenderWidget .ren -width 450 -height 450 -rw renWin]
::vtk::bind_tk_render_widget $vtkw
[[renWin GetInteractor] GetInteractorStyle] SetCurrentStyleToTrackballCamera
pack $vtkw -side left -fill both -expand yes
# Base text property
vtkTextProperty base_text_prop
base_text_prop SetFontSize 48
base_text_prop ShadowOn
base_text_prop SetColor 1.0 0.0 0.0
base_text_prop SetFontFamilyToArial
set base_scale 0.0025
set base_text "This is a test"
# The text actors
set text_actors {}
# Add a sphere
proc add_sphere {} {
vtkSphereSource obj_source
vtkPolyDataMapper obj_mapper
obj_mapper SetInputConnection [obj_source GetOutputPort]
vtkActor obj_actor
obj_actor SetMapper obj_mapper
[obj_actor GetProperty] SetRepresentationToWireframe
ren1 AddActor obj_actor
}
# Add one text actor, centered
proc add_one_text_actor {} {
global text_actors
vtkTextActor3D ia
lappend text_actors ia
set tprop [ia GetTextProperty]
$tprop ShallowCopy base_text_prop
}
# Add many text actor
proc add_many_text_actors {} {
global text_actors
vtkColorTransferFunction lut
lut SetColorSpaceToHSV
lut AddRGBPoint 0.0 0.0 1.0 1.0
lut AddRGBPoint 1.0 1.0 1.0 1.0
for {set i 0} {$i < 10} {incr i} {
set name "ia$i"
vtkTextActor3D $name
$name SetOrientation 0 [expr $i * 36] 0
# $name SetPosition [expr cos($i * 0.0314)] 0 0
lappend text_actors $name
set tprop [$name GetTextProperty]
$tprop ShallowCopy base_text_prop
set value [expr $i / 10.0]
eval $tprop SetColor [lut GetColor $value]
}
lut Delete
}
set scale_length 200
frame .controls -relief groove -bd 2
pack .controls -padx 2 -pady 2 -anchor nw -side left -fill both -expand n
# Add control of text
set entry_text [entry .controls.text]
$entry_text insert 0 "$base_text"
pack $entry_text -padx 4 -pady 4 -side top -fill x -expand n
bind $entry_text <Return> {update_text_actors 0}
bind $entry_text <FocusOut> {update_text_actors 0}
# Add control of orientation
set scale_orientation [scale .controls.orientation \
-from 0 -to 360 -res 1 \
-length $scale_length \
-orient horizontal \
-label "Text orientation:" \
-command update_text_actors]
$scale_orientation set [base_text_prop GetOrientation]
pack $scale_orientation -side top -fill x -expand n
# Add control of font size
set scale_font_size [scale .controls.font_size \
-from 5 -to 150 -res 1 \
-length $scale_length \
-orient horizontal \
-label "Font Size:" \
-command update_text_actors]
$scale_font_size set [base_text_prop GetFontSize]
pack $scale_font_size -side top -fill x -expand n
# Add control of scale
set scale_scale [scale .controls.scale \
-from 0 -to 100 -res 1 \
-length $scale_length \
-orient horizontal \
-label "Actor scale:" \
-command update_text_actors]
$scale_scale set [expr $base_scale * 10000.0]
pack $scale_scale -side top -fill x -expand n
# Add control of opacity
set scale_opacity [scale .controls.opacity \
-from 0.0 -to 1.0 -res 0.01 \
-length $scale_length \
-orient horizontal \
-label "Text opacity:" \
-command update_text_actors]
$scale_opacity set [base_text_prop GetOpacity]
pack $scale_opacity -side top -fill x -expand n
# Update all text actors
proc update_text_actors {dummy} {
global scale_orientation scale_font_size scale_scale entry_text scale_opacity
set orientation [$scale_orientation get]
set font_size [$scale_font_size get]
set scale [expr [$scale_scale get] / 10000.0]
set text [$entry_text get]
set opacity [$scale_opacity get]
global text_actors
set i 0
foreach actor $text_actors {
$actor SetScale $scale
$actor SetInput "$text"
set tprop [$actor GetTextProperty]
$tprop SetFontSize $font_size
$tprop SetOrientation $orientation
$tprop SetOpacity $opacity
incr i
}
renWin Render
}
# Create and add all text actors
if {0} {
add_sphere
add_one_text_actor
ren1 ResetCamera
} {
add_many_text_actors
ren1 ResetCamera
set cam [ren1 GetActiveCamera]
$cam Elevation 30
$cam Dolly 0.4
}
update_text_actors 0
foreach actor $text_actors {
ren1 AddActor $actor
}
# Interact
renWin Render
wm protocol . WM_DELETE_WINDOW ::vtk::cb_exit
tkwait window .
vtkCommand DeleteAllObject