Changeset 5402 for nanovis


Ignore:
Timestamp:
May 4, 2015, 3:37:51 AM (4 years ago)
Author:
ldelgass
Message:

Backport from trunk: make use of BBox

Location:
nanovis/branches/1.2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • nanovis/branches/1.2/Flow.cpp

    r4904 r5402  
    1414#include <tcl.h>
    1515
     16#include <vrmath/BBox.h>
    1617#include <vrmath/Vector3f.h>
    1718
     
    8586        return;
    8687
     88    BBox allBounds;
    8789    for (BoxHashmap::iterator itr = _boxTable.begin();
    8890         itr != _boxTable.end(); ++itr) {
    8991        FlowBox *box = itr->second;
    9092        if (!onlyVisible || box->visible()) {
    91             Vector3f fbmin, fbmax;
    92             box->getWorldSpaceBounds(fbmin, fbmax,
     93            BBox bbox;
     94            box->getWorldSpaceBounds(bbox.min, bbox.max,
    9395                                     getVolume());
    94             if (min.x > fbmin.x) {
    95                 min.x = fbmin.x;
    96             }
    97             if (max.x < fbmax.x) {
    98                 max.x = fbmax.x;
    99             }
    100             if (min.y > fbmin.y) {
    101                 min.y = fbmin.y;
    102             }
    103             if (max.y < fbmax.y) {
    104                 max.y = fbmax.y;
    105             }
    106             if (min.z > fbmin.z) {
    107                 min.z = fbmin.z;
    108             }
    109             if (max.z < fbmax.z) {
    110                 max.z = fbmax.z;
    111             }
     96            allBounds.extend(bbox);
    11297        }
    11398    }
     99    min = allBounds.min;
     100    max = allBounds.max;
    114101}
    115102
     
    359346                vm = sqrt(vx*vx + vy*vy + vz*vz);
    360347                dest[0] = vm / NanoVis::magMax;
    361                 dest[1] = vx /(2.0*NanoVis::magMax) + 0.5;
    362                 dest[2] = vy /(2.0*NanoVis::magMax) + 0.5;
    363                 dest[3] = vz /(2.0*NanoVis::magMax) + 0.5;
     348                dest[1] = vx /(2.0 * NanoVis::magMax) + 0.5;
     349                dest[2] = vy /(2.0 * NanoVis::magMax) + 0.5;
     350                dest[3] = vz /(2.0 * NanoVis::magMax) + 0.5;
    364351                values += 3;
    365352                dest += 4;
  • nanovis/branches/1.2/nanovis.cpp

    r5401 r5402  
    2525
    2626#include <graphics/RenderContext.h>
     27#include <vrmath/BBox.h>
    2728#include <vrmath/Vector3f.h>
    2829
     
    9091float NanoVis::zMin = FLT_MAX;
    9192float NanoVis::zMax = -FLT_MAX;
    92 Vector3f NanoVis::sceneMin, NanoVis::sceneMax;
     93BBox NanoVis::sceneBounds;
    9394
    9495VolumeRenderer *NanoVis::volRenderer = NULL;
     
    186187
    187188    _camera->z(def_eye.z / z);
     189    TRACE("set camera z to %f", _camera->z());
    188190
    189191    collectBounds();
    190     _camera->resetClippingRange(sceneMin, sceneMax);
    191 
    192     TRACE("set camera z to %f", _camera->z());
     192
     193    _camera->resetClippingRange(sceneBounds.min, sceneBounds.max);
    193194}
    194195
     
    223224
    224225    collectBounds();
    225     _camera->reset(sceneMin, sceneMax, resetOrientation);
     226    _camera->reset(sceneBounds.min, sceneBounds.max, resetOrientation);
    226227
    227228    def_eye = _camera->getPosition();
     
    717718}
    718719
     720/**
     721 * \brief Called when new volumes are added to update ranges
     722 */
    719723void
    720724NanoVis::setVolumeRanges()
    721725{
    722     double xMin, xMax, yMin, yMax, zMin, zMax, wMin, wMax;
    723 
    724726    TRACE("Enter");
    725     xMin = yMin = zMin = wMin = DBL_MAX;
    726     xMax = yMax = zMax = wMax = -DBL_MAX;
     727
     728    double xMin, xMax, yMin, yMax, zMin, zMax;
     729    xMin = yMin = zMin = DBL_MAX;
     730    xMax = yMax = zMax = -DBL_MAX;
     731    double valueMin = DBL_MAX, valueMax = -DBL_MAX;
    727732    VolumeHashmap::iterator itr;
    728733    for (itr = volumeTable.begin();
     
    747752            zMax = volume->zAxis.max();
    748753        }
    749         if (wMin > volume->wAxis.min()) {
    750             wMin = volume->wAxis.min();
    751         }
    752         if (wMax < volume->wAxis.max()) {
    753             wMax = volume->wAxis.max();
     754        if (valueMin > volume->wAxis.min()) {
     755            valueMin = volume->wAxis.min();
     756        }
     757        if (valueMax < volume->wAxis.max()) {
     758            valueMax = volume->wAxis.max();
    754759        }
    755760    }
     
    763768        grid->zAxis.setScale(zMin, zMax);
    764769    }
    765     if ((wMin < DBL_MAX) && (wMax > -DBL_MAX)) {
    766         Volume::valueMin = wMin;
    767         Volume::valueMax = wMax;
     770    if ((valueMin < DBL_MAX) && (valueMax > -DBL_MAX)) {
     771        Volume::valueMin = valueMin;
     772        Volume::valueMax = valueMax;
    768773    }
    769774    Volume::updatePending = false;
     
    771776}
    772777
     778/**
     779 * \brief Called when new heightmaps are added to update ranges
     780 */
    773781void
    774782NanoVis::setHeightmapRanges()
    775783{
    776     double xMin, xMax, yMin, yMax, zMin, zMax, wMin, wMax;
    777 
    778784    TRACE("Enter");
    779     xMin = yMin = zMin = wMin = DBL_MAX;
    780     xMax = yMax = zMax = wMax = -DBL_MAX;
     785
     786    double xMin, xMax, yMin, yMax, zMin, zMax;
     787    xMin = yMin = zMin = DBL_MAX;
     788    xMax = yMax = zMax = -DBL_MAX;
     789    double valueMin = DBL_MAX, valueMax = -DBL_MAX;
    781790    HeightMapHashmap::iterator itr;
    782791    for (itr = heightMapTable.begin();
     
    801810            zMax = heightMap->zAxis.max();
    802811        }
    803         if (wMin > heightMap->wAxis.min()) {
    804             wMin = heightMap->wAxis.min();
    805         }
    806         if (wMax < heightMap->wAxis.max()) {
    807             wMax = heightMap->wAxis.max();
     812        if (valueMin > heightMap->wAxis.min()) {
     813            valueMin = heightMap->wAxis.min();
     814        }
     815        if (valueMax < heightMap->wAxis.max()) {
     816            valueMax = heightMap->wAxis.max();
    808817        }
    809818    }
     
    817826        grid->zAxis.setScale(zMin, zMax);
    818827    }
    819     if ((wMin < DBL_MAX) && (wMax > -DBL_MAX)) {
    820         HeightMap::valueMin = grid->yAxis.min();
    821         HeightMap::valueMax = grid->yAxis.max();
     828    if ((valueMin < DBL_MAX) && (valueMax > -DBL_MAX)) {
     829        HeightMap::valueMin = valueMin;
     830        HeightMap::valueMax = valueMax;
    822831    }
    823832    for (HeightMapHashmap::iterator itr = heightMapTable.begin();
     
    839848    }
    840849
    841     sceneMin.set(FLT_MAX, FLT_MAX, FLT_MAX);
    842     sceneMax.set(-FLT_MAX, -FLT_MAX, -FLT_MAX);
     850    sceneBounds.makeEmpty();
    843851
    844852    for (VolumeHashmap::iterator itr = volumeTable.begin();
     
    849857            continue;
    850858
    851         Vector3f bmin, bmax;
    852         volume->getWorldSpaceBounds(bmin, bmax);
    853         if (bmin.x > bmax.x)
    854             continue;
    855 
    856         if (sceneMin.x > bmin.x) {
    857             sceneMin.x = bmin.x;
    858         }
    859         if (sceneMax.x < bmax.x) {
    860             sceneMax.x = bmax.x;
    861         }
    862         if (sceneMin.y > bmin.y) {
    863             sceneMin.y = bmin.y;
    864         }
    865         if (sceneMax.y < bmax.y) {
    866             sceneMax.y = bmax.y;
    867         }
    868         if (sceneMin.z > bmin.z) {
    869             sceneMin.z = bmin.z;
    870         }
    871         if (sceneMax.z < bmax.z) {
    872             sceneMax.z = bmax.z;
    873         }
     859        BBox bbox;
     860        volume->getWorldSpaceBounds(bbox.min, bbox.max);
     861        sceneBounds.extend(bbox);
    874862    }
    875863
     
    881869            continue;
    882870
    883         Vector3f bmin, bmax;
    884         heightMap->getWorldSpaceBounds(bmin, bmax);
    885         if (bmin.x > bmax.x)
    886             continue;
    887 
    888         if (sceneMin.x > bmin.x) {
    889             sceneMin.x = bmin.x;
    890         }
    891         if (sceneMax.x < bmax.x) {
    892             sceneMax.x = bmax.x;
    893         }
    894         if (sceneMin.y > bmin.y) {
    895             sceneMin.y = bmin.y;
    896         }
    897         if (sceneMax.y < bmax.y) {
    898             sceneMax.y = bmax.y;
    899         }
    900         if (sceneMin.z > bmin.z) {
    901             sceneMin.z = bmin.z;
    902         }
    903         if (sceneMax.z < bmax.z) {
    904             sceneMax.z = bmax.z;
    905         }
    906     }
    907 
    908     Vector3f flowMin, flowMax;
    909     getFlowBounds(flowMin, flowMax, onlyVisible);
    910     if (flowMin.x < flowMax.x) {
    911         if (sceneMin.x > flowMin.x) {
    912             sceneMin.x = flowMin.x;
    913         }
    914         if (sceneMax.x < flowMax.x) {
    915             sceneMax.x = flowMax.x;
    916         }
    917         if (sceneMin.y > flowMin.y) {
    918             sceneMin.y = flowMin.y;
    919         }
    920         if (sceneMax.y < flowMax.y) {
    921             sceneMax.y = flowMax.y;
    922         }
    923         if (sceneMin.z > flowMin.z) {
    924             sceneMin.z = flowMin.z;
    925         }
    926         if (sceneMax.z < flowMax.z) {
    927             sceneMax.z = flowMax.z;
    928         }
    929     }
    930 
    931     // TODO: Get Grid bounds
    932 
    933     if (sceneMin.x > sceneMax.x) {
    934         sceneMin.set(-0.5, -0.5, -0.5);
    935         sceneMax.set( 0.5,  0.5,  0.5);
     871        BBox bbox;
     872        heightMap->getWorldSpaceBounds(bbox.min, bbox.max);
     873        sceneBounds.extend(bbox);
     874    }
     875
     876    BBox bbox;
     877    getFlowBounds(bbox.min, bbox.max, onlyVisible);
     878    sceneBounds.extend(bbox);
     879
     880#if 0
     881    if (!onlyVisible || grid->isVisible()) {
     882        BBox bbox;
     883        grid->getBounds(bbox.min, bbox.max);
     884        sceneBounds.extend(bbox);
     885    }
     886#endif
     887
     888    if (sceneBounds.isEmpty()) {
     889        sceneBounds.min.set(-0.5, -0.5, -0.5);
     890        sceneBounds.max.set( 0.5,  0.5,  0.5);
    936891    }
    937892
    938893    TRACE("Scene bounds: (%g,%g,%g) - (%g,%g,%g)",
    939           sceneMin.x, sceneMin.y, sceneMin.z,
    940           sceneMax.x, sceneMax.y, sceneMax.z);
     894          sceneBounds.min.x, sceneBounds.min.y, sceneBounds.min.z,
     895          sceneBounds.max.x, sceneBounds.max.y, sceneBounds.max.z);
    941896}
    942897
     
    1013968}
    1014969
     970/**
     971 * \brief Called when new flows are added to update ranges
     972 */
    1015973bool
    1016974NanoVis::setFlowRanges()
     
    1028986         itr != flowTable.end(); ++itr) {
    1029987        Flow *flow = itr->second;
    1030         double min, max;
    1031988        if (!flow->isDataLoaded()) {
    1032989            continue;
    1033990        }
    1034991        Unirect3d *data = flow->data();
    1035         min = data->magMin();
    1036         max = data->magMax();
    1037         if (min < magMin) {
    1038             magMin = min;
     992        double range[2];
     993        range[0] = data->magMin();
     994        range[1] = data->magMax();
     995        if (range[0] < magMin) {
     996            magMin = range[0];
    1039997        }
    1040         if (max > magMax) {
    1041             magMax = max;
     998        if (range[1] > magMax) {
     999            magMax = range[1];
    10421000        }
    10431001        if (data->xMin() < xMin) {
     
    11321090NanoVis::advectFlows()
    11331091{
     1092    TRACE("Eneter");
    11341093    for (FlowHashmap::iterator itr = flowTable.begin();
    11351094         itr != flowTable.end(); ++itr) {
  • nanovis/branches/1.2/nanovis.h

    r5401 r5402  
    2525#include <GL/glew.h>
    2626
     27#include <vrmath/BBox.h>
    2728#include <vrmath/Vector3f.h>
    2829
     
    150151    static double magMin, magMax;
    151152    static float xMin, xMax, yMin, yMax, zMin, zMax;
    152     static vrmath::Vector3f sceneMin, sceneMax;
     153    static vrmath::BBox sceneBounds;
    153154
    154155    static VolumeRenderer *volRenderer;
Note: See TracChangeset for help on using the changeset viewer.