package require vtk
package require vtkinteraction
package require vtktesting

# Define loop to clip with
#
vtkPoints selectionPoints
    selectionPoints InsertPoint 0 -0.16553 0.135971 0.451972 
    selectionPoints InsertPoint 1 -0.0880123 -0.134952 0.4747
    selectionPoints InsertPoint 2  0.00292618 -0.134604 0.482459 
    selectionPoints InsertPoint 3 0.0641941 0.067112 0.490947
    selectionPoints InsertPoint 4 0.15577 0.0734765 0.469245
    selectionPoints InsertPoint 5 0.166667 -0.129217 0.454622 
    selectionPoints InsertPoint 6 0.241259 -0.123363 0.420581
    selectionPoints InsertPoint 7  0.240334 0.0727106 0.432555
    selectionPoints InsertPoint 8 0.308529 0.0844311 0.384357 
    selectionPoints InsertPoint 9 0.32672 -0.121674 0.359187
    selectionPoints InsertPoint 10 0.380721 -0.117342 0.302527
    selectionPoints InsertPoint 11 0.387804 0.0455074 0.312375 
    selectionPoints InsertPoint 12 0.43943 -0.111673 0.211707
    selectionPoints InsertPoint 13 0.470984 -0.0801913 0.147919
    selectionPoints InsertPoint 14 0.436777 0.0688872 0.233021 
    selectionPoints InsertPoint 15 0.44874 0.188852 0.109882
    selectionPoints InsertPoint 16 0.391352 0.254285 0.176943
    selectionPoints InsertPoint 17 0.373274 0.154162 0.294296 
    selectionPoints InsertPoint 18 0.274659 0.311654 0.276609
    selectionPoints InsertPoint 19 0.206068 0.31396 0.329702
    selectionPoints InsertPoint 20 0.263789 0.174982 0.387308 
    selectionPoints InsertPoint 21 0.213034 0.175485 0.417142
    selectionPoints InsertPoint 22 0.169113 0.261974 0.390286
    selectionPoints InsertPoint 23 0.102552 0.25997 0.414814 
    selectionPoints InsertPoint 24 0.131512 0.161254 0.454705
    selectionPoints InsertPoint 25 0.000192443 0.156264 0.475307
    selectionPoints InsertPoint 26 -0.0392091 0.000251724 0.499943 
    selectionPoints InsertPoint 27 -0.096161 0.159646 0.46438 

vtkSphereSource sphere
    sphere SetPhiResolution 50
    sphere SetThetaResolution 100
    sphere SetStartPhi 0
    sphere SetEndPhi 90
vtkSelectPolyData loop
    loop SetInputConnection [sphere GetOutputPort]
    loop SetLoop selectionPoints
    loop GenerateSelectionScalarsOn
    loop SetSelectionModeToSmallestRegion; #negative scalars inside
vtkClipPolyData clip; #clips out positive region
    clip SetInputConnection [loop GetOutputPort]
vtkPolyDataMapper clipMapper
    clipMapper SetInputConnection [clip GetOutputPort]
vtkLODActor clipActor
    clipActor SetMapper clipMapper

vtkSelectPolyData loop2
    loop2 SetInputConnection [sphere GetOutputPort]
    loop2 SetLoop selectionPoints
    loop2 SetSelectionModeToSmallestRegion
vtkPolyDataMapper selectMapper
    selectMapper SetInputConnection [loop2 GetOutputPort]
vtkLODActor selectActor
    selectActor SetMapper selectMapper
    selectActor AddPosition 1 0 0
    eval [selectActor GetProperty] SetColor $peacock

# Create graphics 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 clipActor
ren1 AddActor selectActor
ren1 SetBackground .1 .2 .4

renWin SetSize 500 250
set cam1 [ren1 GetActiveCamera]
$cam1 SetClippingRange 0.236644 11.8322
$cam1 SetFocalPoint 0.542809 -0.0166201 0.183931
$cam1 SetPosition 1.65945 0.364443 2.29141
$cam1 SetViewUp -0.0746604 0.986933 -0.14279

iren Initialize

# render the image
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}

# prevent the tk window from showing up then start the event loop
wm withdraw .
