source: nanovis/trunk/FlowParticles.h @ 4795

Last change on this file since 4795 was 4056, checked in by ldelgass, 10 years ago

Use nv namespace for internal classes (not Rappture) to make it easier to find
dependencies on the Rappture libraries.

  • Property svn:eol-style set to native
File size: 2.0 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright (c) 2004-2013  HUBzero Foundation, LLC
4 *
5 * Authors:
6 *   Wei Qiao <qiaow@purdue.edu>
7 *   Insoo Woo <iwoo@purdue.edu>
8 *   George A. Howlett <gah@purdue.edu>
9 *   Leif Delgass <ldelgass@purdue.edu>
10 */
11#ifndef NV_FLOWPARTICLES_H
12#define NV_FLOWPARTICLES_H
13
14#include <cassert>
15#include <string>
16
17#include <tcl.h>
18
19#include <vrmath/Vector3f.h>
20
21#include "FlowTypes.h"
22#include "Switch.h"
23#include "ParticleRenderer.h"
24#include "Volume.h"
25
26namespace nv {
27
28struct FlowParticlesValues {
29    FlowPosition position;   ///< Position on axis of particle plane
30    FlowColor color;         ///< Color of particles
31    int isHidden;            ///< Is particle injection plane active
32    float particleSize;      ///< Size of the particles
33};
34
35class FlowParticles
36{
37public:
38    FlowParticles(const char *name);
39
40    ~FlowParticles();
41
42    const char *name() const
43    {
44        return _name.c_str();
45    }
46
47    bool visible() const
48    {
49        return !_sv.isHidden;
50    }
51
52    int parseSwitches(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv)
53    {
54        if (nv::ParseSwitches(interp, _switches, objc, objv, &_sv,
55                              SWITCH_DEFAULTS) < 0) {
56            return TCL_ERROR;
57        }
58        return TCL_OK;
59    }
60
61    void advect()
62    {
63        assert(_renderer->active());
64        _renderer->advect();
65    }
66
67    void render();
68
69    void reset()
70    {
71        _renderer->reset();
72    }
73
74    void initialize()
75    {
76        _renderer->initialize();
77    }
78
79    void setVectorField(Volume *volume)
80    {
81        _volume = volume;
82        _renderer->setVectorField(volume);
83    }
84
85    float getRelativePosition(FlowPosition *position);
86
87    bool configure();
88
89private:
90    /**
91     * Name of particle injection plane. Actual character string is
92     * stored in hash table.
93     */
94    std::string _name;
95    nv::ParticleRenderer *_renderer;        ///< Particle renderer
96    Volume *_volume;
97    FlowParticlesValues _sv;
98
99    static SwitchSpec _switches[];
100};
101
102}
103
104#endif
Note: See TracBrowser for help on using the repository browser.