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.
91 lines
2.5 KiB
91 lines
2.5 KiB
2 years ago
|
# This example shows how to construct a surface from a point cloud. First
|
||
|
# we generate a volume using the vtkSurfaceReconstructionFilter. The volume
|
||
|
# values are a distance field. Once this is generated, the volume is
|
||
|
# countoured at a distance value of 0.0.
|
||
|
#
|
||
|
package require vtk
|
||
|
package require vtkinteraction
|
||
|
|
||
|
# Read some points. Use a programmable filter to read them.
|
||
|
#
|
||
|
vtkProgrammableSource pointSource
|
||
|
pointSource SetExecuteMethod readPoints
|
||
|
|
||
|
proc readPoints {} {
|
||
|
global VTK_DATA_ROOT
|
||
|
set output [pointSource GetPolyDataOutput]
|
||
|
vtkPoints points
|
||
|
$output SetPoints points
|
||
|
|
||
|
set file [open "$VTK_DATA_ROOT/Data/cactus.3337.pts" r]
|
||
|
while { [gets $file line] != -1 } {
|
||
|
scan $line "%s" firstToken
|
||
|
if { $firstToken == "p" } {
|
||
|
scan $line "%s %f %f %f" firstToken x y z
|
||
|
points InsertNextPoint $x $y $z
|
||
|
}
|
||
|
}
|
||
|
points Delete; #okay, reference counting
|
||
|
}
|
||
|
|
||
|
# Construct the surface and create isosurface.
|
||
|
#
|
||
|
vtkSurfaceReconstructionFilter surf
|
||
|
surf SetInputConnection [pointSource GetOutputPort]
|
||
|
|
||
|
vtkContourFilter cf
|
||
|
cf SetInputConnection [surf GetOutputPort]
|
||
|
cf SetValue 0 0.0
|
||
|
|
||
|
# Sometimes the contouring algorithm can create a volume whose gradient
|
||
|
# vector and ordering of polygon (using the right hand rule) are
|
||
|
# inconsistent. vtkReverseSense cures this problem.
|
||
|
vtkReverseSense reverse
|
||
|
reverse SetInputConnection [cf GetOutputPort]
|
||
|
reverse ReverseCellsOn
|
||
|
reverse ReverseNormalsOn
|
||
|
|
||
|
vtkPolyDataMapper map
|
||
|
map SetInputConnection [reverse GetOutputPort]
|
||
|
map ScalarVisibilityOff
|
||
|
|
||
|
vtkActor surfaceActor
|
||
|
surfaceActor SetMapper map
|
||
|
[surfaceActor GetProperty] SetDiffuseColor 1.0000 0.3882 0.2784
|
||
|
[surfaceActor GetProperty] SetSpecularColor 1 1 1
|
||
|
[surfaceActor GetProperty] SetSpecular .4
|
||
|
[surfaceActor GetProperty] SetSpecularPower 50
|
||
|
|
||
|
# Create the RenderWindow, Renderer and both Actors
|
||
|
#
|
||
|
vtkRenderer ren1
|
||
|
vtkRenderWindow renWin
|
||
|
renWin AddRenderer ren1
|
||
|
vtkRenderWindowInteractor iren
|
||
|
iren SetRenderWindow renWin
|
||
|
|
||
|
# Add the actors to the renderer, set the background and size
|
||
|
#
|
||
|
ren1 AddActor surfaceActor
|
||
|
ren1 SetBackground 1 1 1
|
||
|
renWin SetSize 400 400
|
||
|
[ren1 GetActiveCamera] SetFocalPoint 0 0 0
|
||
|
[ren1 GetActiveCamera] SetPosition 1 0 0
|
||
|
[ren1 GetActiveCamera] SetViewUp 0 0 1
|
||
|
ren1 ResetCamera
|
||
|
[ren1 GetActiveCamera] Azimuth 20
|
||
|
[ren1 GetActiveCamera] Elevation 30
|
||
|
[ren1 GetActiveCamera] Dolly 1.2
|
||
|
ren1 ResetCameraClippingRange
|
||
|
|
||
|
# render the image
|
||
|
#
|
||
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
||
|
|
||
|
renWin Render
|
||
|
|
||
|
# prevent the tk window from showing up then start the event loop
|
||
|
wm withdraw .
|
||
|
|
||
|
|