File: tables_adv.py

package info (click to toggle)
vtk6 6.3.0%2Bdfsg1-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 118,532 kB
  • ctags: 138,251
  • sloc: cpp: 1,443,749; ansic: 113,395; python: 72,383; tcl: 46,998; xml: 8,127; yacc: 4,525; java: 4,239; perl: 3,108; lex: 1,694; sh: 1,093; asm: 471; makefile: 95; objc: 17
file content (138 lines) | stat: -rw-r--r-- 4,379 bytes parent folder | download | duplicates (3)
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
#!/usr/bin/env python
"""
This file contains Python code illustrating the creation and manipulation of
vtkTable objects.
"""

from vtk import *

#------------------------------------------------------------------------------
# Some Helper Functions
#------------------------------------------------------------------------------

def add_row_to_vtkTable(vtk_table, new_row=None):
    """ Python helper function to add a new row of data to a vtkTable object. """

    # Just a couple of sanity checks.
    if new_row == None:
        print "ERROR: No data provided for new table row."
        return False
    if len(new_row) != vtk_table.GetNumberOfColumns():
        print "ERROR: Number of entries in new row does not match # of columns in table."
        return False

    for i in range(vtk_table.GetNumberOfColumns()):
        vtk_table.GetColumn(i).InsertNextValue( new_row[i] )
    return True


def get_vtkTableHeaders(vtk_table):
    """ Returns the vtkTable headers (column names) as a Python list """
    headers = []
    for icol in range( vtk_table.GetNumberOfColumns() ):
        headers.append( vtk_table.GetColumn(icol).GetName() )
    return headers


def get_vtkTableRow(vtk_table, row_number):
    """ Returns a row from a vtkTable object as a Python list. """
    row = []
    for icol in range( vtk_table.GetNumberOfColumns() ):
        row.append( vtk_table.GetColumn(icol).GetValue(row_number) )
    return row


def get_vtkTableAsDelimitedText(vtk_table, sep="\t"):
    """ return a nicely formatted string version of a vtkTable """
    s    = ""
    hdrs = get_vtkTableHeaders(vtk_table)

    for i in hdrs:
        s += "%s%s"%(i,sep)
    s = s.rstrip(sep)
    s += "\n"

    for irow in range(vtk_table.GetNumberOfRows()):
        rowdata = get_vtkTableRow(vtk_table, irow)
        for i in rowdata:
            s += "%s%s"%(str(i),sep)
        s = s.rstrip(sep)
        s += "\n"
    return s



#------------------------------------------------------------------------------
# Script Entry Point (i.e., main() )
#------------------------------------------------------------------------------

if __name__ == "__main__":
    """ Main entry point of this python script """

    #----------------------------------------------------------
    # Create an empty table
    T = vtkTable()

    #----------------------------------------------------------
    # Create Column 1 (IDs)
    col1 = vtkIntArray()
    col1.SetName("ID")
    for i in range(1, 8):
        col1.InsertNextValue(i)
    T.AddColumn(col1)

    #----------------------------------------------------------
    # Create Column 2 (Names)
    namesList = ['Bob', 'Ann', 'Sue', 'Bill', 'Joe', 'Jill', 'Rick']
    col2 = vtkStringArray()
    col2.SetName("Name")
    for val in namesList:
        col2.InsertNextValue(val)
    T.AddColumn(col2)

    #----------------------------------------------------------
    # Create Column 3 (Ages)
    agesList = [12, 25, 72, 11, 31, 36, 32]
    col3 = vtkIntArray()
    col3.SetName("Age")
    for val in agesList:
        col3.InsertNextValue(val)
    T.AddColumn(col3)

    #----------------------------------------------------------
    # Add a row to the table
    new_row = [8, "Luis", 68]

    # we can't really use vtkTable.InsertNextRow() since it takes a vtkVariantArray
    # as its argument (and the SetValue, etc. methods on that are not wrapped into
    # Python) We can just append to each of the column arrays.

    if not add_row_to_vtkTable(T, new_row):
        print "Whoops!"

    #----------------------------------------------------------
    # Call PrintSelf() on a VTK object is done simply by printing the object
    print 25*"="
    print "Calling PrintSelf():"
    print T

    #----------------------------------------------------------

    # Here are a couple of ways to print out our table in Python using
    # the helper functions that appear earlier in this script.
    # The accessor methods used here can be adapted to do more interesting
    # things with a vtkTable from within Python.

    # print out our table
    print 25*"="
    print "Rows as lists:"
    print get_vtkTableHeaders(T)
    for i in range(T.GetNumberOfRows()):
        print get_vtkTableRow(T,i)

    print ""
    print 25*"="
    print "Delimited text:"
    print get_vtkTableAsDelimitedText(T)

    print "vtkTable Python Example Completed."