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.
149 lines
4.6 KiB
149 lines
4.6 KiB
package require vtk
|
|
package require vtkinteraction
|
|
package require vtktesting
|
|
|
|
set size 3187;#maximum number possible
|
|
#set size 100;#maximum number possible
|
|
set xAxis "INTEREST_RATE"
|
|
set yAxis "MONTHLY_PAYMENT"
|
|
set zAxis "MONTHLY_INCOME"
|
|
set scalar "TIME_LATE"
|
|
|
|
# extract data from field as a polydata (just points), then extract scalars
|
|
vtkDataObjectReader fdr
|
|
fdr SetFileName "$VTK_DATA_ROOT/Data/financial.vtk"
|
|
vtkDataObjectToDataSetFilter do2ds
|
|
do2ds SetInputConnection [fdr GetOutputPort]
|
|
do2ds SetDataSetTypeToPolyData
|
|
#format: component#, arrayname, arraycomp, minArrayId, maxArrayId, normalize
|
|
do2ds DefaultNormalizeOn
|
|
do2ds SetPointComponent 0 $xAxis 0
|
|
do2ds SetPointComponent 1 $yAxis 0 0 $size 1
|
|
do2ds SetPointComponent 2 $zAxis 0
|
|
do2ds Update
|
|
vtkFieldDataToAttributeDataFilter fd2ad
|
|
fd2ad SetInputConnection [do2ds GetOutputPort]
|
|
fd2ad SetInputFieldToDataObjectField
|
|
fd2ad SetOutputAttributeDataToPointData
|
|
fd2ad DefaultNormalizeOn
|
|
fd2ad SetScalarComponent 0 $scalar 0
|
|
|
|
# construct pipeline for original population
|
|
vtkGaussianSplatter popSplatter
|
|
popSplatter SetInputConnection [fd2ad GetOutputPort]
|
|
popSplatter SetSampleDimensions 50 50 50
|
|
popSplatter SetRadius 0.05
|
|
popSplatter ScalarWarpingOff
|
|
vtkMarchingContourFilter popSurface
|
|
popSurface SetInputConnection [popSplatter GetOutputPort]
|
|
popSurface SetValue 0 0.01
|
|
vtkPolyDataMapper popMapper
|
|
popMapper SetInputConnection [popSurface GetOutputPort]
|
|
popMapper ScalarVisibilityOff
|
|
vtkActor popActor
|
|
popActor SetMapper popMapper
|
|
[popActor GetProperty] SetOpacity 0.3
|
|
[popActor GetProperty] SetColor .9 .9 .9
|
|
|
|
# construct pipeline for delinquent population
|
|
vtkGaussianSplatter lateSplatter
|
|
lateSplatter SetInputConnection [fd2ad GetOutputPort]
|
|
lateSplatter SetSampleDimensions 50 50 50
|
|
lateSplatter SetRadius 0.05
|
|
lateSplatter SetScaleFactor 0.05
|
|
vtkMarchingContourFilter lateSurface
|
|
lateSurface SetInputConnection [lateSplatter GetOutputPort]
|
|
lateSurface SetValue 0 0.01
|
|
vtkPolyDataMapper lateMapper
|
|
lateMapper SetInputConnection [lateSurface GetOutputPort]
|
|
lateMapper ScalarVisibilityOff
|
|
vtkActor lateActor
|
|
lateActor SetMapper lateMapper
|
|
[lateActor GetProperty] SetColor 1.0 0.0 0.0
|
|
|
|
# create axes
|
|
popSplatter Update
|
|
set bounds [[popSplatter GetOutput] GetBounds]
|
|
vtkAxes axes
|
|
axes SetOrigin [lindex $bounds 0] [lindex $bounds 2] [lindex $bounds 4]
|
|
axes SetScaleFactor [expr [[popSplatter GetOutput] GetLength]/5.0]
|
|
vtkTubeFilter axesTubes
|
|
axesTubes SetInputConnection [axes GetOutputPort]
|
|
axesTubes SetRadius [expr [axes GetScaleFactor]/25.0]
|
|
axesTubes SetNumberOfSides 6
|
|
vtkPolyDataMapper axesMapper
|
|
axesMapper SetInputConnection [axesTubes GetOutputPort]
|
|
vtkActor axesActor
|
|
axesActor SetMapper axesMapper
|
|
|
|
# label the axes
|
|
vtkVectorText XText
|
|
XText SetText $xAxis
|
|
vtkPolyDataMapper XTextMapper
|
|
XTextMapper SetInputConnection [XText GetOutputPort]
|
|
vtkFollower XActor
|
|
XActor SetMapper XTextMapper
|
|
XActor SetScale 0.02 .02 .02
|
|
XActor SetPosition 0.35 -0.05 -0.05
|
|
[XActor GetProperty] SetColor 0 0 0
|
|
|
|
vtkVectorText YText
|
|
YText SetText $yAxis
|
|
vtkPolyDataMapper YTextMapper
|
|
YTextMapper SetInputConnection [YText GetOutputPort]
|
|
vtkFollower YActor
|
|
YActor SetMapper YTextMapper
|
|
YActor SetScale 0.02 .02 .02
|
|
YActor SetPosition -0.05 0.35 -0.05
|
|
[YActor GetProperty] SetColor 0 0 0
|
|
|
|
vtkVectorText ZText
|
|
ZText SetText $zAxis
|
|
vtkPolyDataMapper ZTextMapper
|
|
ZTextMapper SetInputConnection [ZText GetOutputPort]
|
|
vtkFollower ZActor
|
|
ZActor SetMapper ZTextMapper
|
|
ZActor SetScale 0.02 .02 .02
|
|
ZActor SetPosition -0.05 -0.05 0.35
|
|
[ZActor GetProperty] SetColor 0 0 0
|
|
|
|
# Graphics stuff
|
|
#
|
|
vtkRenderer ren1
|
|
vtkRenderWindow renWin
|
|
renWin AddRenderer ren1
|
|
renWin SetWindowName "vtk - Field Data"
|
|
vtkRenderWindowInteractor iren
|
|
iren SetRenderWindow renWin
|
|
|
|
# Add the actors to the renderer, set the background and size
|
|
#
|
|
ren1 AddActor axesActor
|
|
ren1 AddActor lateActor
|
|
ren1 AddActor XActor
|
|
ren1 AddActor YActor
|
|
ren1 AddActor ZActor
|
|
ren1 AddActor popActor;#it's last because its translucent
|
|
ren1 SetBackground 1 1 1
|
|
renWin SetSize 400 400
|
|
|
|
vtkCamera camera
|
|
camera SetClippingRange .274 13.72
|
|
camera SetFocalPoint 0.433816 0.333131 0.449
|
|
camera SetPosition -1.96987 1.15145 1.49053
|
|
camera SetViewUp 0.378927 0.911821 0.158107
|
|
ren1 SetActiveCamera camera
|
|
XActor SetCamera camera
|
|
YActor SetCamera camera
|
|
ZActor SetCamera camera
|
|
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
iren Initialize
|
|
renWin Render
|
|
|
|
# prevent the tk window from showing up then start the event loop
|
|
wm withdraw .
|
|
|
|
|
|
|