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.
90 lines
2.8 KiB
90 lines
2.8 KiB
# 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.
|
|
vtkCompositeManager 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 |