source: trunk/packages/vizservers/nanovis/NvFlowVisRenderer.cpp @ 1370

Last change on this file since 1370 was 1370, checked in by vrinside, 16 years ago

improving the flow vis engine

  • particle advection for multiple vector field
  • specifying multiple advection planes
  • specifying the position of a particle injection plane
  • specifying the axis of a particle injection plane
  • specifying the visibility of particle injection planes
  • specifying the particle color for each particle injection plane
  • rendering device shapes

[NOTE] Currently, I commented out with the MACRO NEW_FLOW_ENGINE in config
To use this, please comment NEW_FLOW_ENGINE in

File size: 7.7 KB
Line 
1
2/*
3 * ----------------------------------------------------------------------
4 * NvFlowVisRenderer.cpp: particle system class
5 *
6 * ======================================================================
7 *  AUTHOR:  Wei Qiao <qiaow@purdue.edu>
8 *           Purdue Rendering and Perceptualization Lab (PURPL)
9 *
10 *  Copyright (c) 2004-2006  Purdue Research Foundation
11 *
12 *  See the file "license.terms" for information on usage and
13 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14 * ======================================================================
15 */
16
17#include <stdio.h>
18#include <assert.h>
19#include <malloc.h>
20#include <string.h>
21
22#include <R2/R2FilePath.h>
23#include "NvFlowVisRenderer.h"
24#include "NvVectorField.h"
25#include <Trace.h>
26
27
28#define NV_32
29
30NvFlowVisRenderer::NvFlowVisRenderer(int w, int h, CGcontext context) :
31    _activated(true)
32{
33        _psys_width = w;
34        _psys_height = h;
35
36/*
37        licRenderer[0] = new NvLIC(NMESH, NPIX, NPIX, 0,
38                                Vector3(0, 0, 0), g_context);
39        licRenderer[1] = new NvLIC(NMESH, NPIX, NPIX, 1,
40                                Vector3(0, 0, 0), g_context);
41        licRenderer[2] = new NvLIC(NMESH, NPIX, NPIX, 2,
42                                Vector3(0, 0, 0), g_context);
43*/
44}
45
46NvFlowVisRenderer::~NvFlowVisRenderer()
47{
48        std::map<std::string, NvVectorField*>::iterator iter;
49        for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter)
50        {
51                delete (*iter).second;
52        }
53
54/*
55        for (int i = 0; i < 3; ++i)
56        {
57                delete licRenderer[i];
58        }
59*/
60}
61
62void
63NvFlowVisRenderer::initialize()
64{
65        std::map<std::string, NvVectorField*>::iterator iter;
66        for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter)
67        {
68                (*iter).second->initialize();
69        }
70}
71
72void
73NvFlowVisRenderer::reset()
74{
75        std::map<std::string, NvVectorField*>::iterator iter;
76        for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter)
77        {
78                (*iter).second->reset();
79        }
80}
81
82void
83NvFlowVisRenderer::initialize(const std::string& vfName)
84{
85        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
86        if (iter != _vectorFieldMap.end())
87        {
88                if ((*iter).second)
89                {
90                        (*iter).second->initialize();
91                }
92        }
93}
94
95void
96NvFlowVisRenderer::advect()
97{
98        std::map<std::string, NvVectorField*>::iterator iter;
99        for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter)
100        {
101                if((*iter).second && (*iter).second->isActivated()) (*iter).second->advect();
102        }
103}
104
105void
106NvFlowVisRenderer::render()
107{
108        std::map<std::string, NvVectorField*>::iterator iter;
109        for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter)
110        {
111                if((*iter).second && (*iter).second->isActivated()) (*iter).second->render();
112        }
113}
114
115void
116NvFlowVisRenderer::addVectorField(const std::string& vfName, Volume* volPtr, const Vector3& ori, float scaleX, float scaleY, float scaleZ, float max)
117{
118        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
119        if (iter != _vectorFieldMap.end())
120        {
121                if ((*iter).second)
122                {
123                        ((*iter).second)->setVectorField(volPtr, ori, scaleX, scaleY, scaleZ, max);
124                }
125                else
126                {
127                        NvVectorField* vf = new NvVectorField();
128                        _vectorFieldMap[vfName] = vf;
129                        vf->setVectorField(volPtr, ori, scaleX, scaleY, scaleZ, max);
130                }
131        }
132        else
133        {
134                NvVectorField* vf = new NvVectorField();
135                _vectorFieldMap[vfName] = vf;
136                vf->setVectorField(volPtr, ori, scaleX, scaleY, scaleZ, max);
137               
138        }
139}
140
141void
142NvFlowVisRenderer::activateVectorField(const std::string& vfName)
143{
144        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
145        if (iter != _vectorFieldMap.end())
146                if ((*iter).second) (*iter).second->activate();
147}
148
149void
150NvFlowVisRenderer::deactivateVectorField(const std::string& vfName)
151{
152        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
153        if (iter != _vectorFieldMap.end())
154                if ((*iter).second) (*iter).second->deactivate();
155}
156
157void
158NvFlowVisRenderer::activatePlane(const std::string& vfName, const std::string& name)
159{
160        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
161        if (iter != _vectorFieldMap.end())
162        {
163                if ((*iter).second) (*iter).second->activatePlane(name);
164        }
165}
166
167void
168NvFlowVisRenderer::deactivatePlane(const std::string& vfName, const std::string& name)
169{
170        std::map<std::string, NvVectorField*>::iterator iter;
171
172        iter = _vectorFieldMap.find(vfName);
173        if (iter != _vectorFieldMap.end())
174        {
175                if ((*iter).second) (*iter).second->deactivatePlane(name);
176        }
177}
178
179void
180NvFlowVisRenderer::setPlaneAxis(const std::string& vfName, const std::string& planeName, int axis)
181{
182        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
183        if (iter != _vectorFieldMap.end())
184                if((*iter).second) (*iter).second->setPlaneAxis(planeName, axis);
185}
186
187void
188NvFlowVisRenderer::setPlanePos(const std::string& vfName, const std::string& name, float pos)
189{
190        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
191        if (iter != _vectorFieldMap.end())
192                if((*iter).second) (*iter).second->setPlanePos(name, pos);
193}
194
195void
196NvFlowVisRenderer::setParticleColor(const std::string& vfName, const std::string& name, const Vector4& color)
197{
198        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
199        if (iter != _vectorFieldMap.end())
200                if((*iter).second) (*iter).second->setParticleColor(name, color);
201}
202
203void
204NvFlowVisRenderer::removeVectorField(const std::string& vfName)
205{
206        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
207        if (iter != _vectorFieldMap.end())
208        {
209                delete (*iter).second;
210                _vectorFieldMap.erase(iter);
211        }
212}
213
214void
215NvFlowVisRenderer::addPlane(const std::string& vfName, const std::string& name)
216{
217        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
218        if (iter != _vectorFieldMap.end())
219        {
220                if ((*iter).second) (*iter).second->addPlane(name);
221        }
222}
223
224void
225NvFlowVisRenderer::removePlane(const std::string& vfName, const std::string& name)
226{
227        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
228        if (iter != _vectorFieldMap.end())
229        {
230                if ((*iter).second) (*iter).second->removePlane(name);
231        }
232}
233
234void
235NvFlowVisRenderer::activateDeviceShape(const std::string& vfName, const std::string& name)
236{
237        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
238        if (iter != _vectorFieldMap.end())
239        {
240                if ((*iter).second) (*iter).second->activateDeviceShape(name);
241        }
242}
243
244void
245NvFlowVisRenderer::deactivateDeviceShape(const std::string& vfName, const std::string& name)
246{
247        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
248        if (iter != _vectorFieldMap.end())
249        {
250                if ((*iter).second) (*iter).second->deactivateDeviceShape(name);
251        }
252}
253
254void
255NvFlowVisRenderer::activateDeviceShape(const std::string& vfName)
256{
257        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
258        if (iter != _vectorFieldMap.end())
259        {
260                if ((*iter).second) (*iter).second->activateDeviceShape();
261        }
262}
263
264void
265NvFlowVisRenderer::deactivateDeviceShape(const std::string& vfName)
266{
267        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
268        if (iter != _vectorFieldMap.end())
269        {
270                if ((*iter).second) (*iter).second->deactivateDeviceShape();
271        }
272}
273
274void
275NvFlowVisRenderer::addDeviceShape(const std::string& vfName, const std::string& name, const NvDeviceShape& shape)
276{
277        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
278        if (iter != _vectorFieldMap.end())
279        {
280                if ((*iter).second) (*iter).second->addDeviceShape(name, shape);
281        }
282}
283
284void
285NvFlowVisRenderer::removeDeviceShape(const std::string& vfName, const std::string& name)
286{
287        std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName);
288        if (iter != _vectorFieldMap.end())
289        {
290                if ((*iter).second) (*iter).second->removeDeviceShape(name);
291        }
292}
Note: See TracBrowser for help on using the repository browser.