Ignore:
Timestamp:
Aug 29, 2006, 12:50:43 PM (18 years ago)
Author:
jack
Message:

Added caching to the offline visualiser.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/visualiser/offline.py

    r3524 r3536  
    1313        Visualiser.__init__(self, source)
    1414
    15         self.frame_number = 0
     15        self.frameNumber = 0
    1616        fin = NetCDFFile(self.source, 'r')
    17         self.max_frame_number = fin.variables['time'].shape[0] - 1
     17        self.maxFrameNumber = fin.variables['time'].shape[0] - 1
    1818        fin.close()
     19
     20        self.vtk_heightQuantityCache = []
     21        for i in range(self.maxFrameNumber):
     22            self.vtk_heightQuantityCache.append({})
    1923
    2024    def setup_grid(self):
     
    2933
    3034    def update_height_quantity(self, quantityName, dynamic=True):
     35        polydata = self.vtk_polyData[quantityName] = vtkPolyData()
     36        if dynamic is True:
     37            if not self.vtk_heightQuantityCache[self.frameNumber].has_key(quantityName):
     38                self.vtk_heightQuantityCache[self.frameNumber][quantityName]\
     39                    = self.read_height_quantity(quantityName, True, self.frameNumber);
     40                print "Caching %s (frame %d)" % (quantityName, self.frameNumber)
     41            else:
     42                print "Using cache of %s (frame %d)" % (quantityName, self.frameNumber)
     43            polydata.SetPoints(self.vtk_heightQuantityCache[self.frameNumber][quantityName])
     44        else:
     45            polydata.SetPoints(self.read_height_quantity(quantityName, False))
     46        polydata.SetPolys(self.vtk_cells)
     47           
     48    def read_height_quantity(self, quantityName, dynamic=True, frameNumber=0):
     49        """Read in a height based quantity from the NetCDF source file
     50        and return a vtkPoints object. frameNumber is ignored if
     51        dynamic is false."""
    3152        fin = NetCDFFile(self.source, 'r')
    32         if(fin.variables.has_key(quantityName)):
    33             points = vtkPoints()
    34             if dynamic:
    35                 N_vert = fin.variables[quantityName].shape[1]
    36             else:
    37                 N_vert = len(fin.variables[quantityName])
    38             x = array(fin.variables['x'], Float)
    39             y = array(fin.variables['y'], Float)
    40             if dynamic is True:
    41                 q = array(fin.variables[quantityName][self.frame_number], Float)
    42             else:
    43                 q = array(fin.variables[quantityName], Float)
     53        points = vtkPoints()
     54        if dynamic is True:
     55            N_vert = fin.variables[quantityName].shape[1]
     56        else:
     57            N_vert = len(fin.variables[quantityName])
     58        x = array(fin.variables['x'], Float)
     59        y = array(fin.variables['y'], Float)
     60        if dynamic is True:
     61            q = array(fin.variables[quantityName][self.frameNumber], Float)
     62        else:
     63            q = array(fin.variables[quantityName], Float)
    4464
    45             q *= self.height_zScales[quantityName]
    46             q += self.height_offset[quantityName]
     65        q *= self.height_zScales[quantityName]
     66        q += self.height_offset[quantityName]
    4767
    48             for v in range(N_vert):
    49                 points.InsertNextPoint(x[v], y[v], q[v])
    50             polydata = self.vtk_polyData[quantityName] = vtkPolyData()
    51             polydata.SetPoints(points)
    52             polydata.SetPolys(self.vtk_cells)
    53         else:
    54             self.height_quantities.remove(quantityName)
     68        for v in range(N_vert):
     69            points.InsertNextPoint(x[v], y[v], q[v])
    5570        fin.close()
     71        return points
    5672
    5773    def setup_gui(self):
     
    7389
    7490    def restart(self):
    75         self.frame_number = 0
     91        self.frameNumber = 0
    7692        self.redraw_quantities(True)
    7793
    7894    def back10(self):
    79         if self.frame_number - 10 >= 0:
    80             self.frame_number -= 10
     95        if self.frameNumber - 10 >= 0:
     96            self.frameNumber -= 10
    8197        else:
    82             self.frame_number = 0
     98            self.frameNumber = 0
    8399        self.redraw_quantities(True)
    84100
    85101    def back(self):
    86         if self.frame_number > 0:
    87             self.frame_number -= 1
     102        if self.frameNumber > 0:
     103            self.frameNumber -= 1
    88104            self.redraw_quantities(True)
    89105
     
    92108
    93109    def forward(self):
    94         if self.frame_number < self.max_frame_number:
    95             self.frame_number += 1
     110        if self.frameNumber < self.maxFrameNumber:
     111            self.frameNumber += 1
    96112            self.redraw_quantities(True)
    97113
    98114    def forward10(self):
    99         if self.frame_number + 10 <= self.max_frame_number:
    100             self.frame_number += 10
     115        if self.frameNumber + 10 <= self.maxFrameNumber:
     116            self.frameNumber += 10
    101117        else:
    102             self.frame_number = self.max_frame_number
     118            self.frameNumber = self.maxFrameNumber
    103119        self.redraw_quantities(True)
Note: See TracChangeset for help on using the changeset viewer.