File: tables_adv.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 (139 lines) | stat: -rw-r--r-- 4,433 bytes parent folder | download | duplicates (7)
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
#!/usr/bin/env python
"""
This file contains Python code illustrating the creation and manipulation of
vtkTable objects.
"""

from __future__ import print_function
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.")