File: programmable_pipeline2.py

package info (click to toggle)
vtk7 7.1.1%2Bdfsg2-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 127,396 kB
  • sloc: cpp: 1,539,584; ansic: 124,382; python: 78,038; tcl: 47,013; xml: 8,142; yacc: 5,040; java: 4,439; perl: 3,132; lex: 1,926; sh: 1,500; makefile: 126; objc: 83
file content (140 lines) | stat: -rw-r--r-- 4,287 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/usr/bin/env python
"""
This file demonstrates the creation of a directed graph using the
Python interface to VTK.
"""

from vtk import *
from sys import exit

xdim = 400
ydim = 400

#------------------------------------------------------------------------------
# Script Entry Point
#------------------------------------------------------------------------------
if __name__ == "__main__":

    #----------------------------------------------------------
    # Create a graph (see graph1.py for explanations)
    G1 = vtkMutableDirectedGraph()
    vertID1 = vtkIntArray()
    vertID1.SetName("ID")
    G1.GetVertexData().AddArray( vertID1 )
    G1.GetVertexData().SetPedigreeIds( vertID1 )
    for i in range(10):
        G1.AddVertex()
        vertID1.InsertNextValue(i)
    for i in range(10):
        G1.AddGraphEdge(i, (i+1)%10)

    #----------------------------------------------------------
    # Create a second graph
    # - This one is a triangle, with one node's pedigree id field
    #   ID matching one of the vertices from G1.  These nodes will
    #   be combined as the same node when merge is run.
    vertID2 = vtkIntArray()
    G2 = vtkMutableDirectedGraph()
    vertID2 = vtkIntArray()
    vertID2.SetName("ID")
    G2.GetVertexData().AddArray(vertID2)
    G2.GetVertexData().SetPedigreeIds(vertID2)
    G2.AddVertex()
    vertID2.InsertNextValue(3)
    G2.AddVertex()
    vertID2.InsertNextValue(20)
    G2.AddVertex()
    vertID2.InsertNextValue(21)
    G2.AddGraphEdge(0,1)
    G2.AddGraphEdge(0,2)
    G2.AddGraphEdge(1,2)

    #----------------------------------------------------------
    # First Programmable Filter -- Add integer field to vertices
    # with a 1 for every vertex into G1
    G1_labeled = vtkProgrammableFilter()
    G1_labeled.AddInputData( G1 )

    def vertex_labeler_g1():
        input = G1_labeled.GetInput()
        output = G1_labeled.GetOutput()
        output.ShallowCopy(input)
        varray = vtkIntArray()
        varray.SetName("color")

        varray.SetNumberOfTuples( output.GetNumberOfVertices() )
        for i in range( output.GetNumberOfVertices() ):
            varray.SetValue(i, 1)

        output.GetVertexData().AddArray(varray)

    G1_labeled.SetExecuteMethod( vertex_labeler_g1 )



    #----------------------------------------------------------
    # Second Programmable Filter -- Add integer field to vertices
    # with a 2 for every vertex into G2
    G2_labeled = vtkProgrammableFilter()
    G2_labeled.AddInputData( G2 )

    def vertex_labeler_g2():
        input = G2_labeled.GetInput()
        output = G2_labeled.GetOutput()
        output.ShallowCopy(input)
        varray = vtkIntArray()
        varray.SetName("color")

        varray.SetNumberOfTuples( output.GetNumberOfVertices() )
        for i in range( output.GetNumberOfVertices() ):
            varray.SetValue(i, 2)

        output.GetVertexData().AddArray(varray)

    G2_labeled.SetExecuteMethod( vertex_labeler_g2 )


    #----------------------------------------------------------
    # Merge graphs takes two graphs on input ports 0 and 1.
    # and combines them according to the pedigree id field.
    merge = vtkMergeGraphs()
    merge.SetInputConnection(0, G1_labeled.GetOutputPort() )
    merge.SetInputConnection(1, G2_labeled.GetOutputPort() )
    merge.Update()



    #----------------------------------------------------------
    # Draw the graph in a window
    theme = vtkViewTheme.CreateMellowTheme()
    theme.SetLineWidth(4)
    theme.SetPointSize(15)
    theme.SetCellOpacity(1)
    theme.FastDelete()

    # Rendered graph representation to make vertices circles
    rep = vtkRenderedGraphRepresentation(  )
    rep.SetInputConnection(0, merge.GetOutputPort())

    # vtkGraphToGlyph::CIRCLE == 7
    rep.SetGlyphType(7)

    # View containing the merged graph
    view = vtkGraphLayoutView()
    view.SetRepresentation( rep )
    view.SetVertexLabelArrayName("ID")
    view.SetVertexColorArrayName("color")
    view.SetVertexLabelVisibility(True)
    view.SetColorVertices(True)
    view.SetLayoutStrategyToSimple2D()
    view.SetVertexLabelFontSize(20)
    view.ApplyViewTheme(theme)



    view.GetRenderWindow().SetSize(xdim, ydim)
    view.ResetCamera()
    view.Render()


    view.GetInteractor().Start()