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.
116 lines
2.8 KiB
116 lines
2.8 KiB
2 years ago
|
package require vtk
|
||
|
package require vtkinteraction
|
||
|
|
||
|
# create pipeline
|
||
|
#
|
||
|
# create sphere to color
|
||
|
vtkSphereSource sphere
|
||
|
sphere SetThetaResolution 20
|
||
|
sphere SetPhiResolution 40
|
||
|
|
||
|
|
||
|
proc colorCells {} {
|
||
|
vtkMath randomColorGenerator
|
||
|
set input [randomColors GetInput]
|
||
|
set output [randomColors GetOutput]
|
||
|
set numCells [$input GetNumberOfCells]
|
||
|
vtkFloatArray colors
|
||
|
colors SetNumberOfTuples $numCells
|
||
|
|
||
|
for {set i 0} {$i < $numCells} {incr i} {
|
||
|
colors SetValue $i [randomColorGenerator Random 0 1]
|
||
|
}
|
||
|
|
||
|
[$output GetCellData] CopyScalarsOff
|
||
|
[$output GetCellData] PassData [$input GetCellData]
|
||
|
[$output GetCellData] SetScalars colors
|
||
|
|
||
|
colors Delete; #reference counting - it's ok
|
||
|
randomColorGenerator Delete
|
||
|
}
|
||
|
|
||
|
# Compute random scalars (colors) for each cell
|
||
|
vtkProgrammableAttributeDataFilter randomColors
|
||
|
randomColors SetInputConnection [sphere GetOutputPort]
|
||
|
randomColors SetExecuteMethod colorCells
|
||
|
|
||
|
# mapper and actor
|
||
|
vtkPolyDataMapper mapper
|
||
|
mapper SetInput [randomColors GetPolyDataOutput]
|
||
|
eval mapper SetScalarRange [[randomColors GetPolyDataOutput] GetScalarRange]
|
||
|
vtkActor sphereActor
|
||
|
sphereActor SetMapper mapper
|
||
|
|
||
|
# Create a scalar bar
|
||
|
vtkScalarBarActor scalarBar
|
||
|
scalarBar SetLookupTable [mapper GetLookupTable]
|
||
|
scalarBar SetTitle "Temperature"
|
||
|
[scalarBar GetPositionCoordinate] SetCoordinateSystemToNormalizedViewport
|
||
|
[scalarBar GetPositionCoordinate] SetValue 0.1 0.05
|
||
|
scalarBar SetOrientationToVertical
|
||
|
scalarBar SetWidth 0.8
|
||
|
scalarBar SetHeight 0.9
|
||
|
scalarBar SetLabelFormat "%-#6.3f"
|
||
|
|
||
|
# Test the Get/Set Position
|
||
|
eval scalarBar SetPosition [scalarBar GetPosition]
|
||
|
|
||
|
# Create graphics stuff
|
||
|
# Create the RenderWindow, Renderer and both Actors
|
||
|
#
|
||
|
vtkRenderer ren1
|
||
|
vtkRenderer ren2
|
||
|
vtkRenderWindow renWin
|
||
|
renWin AddRenderer ren1
|
||
|
renWin AddRenderer ren2
|
||
|
vtkRenderWindowInteractor iren
|
||
|
iren SetRenderWindow renWin
|
||
|
|
||
|
ren1 AddActor sphereActor
|
||
|
ren2 AddActor2D scalarBar
|
||
|
renWin SetSize 160 160
|
||
|
ren1 SetViewport 0 0 0.75 1.0
|
||
|
ren2 SetViewport 0.75 0 1.0 1.0
|
||
|
ren2 SetBackground 0.3 0.3 0.3
|
||
|
|
||
|
# render the image
|
||
|
#
|
||
|
renWin Render
|
||
|
scalarBar SetNumberOfLabels 8
|
||
|
renWin Render
|
||
|
|
||
|
|
||
|
vtkWindowToImageFilter w2i
|
||
|
w2i SetInput renWin
|
||
|
w2i SetMagnification 2
|
||
|
w2i Update
|
||
|
|
||
|
# copy the output
|
||
|
set outputData [[w2i GetOutput] NewInstance]
|
||
|
$outputData DeepCopy [w2i GetOutput]
|
||
|
|
||
|
vtkImageMapper ia
|
||
|
ia SetInput $outputData
|
||
|
scalarBar ReleaseGraphicsResources renWin
|
||
|
sphereActor ReleaseGraphicsResources renWin
|
||
|
ia SetColorWindow 255
|
||
|
ia SetColorLevel 127.5
|
||
|
|
||
|
vtkActor2D ia2
|
||
|
ia2 SetMapper ia
|
||
|
|
||
|
renWin SetSize 320 320
|
||
|
ren2 RemoveViewProp scalarBar
|
||
|
ren1 RemoveViewProp sphereActor
|
||
|
ren1 AddActor ia2
|
||
|
renWin RemoveRenderer ren2
|
||
|
ren1 SetViewport 0 0 1 1
|
||
|
|
||
|
renWin Render
|
||
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
||
|
|
||
|
# prevent the tk window from showing up then start the event loop
|
||
|
wm withdraw .
|
||
|
|
||
|
$outputData UnRegister {}
|