source: anuga_core/source/anuga/visualiser_new/visualiser.py @ 4579

Last change on this file since 4579 was 4365, checked in by jack, 18 years ago

More work on the traited visualiser. Not working yet.

File size: 2.6 KB
Line 
1from axes import Axes
2from enthought.traits.api import Any, false, HasTraits, Instance, List
3from features import Feature
4from threading import Thread
5from Tkinter import Tk, Button, Frame, N, E, S, W
6from vtk import vtkCellArray
7from vtk.tk.vtkTkRenderWidget import vtkTkRenderWidget
8
9class Visualiser(HasTraits, Thread):
10    '''Generic visualiser class'''
11    source = Any
12    features = List(Feature)
13    axes = Instance(Axes)
14    recording = false
15
16    def __init__(self, *args, **kwargs):
17        HasTraits.__init__(self, *args, **kwargs)
18        Thread.__init__(self)
19        self.vtk_cells = vtkCellArray()
20
21    def run(self):
22        self.setup_grid()
23        self.setup_gui()
24        self.tk_root.mainloop()
25
26    def setup_grid(self):
27        '''Populate the vtkCellArray instance at
28        self.vtk_cells. Subclasses are required to override this
29        function to read from their source as appropriate.
30        '''
31        raise NotImplementedError
32
33    def setup_gui(self):
34        self.tk_root = Tk()
35        self.tk_root.title("Visualisation")
36       
37        self.tk_renderWidget = vtkTkRenderWidget(self.tk_root, width=400, height=400)
38        self.tk_renderWidget.grid(row=0, column=0, sticky=N+S+E+W)
39        self.tk_root.grid_rowconfigure(0, weight=1)
40        self.tk_root.grid_columnconfigure(0, weight=3)
41
42        self.tk_featureFrame = Frame(self.tk_root)
43        self.tk_featureFrame.grid(row=0, column=1)
44
45        self.tk_controlFrame = Frame(self.tk_root)
46        self.tk_controlFrame.grid(row=1, column=0, columnspan=2)
47        self.tk_quit = Button(self.tk_controlFrame, text="Quit", command=self.shutdown)
48        self.tk_quit.grid(row=0, column=0)
49        self.tk_pause = Button(self.tk_controlFrame, text="Pause")
50        self.tk_pause.grid(row=0, column=1)
51        #TODO: Add record binding here
52        self.tk_record = Button(self.tk_controlFrame, text="Record")
53        self.tk_record.grid(row=0, column=2)
54        if self.recording == True:
55            self.tk_record.config(text="Stop Recording")
56
57        self.tk_customControlFrame = Frame(self.tk_root)
58        self.tk_customControlFrame.grid(row=2, column=0, columnspan=2)
59
60        self.tk_root.after(100, self.redraw)
61        self.tk_root.bind("<Destroy>", self.destroyed)
62
63    def destroyed(self, event):
64        if event.widget == self.tk_root:
65            self.shutdown()
66
67    def shutdown(self):
68        self.tk_root.withdraw()
69        self.tk_root.destroy()
70
71    def redraw(self):
72        self.tk_renderWidget.GetRenderWindow().Render()
73        self.tk_root.update_idletasks()
74        self.tk_root.after(100, self.redraw)
Note: See TracBrowser for help on using the repository browser.