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.
150 lines
4.2 KiB
150 lines
4.2 KiB
2 years ago
|
package require vtk
|
||
|
package require vtkinteraction
|
||
|
package require vtktesting
|
||
|
|
||
|
# Create a constrained Delaunay triangulation (i.e., edges and polygons defined)
|
||
|
|
||
|
# 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
|
||
|
|
||
|
# triangulate them
|
||
|
#
|
||
|
vtkDelaunay2D del1
|
||
|
del1 SetInput polyData
|
||
|
del1 SetSource polyData
|
||
|
vtkPolyDataMapper mapMesh
|
||
|
mapMesh SetInputConnection [del1 GetOutputPort]
|
||
|
vtkActor meshActor
|
||
|
meshActor SetMapper mapMesh
|
||
|
|
||
|
# tubes around mesh
|
||
|
vtkExtractEdges extract
|
||
|
extract SetInputConnection [del1 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 ResetCamera
|
||
|
ren1 SetBackground 0 0 0
|
||
|
renWin SetSize 450 300
|
||
|
|
||
|
# render the image
|
||
|
#
|
||
|
iren AddObserver UserEvent {wm deiconify .vtkInteract}
|
||
|
[ren1 GetActiveCamera] Zoom 2
|
||
|
iren Initialize
|
||
|
|
||
|
|
||
|
# prevent the tk window from showing up then start the event loop
|
||
|
wm withdraw .
|