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.6 KiB
90 lines
2.6 KiB
2 years ago
|
package require vtk
|
||
|
package require vtkinteraction
|
||
|
package require vtktesting
|
||
|
|
||
|
vtkRenderer ren1
|
||
|
vtkRenderWindow renWin
|
||
|
renWin AddRenderer ren1
|
||
|
vtkRenderWindowInteractor iren
|
||
|
iren SetRenderWindow renWin
|
||
|
|
||
|
# create implicit function primitives
|
||
|
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
|
||
|
vtkImplicitBoolean theCone
|
||
|
theCone SetOperationTypeToIntersection
|
||
|
theCone AddFunction cone
|
||
|
theCone AddFunction vertPlane
|
||
|
theCone AddFunction basePlane
|
||
|
|
||
|
vtkImplicitBoolean theCream
|
||
|
theCream SetOperationTypeToDifference
|
||
|
theCream AddFunction iceCream
|
||
|
theCream AddFunction bite
|
||
|
|
||
|
# iso-surface to create geometry
|
||
|
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
|
||
|
vtkMarchingContourFilter 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
|
||
|
|
||
|
# iso-surface to create geometry
|
||
|
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
|
||
|
vtkMarchingContourFilter 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
|
||
|
|
||
|
# 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 .
|