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.
153 lines
4.6 KiB
153 lines
4.6 KiB
# This example demonstrates how to use a constraint polygon in Delaunay
|
|
# triangulation.
|
|
#
|
|
package require vtk
|
|
package require vtkinteraction
|
|
package require vtktesting
|
|
|
|
# Generate the input points and constrained edges/polygons.
|
|
#
|
|
vtkPoints points
|
|
points InsertPoint 0 1 4 0
|
|
points InsertPoint 1 3 4 0
|
|
points InsertPoint 2 7 4 0
|
|
points InsertPoint 3 11 4 0
|
|
points InsertPoint 4 13 4 0
|
|
points InsertPoint 5 13 8 0
|
|
points InsertPoint 6 13 12 0
|
|
points InsertPoint 7 10 12 0
|
|
points InsertPoint 8 7 12 0
|
|
points InsertPoint 9 4 12 0
|
|
points InsertPoint 10 1 12 0
|
|
points InsertPoint 11 1 8 0
|
|
points InsertPoint 12 3.5 5 0
|
|
points InsertPoint 13 4.5 5 0
|
|
points InsertPoint 14 5.5 8 0
|
|
points InsertPoint 15 6.5 8 0
|
|
points InsertPoint 16 6.5 5 0
|
|
points InsertPoint 17 7.5 5 0
|
|
points InsertPoint 18 7.5 8 0
|
|
points InsertPoint 19 9 8 0
|
|
points InsertPoint 20 9 5 0
|
|
points InsertPoint 21 10 5 0
|
|
points InsertPoint 22 10 7 0
|
|
points InsertPoint 23 11 5 0
|
|
points InsertPoint 24 12 5 0
|
|
points InsertPoint 25 10.5 8 0
|
|
points InsertPoint 26 12 11 0
|
|
points InsertPoint 27 11 11 0
|
|
points InsertPoint 28 10 9 0
|
|
points InsertPoint 29 10 11 0
|
|
points InsertPoint 30 9 11 0
|
|
points InsertPoint 31 9 9 0
|
|
points InsertPoint 32 7.5 9 0
|
|
points InsertPoint 33 7.5 11 0
|
|
points InsertPoint 34 6.5 11 0
|
|
points InsertPoint 35 6.5 9 0
|
|
points InsertPoint 36 5 9 0
|
|
points InsertPoint 37 4 6 0
|
|
points InsertPoint 38 3 9 0
|
|
points InsertPoint 39 2 9 0
|
|
vtkCellArray polys
|
|
polys InsertNextCell 12
|
|
polys InsertCellPoint 0
|
|
polys InsertCellPoint 1
|
|
polys InsertCellPoint 2
|
|
polys InsertCellPoint 3
|
|
polys InsertCellPoint 4
|
|
polys InsertCellPoint 5
|
|
polys InsertCellPoint 6
|
|
polys InsertCellPoint 7
|
|
polys InsertCellPoint 8
|
|
polys InsertCellPoint 9
|
|
polys InsertCellPoint 10
|
|
polys InsertCellPoint 11
|
|
polys InsertNextCell 28
|
|
polys InsertCellPoint 39
|
|
polys InsertCellPoint 38
|
|
polys InsertCellPoint 37
|
|
polys InsertCellPoint 36
|
|
polys InsertCellPoint 35
|
|
polys InsertCellPoint 34
|
|
polys InsertCellPoint 33
|
|
polys InsertCellPoint 32
|
|
polys InsertCellPoint 31
|
|
polys InsertCellPoint 30
|
|
polys InsertCellPoint 29
|
|
polys InsertCellPoint 28
|
|
polys InsertCellPoint 27
|
|
polys InsertCellPoint 26
|
|
polys InsertCellPoint 25
|
|
polys InsertCellPoint 24
|
|
polys InsertCellPoint 23
|
|
polys InsertCellPoint 22
|
|
polys InsertCellPoint 21
|
|
polys InsertCellPoint 20
|
|
polys InsertCellPoint 19
|
|
polys InsertCellPoint 18
|
|
polys InsertCellPoint 17
|
|
polys InsertCellPoint 16
|
|
polys InsertCellPoint 15
|
|
polys InsertCellPoint 14
|
|
polys InsertCellPoint 13
|
|
polys InsertCellPoint 12
|
|
|
|
vtkPolyData polyData
|
|
polyData SetPoints points
|
|
polyData SetPolys polys
|
|
|
|
# Notice this trick. The SetInput() method accepts a vtkPolyData that is also
|
|
# the input to the Delaunay filter. The points of the vtkPolyData are used
|
|
# to generate the triangulation; the polygons are used to create a constraint
|
|
# region. The polygons are very carefully created and ordered in the right
|
|
# direction to indicate inside and outside of the polygon.
|
|
#
|
|
vtkDelaunay2D del
|
|
del SetInput polyData
|
|
del SetSource polyData
|
|
vtkPolyDataMapper mapMesh
|
|
mapMesh SetInputConnection [del GetOutputPort]
|
|
vtkActor meshActor
|
|
meshActor SetMapper mapMesh
|
|
|
|
# Now we just pretty the mesh up with tubed edges and balls at the vertices.
|
|
vtkExtractEdges extract
|
|
extract SetInputConnection [del GetOutputPort]
|
|
vtkTubeFilter tubes
|
|
tubes SetInputConnection [extract GetOutputPort]
|
|
tubes SetRadius 0.1
|
|
tubes SetNumberOfSides 6
|
|
vtkPolyDataMapper mapEdges
|
|
mapEdges SetInputConnection [tubes GetOutputPort]
|
|
vtkActor edgeActor
|
|
edgeActor SetMapper mapEdges
|
|
eval [edgeActor GetProperty] SetColor $peacock
|
|
[edgeActor GetProperty] SetSpecularColor 1 1 1
|
|
[edgeActor GetProperty] SetSpecular 0.3
|
|
[edgeActor GetProperty] SetSpecularPower 20
|
|
[edgeActor GetProperty] SetAmbient 0.2
|
|
[edgeActor GetProperty] SetDiffuse 0.8
|
|
|
|
# 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 meshActor
|
|
ren1 AddActor edgeActor
|
|
ren1 SetBackground 0 0 0
|
|
renWin SetSize 450 300
|
|
|
|
# render the image
|
|
#
|
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
|
ren1 ResetCamera
|
|
[ren1 GetActiveCamera] Zoom 2
|
|
iren Initialize
|
|
|
|
# prevent the tk window from showing up then start the event loop
|
|
wm withdraw .
|
|
|