File: StreamlinesWithLineWidget.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 (144 lines) | stat: -rw-r--r-- 4,076 bytes parent folder | download | duplicates (5)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package require vtk
package require vtkinteraction
package require vtktesting

# This example demonstrates how to use the vtkLineWidget to seed
# and manipulate streamlines. Two line widgets are created. One is
# invoked by pressing 'W', the other by pressing 'L'. Both can exist
# together.

# Start by loading some data.
#
vtkMultiBlockPLOT3DReader pl3d
    pl3d SetXYZFileName "$VTK_DATA_ROOT/Data/combxyz.bin"
    pl3d SetQFileName "$VTK_DATA_ROOT/Data/combq.bin"
    pl3d SetScalarFunctionNumber 100
    pl3d SetVectorFunctionNumber 202
    pl3d Update

set pl3dOutput [[pl3d GetOutput] GetBlock 0]

# The line widget is used seed the streamlines.
#
vtkLineWidget lineWidget
vtkPolyData seeds
lineWidget SetInputData $pl3dOutput
lineWidget SetAlignToYAxis
lineWidget PlaceWidget
lineWidget GetPolyData seeds
lineWidget ClampToBoundsOn

vtkRungeKutta4 rk4
vtkStreamTracer streamer
    streamer SetInputData $pl3dOutput
    streamer SetSourceData seeds
    streamer SetMaximumPropagation 100
    streamer SetInitialIntegrationStep .2
    streamer SetIntegrationDirectionToForward
    streamer SetComputeVorticity 1
    streamer SetIntegrator rk4
vtkRibbonFilter rf
    rf SetInputConnection [streamer GetOutputPort]
    rf SetWidth 0.1
    rf SetWidthFactor 5
vtkPolyDataMapper streamMapper
    streamMapper SetInputConnection [rf GetOutputPort]
    eval streamMapper SetScalarRange [$pl3dOutput  GetScalarRange]
vtkActor streamline
    streamline SetMapper streamMapper
    streamline VisibilityOff

# The second line widget is used seed more streamlines.
#
vtkLineWidget lineWidget2
vtkPolyData seeds2
lineWidget2 SetInputData $pl3dOutput
lineWidget2 PlaceWidget
lineWidget2 GetPolyData seeds2
lineWidget2 SetKeyPressActivationValue L

vtkStreamTracer streamer2
    streamer2 SetInputData $pl3dOutput
    streamer2 SetSourceData seeds2
    streamer2 SetMaximumPropagation 100
    streamer2 SetInitialIntegrationStep .2
    streamer2 SetIntegrationDirectionToForward
    streamer2 SetComputeVorticity 1
    streamer2 SetIntegrator rk4
vtkRibbonFilter rf2
    rf2 SetInputConnection [streamer2 GetOutputPort]
    rf2 SetWidth 0.1
    rf2 SetWidthFactor 5
vtkPolyDataMapper streamMapper2
    streamMapper2 SetInputConnection [rf2 GetOutputPort]
    eval streamMapper2 SetScalarRange [$pl3dOutput GetScalarRange]
vtkActor streamline2
    streamline2 SetMapper streamMapper2
    streamline2 VisibilityOff

vtkStructuredGridOutlineFilter outline
    outline SetInputData $pl3dOutput
vtkPolyDataMapper outlineMapper
    outlineMapper SetInputConnection [outline GetOutputPort]
vtkActor outlineActor
    outlineActor SetMapper outlineMapper

# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderWindow renWin
    renWin AddRenderer ren1
vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin

# Associate the line widget with the interactor
lineWidget SetInteractor iren
lineWidget AddObserver StartInteractionEvent BeginInteraction
lineWidget AddObserver InteractionEvent GenerateStreamlines

lineWidget2 SetInteractor iren
lineWidget2 AddObserver StartInteractionEvent BeginInteraction2
lineWidget2 AddObserver EndInteractionEvent GenerateStreamlines2

# Add the actors to the renderer, set the background and size
#
ren1 AddActor outlineActor
ren1 AddActor streamline
ren1 AddActor streamline2

ren1 SetBackground 1 1 1
renWin SetSize 300 300
ren1 SetBackground 0.1 0.2 0.4

set cam1 [ren1 GetActiveCamera]
$cam1 SetClippingRange 3.95297 50
$cam1 SetFocalPoint 9.71821 0.458166 29.3999
$cam1 SetPosition 2.7439 -37.3196 38.7167
$cam1 SetViewUp -0.16123 0.264271 0.950876

# render the image
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
renWin Render

# Prevent the tk window from showing up then start the event loop.
wm withdraw .

# Actually generate streamlines.
proc BeginInteraction {} {
    streamline VisibilityOn
}

proc GenerateStreamlines {} {
    lineWidget GetPolyData seeds
}

proc BeginInteraction2 {} {
    streamline2 VisibilityOn
}

proc GenerateStreamlines2 {} {
    lineWidget2 GetPolyData seeds2
}

iren Start