Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.

126 lines
3.4 KiB

2 years ago
package require vtk
package require vtkinteraction
# Create the RenderWindow, Renderer and both Actors
#
vtkRenderer ren1
vtkRenderer ren2
vtkRenderer ren3
vtkRenderer ren4
vtkRenderWindow renWin
renWin AddRenderer ren1
renWin AddRenderer ren2
renWin AddRenderer ren3
renWin AddRenderer ren4
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
# Create the data -- a plane with a couple of bumps
#
vtkPlaneSource plane
plane SetXResolution 10
plane SetYResolution 10
vtkTriangleFilter tf
tf SetInputConnection [plane GetOutputPort]
# This filter modifies the point coordinates in a couple of spots
#
vtkProgrammableFilter adjustPoints
adjustPoints SetInputConnection [tf GetOutputPort]
adjustPoints SetExecuteMethod adjustPointsProc
# The SetExecuteMethod takes a Tcl proc as an argument
# In here is where all the processing is done.
#
proc adjustPointsProc {} {
set input [adjustPoints GetPolyDataInput]
set inPts [$input GetPoints]
set numPts [$input GetNumberOfPoints]
vtkPoints newPts
newPts SetNumberOfPoints $numPts
for {set i 0} {$i < $numPts} {incr i} {
eval newPts SetPoint $i [$inPts GetPoint $i]
}
set pt [$inPts GetPoint 17]
newPts SetPoint 17 [lindex $pt 0] [lindex $pt 1] 0.25
set pt [$inPts GetPoint 50]
newPts SetPoint 50 [lindex $pt 0] [lindex $pt 1] 1.0
set pt [$inPts GetPoint 77]
newPts SetPoint 77 [lindex $pt 0] [lindex $pt 1] 0.125
[adjustPoints GetPolyDataOutput] CopyStructure $input
[adjustPoints GetPolyDataOutput] SetPoints newPts
newPts Delete; #reference counting - it's ok
}
# Now remove the extreme peak in the center
vtkGeometryFilter gf
gf SetInput [adjustPoints GetPolyDataOutput]
gf ExtentClippingOn
gf SetExtent -100 100 -100 100 -1 0.9
# Create a table of decimation conditions
#
set boundaryVertexDeletion "On Off"
set accumulates "On Off"
foreach topology $boundaryVertexDeletion {
foreach accumulate $accumulates {
vtkDecimatePro deci$topology$accumulate
deci$topology$accumulate SetInputConnection [gf GetOutputPort]
deci$topology$accumulate SetTargetReduction .95
deci$topology$accumulate BoundaryVertexDeletion$topology
deci$topology$accumulate AccumulateError$accumulate
vtkPolyDataMapper mapper$topology$accumulate
mapper$topology$accumulate SetInputConnection [deci$topology$accumulate GetOutputPort]
vtkActor plane$topology$accumulate
plane$topology$accumulate SetMapper mapper$topology$accumulate
}
}
# Add the actors to the renderer, set the background and size
#
ren1 SetViewport 0 .5 .5 1
ren2 SetViewport .5 .5 1 1
ren3 SetViewport 0 0 .5 .5
ren4 SetViewport .5 0 1 .5
ren1 AddActor planeOnOn
ren2 AddActor planeOnOff
ren3 AddActor planeOffOn
ren4 AddActor planeOffOff
vtkCamera camera
ren1 SetActiveCamera camera
ren2 SetActiveCamera camera
ren3 SetActiveCamera camera
ren4 SetActiveCamera camera
[ren1 GetActiveCamera] SetPosition -0.128224 0.611836 2.31297
[ren1 GetActiveCamera] SetFocalPoint 0 0 0.125
[ren1 GetActiveCamera] SetViewAngle 30
[ren1 GetActiveCamera] SetViewUp 0.162675 0.952658 -0.256864
ren1 SetBackground 0 0 0
ren2 SetBackground 0 0 0
ren3 SetBackground 0 0 0
ren4 SetBackground 0 0 0
renWin SetSize 500 500
# 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 .