Changeset 3670


Ignore:
Timestamp:
Sep 26, 2006, 2:44:48 PM (18 years ago)
Author:
jack
Message:

Added axes support to the visualiser.

Location:
anuga_core/source/anuga
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/source/anuga/examples/sww_file_visualiser_example.py

    r3625 r3670  
    2727#                                                 (q['ymomentum'] ** 2)), 0, 10))
    2828
     29# Draw some axes on the visualiser so we can see how big the wave is
     30o.render_axes()
     31
    2932# Precaching the height-based quantities reduces the time taken to draw each
    3033# frame, but increases the time taken when the visualiser starts.
  • anuga_core/source/anuga/visualiser/offline.py

    r3622 r3670  
    2222        self.maxFrameNumber = fin.variables['time'].shape[0] - 1
    2323        fin.close()
     24
     25        self.xmin = None
     26        self.xmax = None
     27        self.ymin = None
     28        self.ymax = None
     29        self.zmin = None
     30        self.zmax = None
    2431
    2532        self.vtk_heightQuantityCache = []
     
    4956            polydata.SetPoints(self.read_height_quantity(quantityName, False))
    5057        polydata.SetPolys(self.vtk_cells)
     58
     59    def get_3d_bounds(self):
     60        return [self.xmin, self.xmax, self.ymin, self.ymax, self.zmin, self.zmax]
    5161           
    5262    def read_height_quantity(self, quantityName, dynamic=True, frameNumber=0):
     
    7282        for v in range(N_vert):
    7383            points.InsertNextPoint(x[v], y[v], q[v])
     84            if self.xmin == None or self.xmin > x[v]:
     85                self.xmin = x[v]
     86            if self.xmax == None or self.xmax < x[v]:
     87                self.xmax = x[v]
     88            if self.ymin == None or self.ymin > y[v]:
     89                self.ymin = y[v]
     90            if self.ymax == None or self.ymax < y[v]:
     91                self.ymax = y[v]
     92            if self.zmin == None or self.zmin > q[v]:
     93                self.zmin = q[v]
     94            if self.zmax == None or self.zmax < q[v]:
     95                self.zmax = q[v]
    7496        fin.close()
    7597        return points
  • anuga_core/source/anuga/visualiser/visualiser.py

    r3625 r3670  
    22from Tkinter import Tk, Button, Frame, N, E, S, W
    33from types import FunctionType, TupleType
    4 from vtk import vtkActor, vtkFloatArray, vtkPolyDataMapper, vtkRenderer
     4from vtk import vtkActor, vtkCubeAxesActor2D, vtkFloatArray, vtkPolyDataMapper, vtkRenderer
    55from vtk.tk.vtkTkRenderWidget import vtkTkRenderWidget
    66
     
    2424        # Structures used for VTK
    2525        self.vtk_actors = {}
     26        self.vtk_axesSet = False
     27        self.vtk_drawAxes = False
    2628        self.vtk_mappers = {}
    2729        self.vtk_polyData = {}
     30        self.vtk_renderer = vtkRenderer()
    2831
    2932        self.setup_gui()
     
    4548                self.update_height_quantity(q, self.height_dynamic[q])
    4649                self.draw_height_quantity(q)
    47 
     50        if self.vtk_drawAxes is True:
     51            self.vtk_axes.SetBounds(self.get_3d_bounds())
     52            if not self.vtk_axesSet:
     53                self.vtk_axesSet = True
     54                self.vtk_axes.SetCamera(self.vtk_renderer.GetActiveCamera())
     55                self.vtk_renderer.AddActor(self.vtk_axes)
     56       
    4857    # --- Height Based Rendering --- #
     58
     59    def render_axes(self):
     60        """Intstruct the visualiser to render cube axes around the render.
     61        """
     62        self.vtk_drawAxes = True
     63        self.vtk_axes = vtkCubeAxesActor2D()
     64       
     65    def get_axes(self):
     66        """Return the vtkCubeAxesActor2D object used to render the axes.
     67        This is to allow simple manipulation of the axes such as
     68        get_axes().SetNumberOfLabels(5) or similar.
     69        """
     70        return self.vtk_axes
    4971
    5072    def setup_grid(self):
     
    7597        pass
    7698
     99    def get_3d_bounds(self):
     100        """Get the minimum and maximum bounds for the x, y and z directions.
     101        Return as a list of double in the order (xmin, xmax, ymin, ymax, zmin, zmax),
     102        suitable for passing to vtkCubeAxesActor2D::SetRanges(). Subclasses are expected
     103        to override this function.
     104        """
     105        pass
    77106
    78107    def draw_height_quantity(self, quantityName):
     
    155184        self.tk_quit = Button(self.tk_controlFrame, text="Quit", command=self.shutdown)
    156185        self.tk_quit.grid(row=0, column=0, sticky=E+W)
    157         self.vtk_renderer = vtkRenderer()
    158186        self.tk_renderWidget.GetRenderWindow().AddRenderer(self.vtk_renderer)
    159187
Note: See TracChangeset for help on using the changeset viewer.