File: PVTKDemo.tcl

package info (click to toggle)
vtk7 7.1.1%2Bdfsg2-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 127,396 kB
  • sloc: cpp: 1,539,584; ansic: 124,382; python: 78,038; tcl: 47,013; xml: 8,142; yacc: 5,040; java: 4,439; perl: 3,132; lex: 1,926; sh: 1,500; makefile: 126; objc: 83
file content (90 lines) | stat: -rw-r--r-- 2,897 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# This example demonstrates the use of pvtk.
# pvtk is a slightly different version of wish specially modified
# to be used with MPI. It allows Tcl scripts to be interpreted in
# parallel.
#
# In this example, a synthetic source (vtkRTAnalyticSource) generates
# image data (only one piece of the data is generated on each processor).
# Next, an isosurface (vtkContourFilter) is generated by each process.
# The resulting polygonal data is then rendered and then composited
# (vtkCompositeManager) and displayed on the first process (all processes
# will create render windows but only the render window of the root
# process will contain the composited image).

package require vtk
package require vtkinteraction

# Create a controller. At this point, MPI has already been initialized
# therefore there is no need to call Initialize.
vtkMPIController controller
# Get the local process id to be used later
set myId [controller GetLocalProcessId]

# The "global" extent of the source is (2*EXTENT+1)*(2*EXTENT+1)*(2*EXTENT+1)
# Each processor will generate one piece of this extent.
set EXTENT 20

# This is a synthetic source. The equation is:
# Maximum*Gaussian*XMag*sin(XFreq*x)*sin(YFreq*y)*cos(ZFreq*z)
vtkRTAnalyticSource source1
source1 SetWholeExtent [expr -1*$EXTENT] $EXTENT  [expr -1*$EXTENT] $EXTENT \
	[expr -1*$EXTENT] $EXTENT
source1 SetCenter 0 0 0
source1 SetStandardDeviation 0.5
source1 SetMaximum  255.0
source1 SetXFreq 60
source1 SetXMag 10
source1 SetYFreq 30
source1 SetYMag 18
source1 SetZFreq 40
source1 SetZMag 5
eval [source1 GetOutput] SetSpacing [expr 2.0/$EXTENT] \
	[expr 2.0/$EXTENT] [expr 2.0/$EXTENT]

# Generate an isosurface
vtkContourFilter cf
cf SetInputConnection [source1 GetOutputPort]
cf SetNumberOfContours 1
cf SetValue 0 220

vtkElevationFilter  elev
elev SetInputConnection [cf GetOutputPort]
elev SetScalarRange $myId [expr $myId + 0.001]

# Create the rendering part of the pipeline
vtkPolyDataMapper mapper
mapper SetInputConnection [elev GetOutputPort]
mapper SetScalarRange 0 [expr [controller GetNumberOfProcesses]]
vtkActor actor
actor SetMapper mapper

vtkRenderer ren
ren AddActor actor

vtkRenderWindow renWin
renWin AddRenderer ren

vtkRenderWindowInteractor iren
iren SetRenderWindow renWin

# This class allows all processes to composite their images.
# The root process then displays it in it's render window.
vtkCompositeRenderManager tc
tc SetRenderWindow renWin
# Tell the pipeline that we requests pieces not the whole
# data.
tc InitializePieces
# Reset camera so that a global clipping range is computed
# before the first render
ren ResetCamera

wm withdraw .

# Only the root process will have an active interactor. All
# the other render windows will be slaved to the root.
tc StartInteractor

# This has to be called to clean-up. If it is not called, MPI
# will most probably complain at exit.
vtkCommand DeleteAllObjects
exit