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.
110 lines
3.0 KiB
110 lines
3.0 KiB
package require vtk
|
|
package require vtkinteraction
|
|
|
|
# Create the RenderWindow, Renderer and both Actors
|
|
#
|
|
vtkRenderer ren1
|
|
vtkRenderWindow renWin
|
|
renWin AddRenderer ren1
|
|
vtkRenderWindowInteractor iren
|
|
iren SetRenderWindow renWin
|
|
|
|
vtkConeSource cone
|
|
cone SetResolution 50
|
|
|
|
vtkSphereSource sphere
|
|
sphere SetPhiResolution 50
|
|
sphere SetThetaResolution 50
|
|
|
|
vtkCubeSource cube
|
|
cube SetXLength 1
|
|
cube SetYLength 1
|
|
cube SetZLength 1
|
|
|
|
vtkPolyDataMapper sphereMapper
|
|
sphereMapper SetInputConnection [sphere GetOutputPort]
|
|
sphereMapper GlobalImmediateModeRenderingOn
|
|
|
|
vtkActor sphereActor
|
|
sphereActor SetMapper sphereMapper
|
|
[sphereActor GetProperty] SetDiffuseColor 1 .2 .4
|
|
vtkPolyDataMapper coneMapper
|
|
coneMapper SetInputConnection [cone GetOutputPort]
|
|
coneMapper GlobalImmediateModeRenderingOn
|
|
|
|
vtkActor coneActor
|
|
coneActor SetMapper coneMapper
|
|
[coneActor GetProperty] SetDiffuseColor .2 .4 1
|
|
|
|
vtkPolyDataMapper cubeMapper
|
|
cubeMapper SetInputConnection [cube GetOutputPort]
|
|
cubeMapper GlobalImmediateModeRenderingOn
|
|
|
|
vtkActor cubeActor
|
|
cubeActor SetMapper cubeMapper
|
|
[cubeActor GetProperty] SetDiffuseColor .2 1 .4
|
|
|
|
#Add the actors to the renderer, set the background and size
|
|
#
|
|
sphereActor SetPosition -5 0 0
|
|
ren1 AddActor sphereActor
|
|
coneActor SetPosition 0 0 0
|
|
ren1 AddActor coneActor
|
|
coneActor SetPosition 5 0 0
|
|
ren1 AddActor cubeActor
|
|
|
|
proc MakeText { primitive } {
|
|
|
|
vtkTriangleFilter ${primitive}TriangleFilter
|
|
${primitive}TriangleFilter SetInputConnection [${primitive} GetOutputPort]
|
|
|
|
vtkMassProperties ${primitive}Mass
|
|
${primitive}Mass SetInputConnection [${primitive}TriangleFilter GetOutputPort]
|
|
|
|
set summary [${primitive}Mass Print]
|
|
set startSum [string first " VolumeX" $summary]
|
|
set endSum [string length $summary]
|
|
|
|
vtkVectorText ${primitive}Text
|
|
${primitive}Text SetText [string range $summary $startSum $endSum]
|
|
|
|
vtkPolyDataMapper ${primitive}TextMapper
|
|
${primitive}TextMapper SetInputConnection [${primitive}Text GetOutputPort]
|
|
|
|
vtkActor ${primitive}TextActor
|
|
${primitive}TextActor SetMapper ${primitive}TextMapper
|
|
${primitive}TextActor SetScale .2 .2 .2
|
|
return ${primitive}TextActor
|
|
}
|
|
|
|
ren1 AddActor [MakeText sphere]
|
|
ren1 AddActor [MakeText cube]
|
|
ren1 AddActor [MakeText cone]
|
|
|
|
eval sphereTextActor SetPosition [sphereActor GetPosition]
|
|
sphereTextActor AddPosition -2 -1 0
|
|
eval cubeTextActor SetPosition [cubeActor GetPosition]
|
|
cubeTextActor AddPosition -2 -1 0
|
|
eval coneTextActor SetPosition [coneActor GetPosition]
|
|
coneTextActor AddPosition -2 -1 0
|
|
|
|
ren1 SetBackground 0.1 0.2 0.4
|
|
renWin SetSize 786 256
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
ren1 ResetCamera
|
|
set cam1 [ren1 GetActiveCamera]
|
|
$cam1 Dolly 3
|
|
ren1 ResetCameraClippingRange
|
|
|
|
iren Initialize
|
|
proc TkCheckAbort {} {
|
|
set foo [renWin GetEventPending]
|
|
if {$foo != 0} {renWin SetAbortRender 1}
|
|
}
|
|
renWin AddObserver AbortCheckEvent {TkCheckAbort}
|
|
|
|
|
|
# prevent the tk window from showing up then start the event loop
|
|
wm withdraw .
|
|
|