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
|
package require vtk
package require vtkinteraction
# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
#
# Create the data
#
vtkPoints points
vtkCellArray polys
set i 0
for { set z -5 } { $z < 30 } { incr z } {
for { set xtraX 0 } { $xtraX < 90 } { incr xtraX 30 } {
for { set xtraY 0 } { $xtraY < 90 } { incr xtraY 30 } {
set x -10
set y -10
set x [expr $x + $xtraX]
set y [expr $y + $xtraY]
if { [expr $z % 12] == 0 } { incr x 1; }
if { [expr $z % 12] == 1 } { incr x 2 }
if { [expr $z % 12] == 2 } { incr x 3 }
if { [expr $z % 12] == 3 } { incr x 3; incr y 1 }
if { [expr $z % 12] == 4 } { incr x 3; incr y 2 }
if { [expr $z % 12] == 5 } { incr x 3; incr y 3 }
if { [expr $z % 12] == 6 } { incr x 2; incr y 3 }
if { [expr $z % 12] == 7 } { incr x 1; incr y 3 }
if { [expr $z % 12] == 8 } { incr y 3 }
if { [expr $z % 12] == 9 } { incr y 2 }
if { [expr $z % 12] == 10 } { incr y 1 }
if { [expr ($xtraX != 30 && $xtraY != 30) || ($xtraX == $xtraY)] } {
polys InsertNextCell 4
points InsertPoint $i [expr $x + 0] [expr $y + 0] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 20] [expr $y + 0] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 20] [expr $y + 20] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 0] [expr $y + 20] $z
polys InsertCellPoint $i
incr i
polys InsertNextCell 4
points InsertPoint $i [expr $x + 4] [expr $y + 4] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 16] [expr $y + 4] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 16] [expr $y + 16] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 4] [expr $y + 16] $z
polys InsertCellPoint $i
incr i
}
if { [expr $xtraX != 30 || $xtraY != 30]} {
polys InsertNextCell 4
points InsertPoint $i [expr $x + 8] [expr $y + 8] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 12] [expr $y + 8] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 12] [expr $y + 12] $z
polys InsertCellPoint $i
incr i
points InsertPoint $i [expr $x + 8] [expr $y + 12] $z
polys InsertCellPoint $i
incr i
}
}
}
}
#
# Create a representation of the contours used as input
#
vtkPolyData contours
contours SetPoints points
contours SetPolys polys
vtkPolyDataMapper contourMapper
contourMapper SetInputData contours
vtkActor contourActor
contourActor SetMapper contourMapper
[contourActor GetProperty] SetColor 1 0 0
[contourActor GetProperty] SetAmbient 1
[contourActor GetProperty] SetDiffuse 0
[contourActor GetProperty] SetRepresentationToWireframe
ren1 AddViewProp contourActor
ren1 ResetCamera
[ren1 GetActiveCamera] Azimuth 10
[ren1 GetActiveCamera] Elevation 30
ren1 ResetCameraClippingRange
renWin SetSize 300 300
renWin Render
iren AddObserver UserEvent {wm deiconify .vtkInteract}
renWin Render
# prevent the tk window from showing up then start the event loop
wm withdraw .
#
# Create the contour to surface filter
#
vtkVoxelContoursToSurfaceFilter f
f SetInputData contours
f SetMemoryLimitInBytes 100000
vtkPolyDataMapper m
m SetInputConnection [f GetOutputPort]
m ScalarVisibilityOff
m ImmediateModeRenderingOn
vtkActor a
a SetMapper m
ren1 AddViewProp a
contourActor VisibilityOff
ren1 SetBackground .1 .2 .4
renWin Render
|