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.
97 lines
2.7 KiB
97 lines
2.7 KiB
package require vtk
|
|
package require vtkinteraction
|
|
package require vtktesting
|
|
|
|
### SetUp the pipeline
|
|
|
|
vtkRectilinearGridToTetrahedra FormMesh
|
|
FormMesh SetInput 4 2 2 1 1 1 0.001
|
|
FormMesh RememberVoxelIdOn
|
|
vtkExtractEdges TetraEdges
|
|
TetraEdges SetInputConnection [FormMesh GetOutputPort]
|
|
vtkTubeFilter tubes
|
|
tubes SetInputConnection [TetraEdges GetOutputPort]
|
|
tubes SetRadius 0.05
|
|
tubes SetNumberOfSides 6
|
|
|
|
### Run the pipeline 3 times, with different conversions to TetMesh
|
|
|
|
vtkPolyData Tubes1
|
|
FormMesh SetTetraPerCellTo5
|
|
tubes Update
|
|
Tubes1 DeepCopy [tubes GetOutput]
|
|
vtkPolyData Tubes2
|
|
FormMesh SetTetraPerCellTo6
|
|
tubes Update
|
|
Tubes2 DeepCopy [tubes GetOutput]
|
|
vtkPolyData Tubes3
|
|
FormMesh SetTetraPerCellTo12
|
|
tubes Update
|
|
Tubes3 DeepCopy [tubes GetOutput]
|
|
|
|
### Run the pipeline once more, this time converting some cells to
|
|
### 5 and some data to 12 TetMesh
|
|
|
|
### Determine which cells are which
|
|
vtkIntArray DivTypes
|
|
set numCell [[FormMesh GetInput] GetNumberOfCells]
|
|
DivTypes SetNumberOfValues $numCell
|
|
for {set i 0} {$i<$numCell} {incr i 1} {
|
|
DivTypes SetValue $i [expr 5 + (7* ( $i % 4))]
|
|
}
|
|
|
|
### Finish this pipeline
|
|
vtkPolyData Tubes4
|
|
FormMesh SetTetraPerCellTo5And12
|
|
[[FormMesh GetInput] GetCellData] SetScalars DivTypes
|
|
tubes Update
|
|
Tubes4 DeepCopy [tubes GetOutput]
|
|
|
|
### Finish the 4 pipelines
|
|
for {set i 1} {$i<5} {incr i 1} {
|
|
vtkPolyDataMapper mapEdges$i
|
|
mapEdges$i SetInput Tubes$i
|
|
vtkActor edgeActor$i
|
|
edgeActor$i SetMapper mapEdges$i
|
|
eval [edgeActor$i GetProperty] SetColor $peacock
|
|
[edgeActor$i GetProperty] SetSpecularColor 1 1 1
|
|
[edgeActor$i GetProperty] SetSpecular 0.3
|
|
[edgeActor$i GetProperty] SetSpecularPower 20
|
|
[edgeActor$i GetProperty] SetAmbient 0.2
|
|
[edgeActor$i GetProperty] SetDiffuse 0.8
|
|
vtkRenderer ren$i
|
|
ren$i AddActor edgeActor$i
|
|
ren$i SetBackground 0 0 0
|
|
ren$i ResetCamera
|
|
[ren$i GetActiveCamera] Zoom 1
|
|
[ren$i GetActiveCamera] SetPosition 1.73906 12.7987 -0.257808
|
|
[ren$i GetActiveCamera] SetViewUp 0.992444 0.00890284 -0.122379
|
|
[ren$i GetActiveCamera] SetClippingRange 9.36398 15.0496
|
|
}
|
|
|
|
# Create graphics objects
|
|
# Create the rendering window, renderer, and interactive renderer
|
|
vtkRenderWindow renWin
|
|
renWin AddRenderer ren1
|
|
renWin AddRenderer ren2
|
|
renWin AddRenderer ren3
|
|
renWin AddRenderer ren4
|
|
renWin SetSize 600 300
|
|
vtkRenderWindowInteractor iren
|
|
iren SetRenderWindow renWin
|
|
|
|
# Add the actors to the renderer, set the background and size
|
|
|
|
ren1 SetViewport .75 0 1 1
|
|
ren2 SetViewport .50 0 .75 1
|
|
ren3 SetViewport .25 0 .50 1
|
|
ren4 SetViewport 0 0 .25 1
|
|
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
|
|
iren Initialize
|
|
|
|
# prevent the tk window from showing up then start the event loop
|
|
wm withdraw .
|
|
|