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.
161 lines
4.9 KiB
161 lines
4.9 KiB
2 years ago
|
VTK Tcl wrappers
|
||
|
===========================================================================
|
||
|
|
||
|
I) Invoking the VTK package(s)
|
||
|
II) Invoking additional packages
|
||
|
III) Installing the packages
|
||
|
|
||
|
|
||
|
|
||
|
=============================
|
||
|
I) Invoking the VTK Tcl package(s)
|
||
|
|
||
|
Load the whole VTK API by issuing the following line before any
|
||
|
invocation of a VTK command (typically at the top of your Tcl script):
|
||
|
|
||
|
package require vtk
|
||
|
|
||
|
This will load all VTK components and the corresponding
|
||
|
commands. Depending on how VTK was built, some components might not be
|
||
|
available (since Hybrid, Parallel, and Rendering can be
|
||
|
excluded).
|
||
|
|
||
|
VTK may also be used on a component-by-component basis by requiring
|
||
|
the component explicitly. Example:
|
||
|
|
||
|
package require vtkrendering
|
||
|
|
||
|
The above line will resolve the dependencies and invoke (in that case)
|
||
|
the vtkgraphics and vtkimaging packages automatically (which will
|
||
|
trigger the vtkfiltering and vtkcommon packages too). This method can
|
||
|
be used to speed-up startup-time since only the required commands will
|
||
|
be loaded.
|
||
|
|
||
|
|
||
|
|
||
|
=============================
|
||
|
II) Invoking additional packages
|
||
|
|
||
|
|
||
|
A) vtkinteraction
|
||
|
**************
|
||
|
|
||
|
The vtkinteraction package can be loaded to provide additional
|
||
|
interaction support.
|
||
|
|
||
|
package require vtkinteraction
|
||
|
|
||
|
i) Tcl interactor:
|
||
|
|
||
|
The vtkinteraction package creates a generic Tcl interactor inside a
|
||
|
console widget, allowing you to issue any Tcl commands while running
|
||
|
the script. Once the package is loaded, a hidden .vtkInteract widget
|
||
|
is created. Bind a key or set the user method of your
|
||
|
vtkRenderWindowInteractor to deiconify that widget:
|
||
|
|
||
|
vtkRenderWindowInteractor iren
|
||
|
[...]
|
||
|
iren SetUserMethod {wm deiconify .vtkInteract}
|
||
|
|
||
|
Example: see Examples/GUI/Tcl/Mace.Tcl.
|
||
|
|
||
|
|
||
|
ii) 'vtkTkRenderWidget bindings':
|
||
|
|
||
|
The vtkinteraction package also brings a set of user-interaction
|
||
|
bindings for the vtkTkRenderWidget class. It allows you to use this Tk
|
||
|
widget in a way similar to the usual VTK interactor. Once the package
|
||
|
is loaded, call ::vtk::bind_tk_render_widget to associate the bindings
|
||
|
to the render widget:
|
||
|
|
||
|
set ren [vtkTkRenderWidget .ren -width 300 -height 300 -rw renWin]
|
||
|
::vtk::bind_tk_render_widget $ren
|
||
|
|
||
|
Example: see Examples/GUI/Tcl/MaceTk.Tcl.
|
||
|
|
||
|
|
||
|
B) vtktesting
|
||
|
*************
|
||
|
|
||
|
Some developpers might load the vtktesting package to include
|
||
|
additional facilities.
|
||
|
|
||
|
package require vtktesting
|
||
|
|
||
|
Once loaded, the package provides the functions usually located in the following files:
|
||
|
|
||
|
backdrop.tcl
|
||
|
colors.tcl
|
||
|
mccases.tcl
|
||
|
|
||
|
|
||
|
|
||
|
=============================
|
||
|
IV) Installing the package index file
|
||
|
|
||
|
A good description of the package and library facilities is given in
|
||
|
the Chapter 12 "Script, Libraries and Packages" (page 135) of
|
||
|
"Practical Programming in Tcl & Tk", Brent B. Welch, ISBN
|
||
|
0-13-616830-2.
|
||
|
|
||
|
When a package is "required" by the 'package' command (see part I to
|
||
|
III), the Tcl interpreter looks through a set of directories and their
|
||
|
subdirectories for pkgIndex.tcl files. It sources those to build an
|
||
|
internal database of packages (and version information).
|
||
|
|
||
|
A pkgIndex.tcl file is generated by this VTK distribution to provide
|
||
|
the packages described in the previous sections to the
|
||
|
interpreter. They will load the corresponding DLLs, set some default
|
||
|
behaviours/bindings/widgets and exit with an error message if the
|
||
|
package could not be provided (DLL not found, for example).
|
||
|
|
||
|
The package facility assume that Tcl libraries (and packages) are kept
|
||
|
in well-known directories (and their subdirectories). The list of
|
||
|
well-known directories is kept in the auto_path Tcl variable. It is
|
||
|
initialized by tclsh or wish to provide default directories, including
|
||
|
the default Tcl script library directory. For example :
|
||
|
|
||
|
Windows:
|
||
|
--------
|
||
|
|
||
|
% puts $auto_path
|
||
|
C:/devel/langages/tcl/8.3/lib/tcl8.3 C:/devel/langages/tcl/8.3/lib C:/devel/langages/tcl/8.3/lib/tk8.3
|
||
|
|
||
|
Linux/Unix:
|
||
|
--------
|
||
|
|
||
|
root [1003] ~/tmp# wish
|
||
|
% puts $auto_path
|
||
|
/usr/lib/tcl8.3 /usr/lib /usr/lib/tk8.3
|
||
|
|
||
|
Now let's see how we can make Tcl aware of the VTK Tcl packages. Tcl
|
||
|
provides a way for you to tell the Tcl interpreter to search for
|
||
|
pkgIndex.tcl files in any user-specified directory (and its
|
||
|
subdirectories). Just set the TCLLIBPATH environment variable to a set
|
||
|
of space-separated directories to search in (warning: Windows users
|
||
|
shall use '/' instead of '\').
|
||
|
|
||
|
If you have a VTK build tree on your hard disk, add Wrapping/Tcl to
|
||
|
TCLLIBPATH. For example:
|
||
|
|
||
|
Windows:
|
||
|
--------
|
||
|
|
||
|
TCLLIBPATH=C:/Project/VTK-msvc6/Wrapping/Tcl/Debug
|
||
|
|
||
|
Now check auto_path :
|
||
|
|
||
|
% puts $auto_path
|
||
|
C:/Project/VTK-msvc6/Wrapping/Tcl/Debug C:/devel/langages/tcl/8.3/lib/tcl8.3 C:/devel/langages/tcl/8.3/lib C:/devel/langages/tcl/8.3/lib/tk8.3
|
||
|
|
||
|
Linux/Unix:
|
||
|
--------
|
||
|
|
||
|
root [1011] ~/tmp# export TCLLIBPATH=/home/myuser/VTK-gcc/Wrapping/Tcl
|
||
|
root [1012] ~/tmp# wish
|
||
|
% puts $auto_path
|
||
|
/home/myuser/VTK-gcc/Wrapping/Tcl /usr/lib/tcl8.3 /usr/lib /usr/lib/tk8.3
|
||
|
|
||
|
This shall do the trick :))
|
||
|
Sebastien BARRE (sebastien.barre@kitware.com)
|