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.
 
 
 
 
 
 

105 lines
3.3 KiB

# This example demonstrates how to use boolean combinations of implicit
# functions to create a model of an ice cream cone.
# first we load in the standard vtk packages into tcl
package require vtk
package require vtkinteraction
package require vtktesting
# Create implicit function primitives. These have been carefully placed to
# give the effect that we want. We are going to use various combinations of
# these functions to create the shape we want; for example, we use planes
# intersected with a cone (which is infinite in extent) to get a finite
# cone.
#
vtkCone cone
cone SetAngle 20
vtkPlane vertPlane
vertPlane SetOrigin .1 0 0
vertPlane SetNormal -1 0 0
vtkPlane basePlane
basePlane SetOrigin 1.2 0 0
basePlane SetNormal 1 0 0
vtkSphere iceCream
iceCream SetCenter 1.333 0 0
iceCream SetRadius 0.5
vtkSphere bite
bite SetCenter 1.5 0 0.5
bite SetRadius 0.25
# Combine primitives to build ice-cream cone. Clip the cone with planes.
vtkImplicitBoolean theCone
theCone SetOperationTypeToIntersection
theCone AddFunction cone
theCone AddFunction vertPlane
theCone AddFunction basePlane
# Take a bite out of the ice cream.
vtkImplicitBoolean theCream
theCream SetOperationTypeToDifference
theCream AddFunction iceCream
theCream AddFunction bite
# The sample function generates a distance function from the
# implicit function (which in this case is the cone). This is
# then contoured to get a polygonal surface.
#
vtkSampleFunction theConeSample
theConeSample SetImplicitFunction theCone
theConeSample SetModelBounds -1 1.5 -1.25 1.25 -1.25 1.25
theConeSample SetSampleDimensions 60 60 60
theConeSample ComputeNormalsOff
vtkContourFilter theConeSurface
theConeSurface SetInputConnection [theConeSample GetOutputPort]
theConeSurface SetValue 0 0.0
vtkPolyDataMapper coneMapper
coneMapper SetInputConnection [theConeSurface GetOutputPort]
coneMapper ScalarVisibilityOff
vtkActor coneActor
coneActor SetMapper coneMapper
eval [coneActor GetProperty] SetColor $chocolate
# The same here for the ice cream.
#
vtkSampleFunction theCreamSample
theCreamSample SetImplicitFunction theCream
theCreamSample SetModelBounds 0 2.5 -1.25 1.25 -1.25 1.25
theCreamSample SetSampleDimensions 60 60 60
theCreamSample ComputeNormalsOff
vtkContourFilter theCreamSurface
theCreamSurface SetInputConnection [theCreamSample GetOutputPort]
theCreamSurface SetValue 0 0.0
vtkPolyDataMapper creamMapper
creamMapper SetInputConnection [theCreamSurface GetOutputPort]
creamMapper ScalarVisibilityOff
vtkActor creamActor
creamActor SetMapper creamMapper
eval [creamActor GetProperty] SetColor $mint
# Create the usual rendering stuff
#
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 coneActor
ren1 AddActor creamActor
ren1 SetBackground 1 1 1
renWin SetSize 250 250
ren1 ResetCamera
[ren1 GetActiveCamera] Roll 90
[ren1 GetActiveCamera] Dolly 1.5
ren1 ResetCameraClippingRange
iren Initialize
# 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 .