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
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 .
|
||
|
|
||
|
|