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 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
package require vtk
package require vtkinteraction
vtkRenderer ren1
vtkRenderWindow renWin
renWin SetMultiSamples 0
renWin AddRenderer ren1
renWin SetSize 300 300
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
vtkCamera camera
camera ParallelProjectionOn
camera SetViewUp 0 1 0
camera SetFocalPoint 12 10.5 15
camera SetPosition -70 15 34
camera ComputeViewPlaneNormal
ren1 SetActiveCamera camera
# Create the reader for the data
#vtkStructuredPointsReader reader
vtkGaussianCubeReader reader
reader SetFileName "$VTK_DATA_ROOT/Data/m4_TotalDensity.cube"
reader SetHBScale 1.1
reader SetBScale 10
reader Update
set range [[[[reader GetGridOutput] GetPointData] GetScalars] GetRange]
set min [lindex $range 0]
set max [lindex $range 1]
vtkImageShiftScale readerSS
readerSS SetInputData [reader GetGridOutput]
readerSS SetShift [expr $min * -1]
readerSS SetScale [expr 255 / ($max - $min)]
readerSS SetOutputScalarTypeToUnsignedChar
vtkOutlineFilter bounds
bounds SetInputData [reader GetGridOutput]
vtkPolyDataMapper boundsMapper
boundsMapper SetInputConnection [bounds GetOutputPort]
vtkActor boundsActor
boundsActor SetMapper boundsMapper
[boundsActor GetProperty] SetColor 0 0 0
vtkContourFilter contour
contour SetInputData [reader GetGridOutput]
eval contour GenerateValues 5 0 .05
vtkPolyDataMapper contourMapper
contourMapper SetInputConnection [contour GetOutputPort]
eval contourMapper SetScalarRange 0 .1
[contourMapper GetLookupTable] SetHueRange 0.32 0
vtkActor contourActor
contourActor SetMapper contourMapper
[contourActor GetProperty] SetOpacity .5
# Create transfer mapping scalar value to opacity
vtkPiecewiseFunction opacityTransferFunction
opacityTransferFunction AddPoint 0 0.01
opacityTransferFunction AddPoint 255 0.35
opacityTransferFunction ClampingOn
# Create transfer mapping scalar value to color
vtkColorTransferFunction colorTransferFunction
colorTransferFunction AddHSVPoint 0.0 0.66 1.0 1.0
colorTransferFunction AddHSVPoint 50.0 0.33 1.0 1.0
colorTransferFunction AddHSVPoint 100.0 0.00 1.0 1.0
# The property describes how the data will look
vtkVolumeProperty volumeProperty
volumeProperty SetColor colorTransferFunction
volumeProperty SetScalarOpacity opacityTransferFunction
volumeProperty SetInterpolationTypeToLinear
# The mapper / ray cast function know how to render the data
vtkVolumeRayCastCompositeFunction compositeFunction
vtkVolumeRayCastMapper volumeMapper
#vtkVolumeTextureMapper2D volumeMapper
volumeMapper SetVolumeRayCastFunction compositeFunction
volumeMapper SetInputConnection [readerSS GetOutputPort]
# The volume holds the mapper and the property and
# can be used to position/orient the volume
vtkVolume volume
volume SetMapper volumeMapper
volume SetProperty volumeProperty
ren1 AddVolume volume
#ren1 AddActor contourActor
ren1 AddActor boundsActor
######################################################################
vtkSphereSource Sphere
Sphere SetCenter 0 0 0
Sphere SetRadius 1
Sphere SetThetaResolution 16
Sphere SetStartTheta 0
Sphere SetEndTheta 360
Sphere SetPhiResolution 16
Sphere SetStartPhi 0
Sphere SetEndPhi 180
vtkGlyph3D Glyph
Glyph SetInputConnection [reader GetOutputPort]
Glyph SetOrient 1
Glyph SetColorMode 1
#Glyph ScalingOn
Glyph SetScaleMode 2
Glyph SetScaleFactor .6
Glyph SetSourceConnection [Sphere GetOutputPort]
vtkPolyDataMapper AtomsMapper
AtomsMapper SetInputConnection [Glyph GetOutputPort]
AtomsMapper SetImmediateModeRendering 1
AtomsMapper UseLookupTableScalarRangeOff
AtomsMapper SetScalarVisibility 1
AtomsMapper SetScalarModeToDefault
vtkActor Atoms
Atoms SetMapper AtomsMapper
[Atoms GetProperty] SetRepresentationToSurface
[Atoms GetProperty] SetInterpolationToGouraud
[Atoms GetProperty] SetAmbient 0.15
[Atoms GetProperty] SetDiffuse 0.85
[Atoms GetProperty] SetSpecular 0.1
[Atoms GetProperty] SetSpecularPower 100
[Atoms GetProperty] SetSpecularColor 1 1 1
[Atoms GetProperty] SetColor 1 1 1
vtkTubeFilter Tube
Tube SetInputConnection [reader GetOutputPort]
Tube SetNumberOfSides 16
Tube SetCapping 0
Tube SetRadius 0.2
Tube SetVaryRadius 0
Tube SetRadiusFactor 10
vtkPolyDataMapper BondsMapper
BondsMapper SetInputConnection [Tube GetOutputPort]
BondsMapper SetImmediateModeRendering 1
BondsMapper UseLookupTableScalarRangeOff
BondsMapper SetScalarVisibility 1
BondsMapper SetScalarModeToDefault
vtkActor Bonds
Bonds SetMapper BondsMapper
[Bonds GetProperty] SetRepresentationToSurface
[Bonds GetProperty] SetInterpolationToGouraud
[Bonds GetProperty] SetAmbient 0.15
[Bonds GetProperty] SetDiffuse 0.85
[Bonds GetProperty] SetSpecular 0.1
[Bonds GetProperty] SetSpecularPower 100
[Bonds GetProperty] SetSpecularColor 1 1 1
[Bonds GetProperty] SetColor 1 1 1
ren1 AddActor Bonds
ren1 AddActor Atoms
####################################################
ren1 SetBackground 1 1 1
ren1 ResetCamera
renWin Render
proc TkCheckAbort {} {
set foo [renWin GetEventPending]
if {$foo != 0} {renWin SetAbortRender 1}
}
renWin AddObserver "AbortCheckEvent" {TkCheckAbort}
iren AddObserver UserEvent {wm deiconify .vtkInteract}
iren Initialize
wm withdraw .
|