source: trunk/packages/vizservers/nanovis/NvVectorField.cpp @ 2837

Last change on this file since 2837 was 2835, checked in by ldelgass, 12 years ago

Exclude unused file from build, misc. cleanups

  • Property svn:eol-style set to native
File size: 7.6 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2#include "nanovis.h"
3
4#include "NvVectorField.h"
5#include "NvParticleRenderer.h"
6
7NvVectorField::NvVectorField() :
8    _vectorFieldId(0),
9    _activated(true),
10    _scaleX(1),
11    _scaleY(1),
12    _scaleZ(1),
13    _max(1)
14{
15    _deviceVisible = false;
16    _volPtr = 0;
17    _physicalSize.set(1.0f, 1.0f, 1.0f);
18}
19
20NvVectorField::~NvVectorField()
21{
22    std::map<std::string, NvParticleRenderer *>::iterator iter;
23    for (iter = _particleRendererMap.begin();
24         iter != _particleRendererMap.end(); iter++) {
25        delete (*iter).second;
26    }
27}
28
29void
30NvVectorField::setVectorField(Volume *volPtr, const Vector3& ori,
31                              float scaleX, float scaleY, float scaleZ,
32                              float max)
33{
34    _volPtr = volPtr;
35    _origin = ori;
36    _scaleX = scaleX;
37    _scaleY = scaleY;
38    _scaleZ = scaleZ;
39    _max = max;
40    _vectorFieldId = volPtr->id;
41    _physicalMin = volPtr->getPhysicalBBoxMin();
42    TRACE("_pysicalMin %f %f %f\n", _physicalMin.x, _physicalMin.y, _physicalMin.z);
43    _physicalSize = volPtr->getPhysicalBBoxMax() - _physicalMin;
44    TRACE("_pysicalSize %f %f %f\n",
45           _physicalSize.x, _physicalSize.y, _physicalSize.z);
46}
47
48void
49NvVectorField::addDeviceShape(const std::string& name,
50                              const NvDeviceShape& shape)
51{
52    _shapeMap[name] = shape;
53}
54
55void NvVectorField::removeDeviceShape(const std::string& name)
56{
57    std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name);
58    if (iter != _shapeMap.end()) _shapeMap.erase(iter);
59}
60
61void NvVectorField::initialize()
62{
63    std::map<std::string, NvParticleRenderer *>::iterator iter;
64    for (iter = _particleRendererMap.begin();
65         iter != _particleRendererMap.end(); iter++) {
66        if ((*iter).second) (*iter).second->initialize();
67    }
68}
69
70void NvVectorField::reset()
71{
72    std::map<std::string, NvParticleRenderer *>::iterator iter;
73    for (iter = _particleRendererMap.begin();
74         iter != _particleRendererMap.end(); iter++) {
75        if ((*iter).second) (*iter).second->reset();
76    }
77}
78
79void NvVectorField::setPlaneAxis(const std::string& name, int axis)
80{
81    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
82    if (iter != _particleRendererMap.end()) {
83        (*iter).second->setAxis(axis);
84    }
85   
86}
87
88void NvVectorField::setPlanePos(const std::string& name, float pos)
89{
90    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
91    if (iter != _particleRendererMap.end()) {
92        (*iter).second->setPos(pos);
93    }
94}
95
96void NvVectorField::addPlane(const std::string& name)
97{
98    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
99    NvParticleRenderer *renderer = NULL;
100    if (iter != _particleRendererMap.end()) {
101        if ((*iter).second != 0) {
102            renderer = (*iter).second;
103        } else {
104            renderer = (*iter).second = new NvParticleRenderer(NMESH, NMESH, g_context);
105        }
106    } else {
107        renderer = new NvParticleRenderer(NMESH, NMESH, g_context);
108        _particleRendererMap[name] = renderer;
109    }
110
111    renderer->setVectorField(_vectorFieldId, _origin, _scaleX, _scaleY, _scaleZ, _max);
112    if (renderer) {
113        renderer->initialize();
114    }
115}
116
117void NvVectorField::removePlane(const std::string& name)
118{
119    std::map<std::string, NvParticleRenderer* >::iterator iter = _particleRendererMap.find(name);
120    if (iter != _particleRendererMap.end()) {
121        delete (*iter).second;
122        _particleRendererMap.erase(iter);
123    }
124}
125
126void NvVectorField::activatePlane(const std::string& name)
127{
128    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
129    if (iter != _particleRendererMap.end()) {
130        (*iter).second->active(true);
131    }
132}
133
134void NvVectorField::deactivatePlane(const std::string& name)
135{
136    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
137    if (iter != _particleRendererMap.end()) {
138        (*iter).second->active(false);
139    }
140}
141
142void NvVectorField::setParticleColor(const std::string& name, const Vector4& color)
143{
144    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
145    if (iter != _particleRendererMap.end()) {
146        (*iter).second->setColor(color);
147    }
148}
149
150void NvVectorField::setParticleColor(const std::string& name, float r, float g, float b, float a)
151{
152    std::map<std::string, NvParticleRenderer *>::iterator iter = _particleRendererMap.find(name);
153    if (iter != _particleRendererMap.end()) {
154        if ((*iter).second) (*iter).second->setColor(Vector4(r,g,b,a));
155    }
156}
157
158void NvVectorField::advect()
159{
160    std::map<std::string, NvParticleRenderer *>::iterator iter;
161    for (iter = _particleRendererMap.begin();
162         iter != _particleRendererMap.end(); ++iter) {
163        if ((*iter).second && (*iter).second->active())
164            (*iter).second->advect();
165    }
166}
167
168void NvVectorField::render()
169{
170    std::map<std::string, NvParticleRenderer *>::iterator iter;
171    for (iter = _particleRendererMap.begin();
172         iter != _particleRendererMap.end(); ++iter) {
173        if ((*iter).second && (*iter).second->active()) {
174            (*iter).second->render();
175        }
176    }
177    if (_deviceVisible) {
178        drawDeviceShape();
179    }
180}
181
182void
183NvVectorField::drawDeviceShape()
184{
185    glPushMatrix();
186    glEnable(GL_DEPTH_TEST);
187    glDisable(GL_TEXTURE_2D);
188    glEnable(GL_BLEND);
189
190    float x0, y0, z0, x1, y1, z1;
191    std::map<std::string, NvDeviceShape>::iterator iterShape;
192   
193    glPushMatrix();
194    glTranslatef(_origin.x, _origin.y, _origin.z);
195    glScaled(_scaleX, _scaleY, _scaleZ);
196    for (iterShape = _shapeMap.begin(); iterShape != _shapeMap.end();
197         ++iterShape) {
198        NvDeviceShape& shape = (*iterShape).second;
199       
200        if (!shape.visible) continue;
201       
202       
203        glColor4d(shape.color.x, shape.color.y, shape.color.z, shape.color.w);
204#if 0
205        x0 = _physicalMin.x + (shape.min.x - _physicalMin.x) / _physicalSize.x;
206        y0 = _physicalMin.y + (shape.min.y - _physicalMin.y) / _physicalSize.y;
207        z0 = _physicalMin.z + (shape.min.z - _physicalMin.z) / _physicalSize.z;
208        x1 = _physicalMin.x + (shape.max.x - _physicalMin.x) / _physicalSize.x;
209        y1 = _physicalMin.y + (shape.max.y - _physicalMin.y) / _physicalSize.y;
210        z1 = _physicalMin.z + (shape.max.z - _physicalMin.z) / _physicalSize.z;
211#endif
212        x0 = (shape.min.x - _physicalMin.x) / _physicalSize.x;
213        y0 = (shape.min.y - _physicalMin.y) / _physicalSize.y;
214        z0 = (shape.min.z - _physicalMin.z) / _physicalSize.z;
215        x1 = (shape.max.x - _physicalMin.x) / _physicalSize.x;
216        y1 = (shape.max.y - _physicalMin.y) / _physicalSize.y;
217        z1 = (shape.max.z - _physicalMin.z) / _physicalSize.z;
218       
219        glLineWidth(1.2);
220        glBegin(GL_LINE_LOOP);
221        {
222            glVertex3d(x0, y0, z0);
223            glVertex3d(x1, y0, z0);
224            glVertex3d(x1, y1, z0);
225            glVertex3d(x0, y1, z0);
226        }
227        glEnd();
228        glBegin(GL_LINE_LOOP);
229        {
230            glVertex3d(x0, y0, z1);
231            glVertex3d(x1, y0, z1);
232            glVertex3d(x1, y1, z1);
233            glVertex3d(x0, y1, z1);
234        }
235        glEnd();
236       
237        glBegin(GL_LINE_LOOP);
238        {
239            glVertex3d(x0, y0, z0);
240            glVertex3d(x0, y0, z1);
241            glVertex3d(x0, y1, z1);
242            glVertex3d(x0, y1, z0);
243        }
244        glEnd();
245       
246        glBegin(GL_LINE_LOOP);
247        {
248            glVertex3d(x1, y0, z0);
249            glVertex3d(x1, y0, z1);
250            glVertex3d(x1, y1, z1);
251            glVertex3d(x1, y1, z0);
252        }
253        glEnd();
254    }
255    glPopMatrix();
256   
257    glPopMatrix();
258    glDisable(GL_DEPTH_TEST);
259    glDisable(GL_BLEND);
260    glEnable(GL_TEXTURE_2D);
261}
262
263void
264NvVectorField::activateDeviceShape(const std::string& name)
265{
266    std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name);
267    if (iter != _shapeMap.end()) {
268        (*iter).second.visible = true;
269    }
270}
271
272void
273NvVectorField::deactivateDeviceShape(const std::string& name)
274{
275    std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name);
276    if (iter != _shapeMap.end()) {
277        (*iter).second.visible = false;
278    }
279}
Note: See TracBrowser for help on using the repository browser.