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.
72 lines
1.6 KiB
72 lines
1.6 KiB
package require vtk
|
|
package require vtkinteraction
|
|
|
|
|
|
# Generate random planes to form a convex polyhedron.
|
|
# Create a polyhedral representation of the planes.
|
|
|
|
# get the interactor ui
|
|
|
|
|
|
# create some points laying between 1<=r<5 (r is radius)
|
|
# the points also have normals pointing away from the origin.
|
|
#
|
|
vtkMath mathObj
|
|
vtkPoints points
|
|
vtkFloatArray normals
|
|
normals SetNumberOfComponents 3
|
|
for {set i 0} {$i<100} {incr i 1} {
|
|
set radius 1.0
|
|
set theta [mathObj Random 0 360]
|
|
set phi [mathObj Random 0 180]
|
|
|
|
set x [expr $radius*sin($phi)*cos($theta)]
|
|
set y [expr $radius*sin($phi)*sin($theta)]
|
|
set z [expr $radius*cos($phi)]
|
|
|
|
eval points InsertPoint $i $x $y $z
|
|
eval normals InsertTuple3 $i $x $y $z
|
|
}
|
|
|
|
vtkPlanes planes
|
|
planes SetPoints points
|
|
planes SetNormals normals
|
|
|
|
vtkSphereSource ss
|
|
vtkHull hull
|
|
hull SetPlanes planes
|
|
|
|
vtkPolyData pd
|
|
hull GenerateHull pd -20 20 -20 20 -20 20
|
|
|
|
# triangulate them
|
|
#
|
|
vtkPolyDataMapper mapHull
|
|
mapHull SetInput pd
|
|
vtkActor hullActor
|
|
hullActor SetMapper mapHull
|
|
|
|
# Create graphics objects
|
|
# Create the rendering window, renderer, and interactive renderer
|
|
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 hullActor
|
|
renWin SetSize 250 250
|
|
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
ren1 ResetCamera
|
|
[ren1 GetActiveCamera] Zoom 1.5
|
|
iren Initialize
|
|
|
|
|
|
# prevent the tk window from showing up then start the event loop
|
|
wm withdraw .
|
|
|
|
|
|
|