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.
		
		
		
		
		
			
		
			
				
					
					
						
							90 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							90 lines
						
					
					
						
							2.5 KiB
						
					
					
				# 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 .
 | 
						|
 | 
						|
 | 
						|
 |