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.
154 lines
4.7 KiB
154 lines
4.7 KiB
2 years ago
|
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 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 .
|
||
|
|
||
|
|
||
|
|