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 145 146 147 148 149 150 151 152 153 154
|
package require vtk
package require vtkinteraction
package require vtktesting
## Generate a rectilinear grid from a field.
##
# get the interactor ui
# Create a reader and write out the field
vtkDataSetReader reader
reader SetFileName "$VTK_DATA_ROOT/Data/RectGrid2.vtk"
vtkDataSetToDataObjectFilter ds2do
ds2do SetInputConnection [reader GetOutputPort]
if {[catch {set channel [open "RGridField.vtk" "w"]}] == 0 } {
close $channel
vtkDataObjectWriter writer
writer SetInputConnection [ds2do GetOutputPort]
writer SetFileName "RGridField.vtk"
writer Write
# Read the field
#
vtkDataObjectReader dor
dor SetFileName "RGridField.vtk"
vtkDataObjectToDataSetFilter do2ds
do2ds SetInputConnection [dor GetOutputPort]
do2ds SetDataSetTypeToRectilinearGrid
do2ds SetDimensionsComponent "Dimensions" 0
do2ds SetPointComponent 0 "XCoordinates" 0
do2ds SetPointComponent 1 "YCoordinates" 0
do2ds SetPointComponent 2 "ZCoordinates" 0
vtkFieldDataToAttributeDataFilter fd2ad
fd2ad SetInput [do2ds GetRectilinearGridOutput]
fd2ad SetInputFieldToDataObjectField
fd2ad SetOutputAttributeDataToPointData
fd2ad SetVectorComponent 0 "vectors" 0
fd2ad SetVectorComponent 1 "vectors" 1
fd2ad SetVectorComponent 2 "vectors" 2
fd2ad SetScalarComponent 0 "scalars" 0
fd2ad Update
# create pipeline
#
vtkRectilinearGridGeometryFilter plane
plane SetInput [fd2ad GetRectilinearGridOutput]
plane SetExtent 0 100 0 100 15 15
vtkWarpVector warper
warper SetInputConnection [plane GetOutputPort]
warper SetScaleFactor 0.05
vtkDataSetMapper planeMapper
planeMapper SetInputConnection [warper GetOutputPort]
planeMapper SetScalarRange 0.197813 0.710419
vtkActor planeActor
planeActor SetMapper planeMapper
vtkPlane cutPlane
eval cutPlane SetOrigin [[fd2ad GetOutput] GetCenter]
cutPlane SetNormal 1 0 0
vtkCutter planeCut
planeCut SetInput [fd2ad GetRectilinearGridOutput]
planeCut SetCutFunction cutPlane
vtkDataSetMapper cutMapper
cutMapper SetInputConnection [planeCut GetOutputPort]
eval cutMapper SetScalarRange \
[[[[fd2ad GetOutput] GetPointData] GetScalars] GetRange]
vtkActor cutActor
cutActor SetMapper cutMapper
vtkContourFilter iso
iso SetInput [fd2ad GetRectilinearGridOutput]
iso SetValue 0 0.7
vtkPolyDataNormals normals
normals SetInputConnection [iso GetOutputPort]
normals SetFeatureAngle 45
vtkPolyDataMapper isoMapper
isoMapper SetInputConnection [normals GetOutputPort]
isoMapper ScalarVisibilityOff
vtkActor isoActor
isoActor SetMapper isoMapper
eval [isoActor GetProperty] SetColor $bisque
eval [isoActor GetProperty] SetRepresentationToWireframe
vtkStreamLine streamer
streamer SetInputConnection [fd2ad GetOutputPort]
streamer SetStartPosition -1.2 -0.1 1.3
streamer SetMaximumPropagationTime 500
streamer SetStepLength 0.05
streamer SetIntegrationStepLength 0.05
streamer SetIntegrationDirectionToIntegrateBothDirections
vtkTubeFilter streamTube
streamTube SetInputConnection [streamer GetOutputPort]
streamTube SetRadius 0.025
streamTube SetNumberOfSides 6
streamTube SetVaryRadiusToVaryRadiusByVector
vtkPolyDataMapper mapStreamTube
mapStreamTube SetInputConnection [streamTube GetOutputPort]
eval mapStreamTube SetScalarRange \
[[[[fd2ad GetOutput] GetPointData] GetScalars] GetRange]
vtkActor streamTubeActor
streamTubeActor SetMapper mapStreamTube
[streamTubeActor GetProperty] BackfaceCullingOn
vtkOutlineFilter outline
outline SetInput [fd2ad GetRectilinearGridOutput]
vtkPolyDataMapper outlineMapper
outlineMapper SetInputConnection [outline GetOutputPort]
vtkActor outlineActor
outlineActor SetMapper outlineMapper
eval [outlineActor GetProperty] SetColor $black
# Graphics stuff
# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderWindow renWin
renWin SetMultiSamples 0
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
# Add the actors to the renderer, set the background and size
#
ren1 AddActor outlineActor
ren1 AddActor planeActor
ren1 AddActor cutActor
ren1 AddActor isoActor
ren1 AddActor streamTubeActor
ren1 SetBackground 1 1 1
renWin SetSize 300 300
[ren1 GetActiveCamera] SetPosition 0.0390893 0.184813 -3.94026
[ren1 GetActiveCamera] SetFocalPoint -0.00578326 0 0.701967
[ren1 GetActiveCamera] SetViewAngle 30
[ren1 GetActiveCamera] SetViewUp 0.00850257 0.999169 0.0398605
[ren1 GetActiveCamera] SetClippingRange 3.08127 6.62716
iren Initialize
# render the image
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
if {[info commands "rtExMath"] != ""} {
file delete -force "RGridField.vtk"
}
}
# prevent the tk window from showing up then start the event loop
wm withdraw .
|