Skip to content

Commit

Permalink
Fixed #2785 - Wireframe renderer broken with CAM data
Browse files Browse the repository at this point in the history
  • Loading branch information
clyne committed Jul 14, 2021
1 parent df77cec commit 9e1d01c
Show file tree
Hide file tree
Showing 35 changed files with 298 additions and 255 deletions.
21 changes: 18 additions & 3 deletions apps/vaporgui/Statistics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,11 @@ bool Statistics::_calc3M(std::string varname)
std::vector<double> minExtent, maxExtent;
statsParams->GetBox()->GetExtents(minExtent, maxExtent);

CoordType minExtentCT = {0.0, 0.0, 0.0};
CoordType maxExtentCT = {0.0, 0.0, 0.0};
Grid::CopyToArr3(minExtent, minExtentCT);
Grid::CopyToArr3(maxExtent, maxExtentCT);

float c = 0.0;
float sum = 0.0;
float min = std::numeric_limits<float>::max();
Expand All @@ -655,7 +660,7 @@ bool Statistics::_calc3M(std::string varname)
Grid::ConstIterator endItr = grid->cend();
float missingVal = grid->GetMissingValue();

for (Grid::ConstIterator it = grid->cbegin(minExtent, maxExtent); it != endItr; ++it) {
for (Grid::ConstIterator it = grid->cbegin(minExtentCT, maxExtentCT); it != endItr; ++it) {
if (*it != missingVal) {
float val = *it;
min = min < val ? min : val;
Expand Down Expand Up @@ -699,14 +704,19 @@ bool Statistics::_calcMedian(std::string varname)
std::vector<double> minExtent, maxExtent;
statsParams->GetBox()->GetExtents(minExtent, maxExtent);

CoordType minExtentCT = {0.0, 0.0, 0.0};
CoordType maxExtentCT = {0.0, 0.0, 0.0};
Grid::CopyToArr3(minExtent, minExtentCT);
Grid::CopyToArr3(maxExtent, maxExtentCT);

std::vector<float> buffer;
for (int ts = minTS; ts <= maxTS; ts++) {
VAPoR::Grid *grid = currentDmgr->GetVariable(ts, varname, statsParams->GetRefinementLevel(), statsParams->GetCompressionLevel(), minExtent, maxExtent);
if (grid) {
Grid::ConstIterator endItr = grid->cend();
float missingVal = grid->GetMissingValue();

for (Grid::ConstIterator it = grid->cbegin(minExtent, maxExtent); it != endItr; ++it) {
for (Grid::ConstIterator it = grid->cbegin(minExtentCT, maxExtentCT); it != endItr; ++it) {
if (*it != missingVal) buffer.push_back(*it);
}
}
Expand Down Expand Up @@ -739,6 +749,11 @@ bool Statistics::_calcStddev(std::string varname)
std::vector<double> minExtent, maxExtent;
statsParams->GetBox()->GetExtents(minExtent, maxExtent);

CoordType minExtentCT = {0.0, 0.0, 0.0};
CoordType maxExtentCT = {0.0, 0.0, 0.0};
Grid::CopyToArr3(minExtent, minExtentCT);
Grid::CopyToArr3(maxExtent, maxExtentCT);

float c = 0.0;
float sum = 0.0;
long count = 0;
Expand All @@ -754,7 +769,7 @@ bool Statistics::_calcStddev(std::string varname)
if (grid) {
Grid::ConstIterator endItr = grid->cend();
float missingVal = grid->GetMissingValue();
for (Grid::ConstIterator it = grid->cbegin(minExtent, maxExtent); it != endItr; ++it) {
for (Grid::ConstIterator it = grid->cbegin(minExtentCT, maxExtentCT); it != endItr; ++it) {
if (*it != missingVal) {
float val = *it;
float y = (val - m3[2]) * (val - m3[2]) - c;
Expand Down
7 changes: 4 additions & 3 deletions include/vapor/ConstantGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,10 @@ class VDF_API ConstantGrid : public Grid {
//
std::vector<size_t> GetCoordDimensions(size_t) const override;
size_t GetGeometryDim() const override;
const DimsType GetNodeDimensions() const override;
const DimsType &GetNodeDimensions() const override;
const size_t GetNumNodeDimensions() const override;
const std::vector<size_t> &GetCellDimensions() const override;
const DimsType &GetCellDimensions() const override;
const size_t GetNumCellDimensions() const override;
void GetBoundingBox(const DimsType &min, const DimsType &max, CoordType &minu, CoordType &maxu) const override {}
bool GetEnclosingRegion(const CoordType &minu, const CoordType &maxu, DimsType &min, DimsType &max) const override { return (false); }
virtual void GetUserCoordinates(const DimsType &, CoordType &) const override {}
Expand All @@ -73,7 +74,7 @@ class VDF_API ConstantGrid : public Grid {
const size_t _topologyDim; // Not to be confused with _topologyDimension in
// the base Grid class, which is private to Grid.

mutable std::vector<size_t> _duplicate;
mutable VAPoR::DimsType _duplicate;

}; // end ConstantGrid class
}; // namespace VAPoR
Expand Down
4 changes: 2 additions & 2 deletions include/vapor/CurvilinearGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ class VDF_API CurvilinearGrid : public StructuredGrid {

private:
const CurvilinearGrid *_cg;
std::vector<size_t> _index;
std::vector<double> _coords;
DimsType _index;
CoordType _coords;
ConstIterator _xCoordItr;
ConstIterator _yCoordItr;
ConstIterator _zCoordItr;
Expand Down
61 changes: 35 additions & 26 deletions include/vapor/Grid.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,10 @@ class VDF_API Grid {
//
virtual size_t GetGeometryDim() const = 0;

virtual const DimsType GetNodeDimensions() const = 0;
virtual const DimsType &GetNodeDimensions() const = 0;
virtual const size_t GetNumNodeDimensions() const = 0;
virtual const std::vector<size_t> &GetCellDimensions() const = 0;
virtual const DimsType &GetCellDimensions() const = 0;
virtual const size_t GetNumCellDimensions() const = 0;

//! Return the ijk dimensions of grid in blocks
//!
Expand Down Expand Up @@ -799,29 +800,31 @@ class VDF_API Grid {
//
class InsideBox {
public:
InsideBox(const std::vector<double> &min, const std::vector<double> &max) : _min(min), _max(max) {}
InsideBox(const CoordType &min, const CoordType &max) : _min(min), _max(max) {}
InsideBox() {}

bool operator()(const std::vector<double> &pt) const
bool operator()(const CoordType &pt) const
{
if (_min == _max) return (true);
for (int i = 0; i < _min.size() && i < pt.size(); i++) {
if (pt[i] < _min[i] || pt[i] > _max[i]) return (false);
}
return (true);
}
bool operator()(const double pt[]) const
{
if (_min == _max) return (true);
for (int i = 0; i < _min.size(); i++) {
if (pt[i] < _min[i] || pt[i] > _max[i]) return (false);
}
return (true);
}

size_t Size() const { return (_min.size()); }
bool Enabled() const { return (_min != _max); }

private:
std::vector<double> _min;
std::vector<double> _max;
CoordType _min;
CoordType _max;
};

//
Expand Down Expand Up @@ -917,7 +920,7 @@ class VDF_API Grid {
//! N.B. Current only works with node coordinates
//!
//
typedef const std::vector<double> ConstCoordType;
typedef const CoordType ConstCoordType;
typedef Grid::PolyIterator<ConstCoordType> ConstCoordItr;
typedef Grid::AbstractIterator<ConstCoordType> ConstCoordItrAbstract;

Expand All @@ -931,7 +934,7 @@ class VDF_API Grid {
//! The ConstNodeIterator is dereferenced to give the index of
//! a node within the grid
//!
typedef const std::vector<size_t> ConstIndexType;
typedef const DimsType ConstIndexType;
typedef Grid::PolyIterator<ConstIndexType> ConstNodeIterator;
typedef Grid::AbstractIterator<ConstIndexType> ConstNodeIteratorAbstract;

Expand Down Expand Up @@ -971,14 +974,15 @@ class VDF_API Grid {
virtual std::unique_ptr<ConstNodeIteratorAbstract> clone() const { return std::unique_ptr<ConstNodeIteratorAbstract>(new ConstNodeIteratorSG(*this)); };

protected:
std::vector<size_t> _dims;
std::vector<size_t> _index;
std::vector<size_t> _lastIndex;
DimsType _dims;
size_t _nDims;
DimsType _index;
DimsType _lastIndex;
};

class ConstNodeIteratorBoxSG : public ConstNodeIteratorSG {
public:
ConstNodeIteratorBoxSG(const Grid *g, const std::vector<double> &minu, const std::vector<double> &maxu);
ConstNodeIteratorBoxSG(const Grid *g, const CoordType &minu, const CoordType &maxu);
ConstNodeIteratorBoxSG(const ConstNodeIteratorBoxSG &rhs);
ConstNodeIteratorBoxSG();

Expand All @@ -1004,7 +1008,7 @@ class VDF_API Grid {
//!
virtual ConstNodeIterator ConstNodeBegin() const { return ConstNodeIterator(std::unique_ptr<ConstNodeIteratorAbstract>(new ConstNodeIteratorSG(this, true))); }

virtual ConstNodeIterator ConstNodeBegin(const std::vector<double> &minu, const std::vector<double> &maxu) const
virtual ConstNodeIterator ConstNodeBegin(const CoordType &minu, const CoordType &maxu) const
{
return ConstNodeIterator(std::unique_ptr<ConstNodeIteratorAbstract>(new ConstNodeIteratorBoxSG(this, minu, maxu)));
}
Expand Down Expand Up @@ -1037,14 +1041,15 @@ class VDF_API Grid {
virtual std::unique_ptr<ConstCellIteratorAbstract> clone() const { return std::unique_ptr<ConstCellIteratorAbstract>(new ConstCellIteratorSG(*this)); };

protected:
std::vector<size_t> _dims;
std::vector<size_t> _index;
std::vector<size_t> _lastIndex;
DimsType _dims;
size_t _nDims;
DimsType _index;
DimsType _lastIndex;
};

class ConstCellIteratorBoxSG : public ConstCellIteratorSG {
public:
ConstCellIteratorBoxSG(const Grid *g, const std::vector<double> &minu, const std::vector<double> &maxu);
ConstCellIteratorBoxSG(const Grid *g, const CoordType &minu, const CoordType &maxu);
ConstCellIteratorBoxSG(const ConstCellIteratorBoxSG &rhs);
ConstCellIteratorBoxSG();

Expand Down Expand Up @@ -1075,7 +1080,7 @@ class VDF_API Grid {
//!
virtual ConstCellIterator ConstCellBegin() const { return ConstCellIterator(std::unique_ptr<ConstCellIteratorAbstract>(new ConstCellIteratorSG(this, true))); }

virtual ConstCellIterator ConstCellBegin(const std::vector<double> &minu, const std::vector<double> &maxu) const
virtual ConstCellIterator ConstCellBegin(const CoordType &minu, const CoordType &maxu) const
{
return ConstCellIterator(std::unique_ptr<ConstCellIteratorAbstract>(new ConstCellIteratorBoxSG(this, minu, maxu)));
}
Expand All @@ -1100,7 +1105,7 @@ class VDF_API Grid {
//
template<class T> class VDF_API ForwardIterator {
public:
ForwardIterator(T *rg, bool begin = true, const std::vector<double> &minu = {}, const std::vector<double> &maxu = {});
ForwardIterator(T *rg, bool begin = true, const CoordType &minu = {0.0,0.0,0.0}, const CoordType &maxu = {0.0,0.0,0.0});
ForwardIterator();
ForwardIterator(const ForwardIterator<T> &) = default;
ForwardIterator(ForwardIterator<T> &&rhs);
Expand Down Expand Up @@ -1143,12 +1148,12 @@ class VDF_API Grid {
private:
size_t _ndims;
std::vector<float *> _blks;
std::vector<size_t> _dims3d;
std::vector<size_t> _bdims3d;
std::vector<size_t> _bs3d;
DimsType _dims3d;
DimsType _bdims3d;
DimsType _bs3d;
size_t _blocksize;
ConstCoordItr _coordItr;
std::vector<size_t> _index; // current index into grid
DimsType _index; // current index into grid
size_t _indexL; // current index into grid
size_t _end_indexL; // Last valid index
size_t _xb; // x index within a block
Expand All @@ -1162,12 +1167,12 @@ class VDF_API Grid {
//! Construct a begin iterator that will iterate through elements
//! inside or on the box defined by \p minu and \p maxu
//
Iterator begin(const std::vector<double> &minu, const std::vector<double> &maxu) { return (Iterator(this, true, minu, maxu)); }
Iterator begin(const CoordType &minu, const CoordType &maxu) { return (Iterator(this, true, minu, maxu)); }
Iterator begin() { return (Iterator(this, true)); }

Iterator end() { return (Iterator(this, false)); }

ConstIterator cbegin(const std::vector<double> &minu, const std::vector<double> &maxu) const { return (ConstIterator(this, true, minu, maxu)); }
ConstIterator cbegin(const CoordType &minu, const CoordType &maxu) const { return (ConstIterator(this, true, minu, maxu)); }
ConstIterator cbegin() const { return (ConstIterator(this, true)); }

ConstIterator cend() const { return (ConstIterator(this, false)); }
Expand All @@ -1176,6 +1181,7 @@ class VDF_API Grid {
{
for (int i = 0; i < src.size() && i < dst.size(); i++) { dst[i] = src[i]; }
}

template<typename T> static void CopyToArr3(const T *src, size_t n, std::array<T, 3> &dst)
{
for (int i = 0; i < n && i < dst.size(); i++) { dst[i] = src[i]; }
Expand Down Expand Up @@ -1244,5 +1250,8 @@ class VDF_API Grid {

virtual void _getUserCoordinatesHelper(const std::vector<double> &coords, double &x, double &y, double &z) const;
};

template void Grid::CopyToArr3<size_t>(const std::vector<size_t> &src, std::array<size_t, 3> &dst);

}; // namespace VAPoR
#endif
2 changes: 1 addition & 1 deletion include/vapor/LayeredGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ class VDF_API LayeredGrid : public StructuredGrid {
private:
const LayeredGrid * _lg;
size_t _nElements2D;
std::vector<double> _coords;
CoordType _coords;
size_t _index2D;
ConstIterator _zCoordItr;
StretchedGrid::ConstCoordItr _itr2D;
Expand Down
13 changes: 7 additions & 6 deletions include/vapor/RegularGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,12 @@ class VDF_API RegularGrid : public StructuredGrid {
virtual std::unique_ptr<ConstCoordItrAbstract> clone() const { return std::unique_ptr<ConstCoordItrAbstract>(new ConstCoordItrRG(*this)); };

private:
std::vector<size_t> _index;
std::vector<size_t> _dims;
std::vector<double> _minu;
std::vector<double> _delta;
std::vector<double> _coords;
DimsType _index;
DimsType _dims;
size_t _nDims;
CoordType _minu;
CoordType _delta;
CoordType _coords;
};

virtual ConstCoordItr ConstCoordBegin() const override { return ConstCoordItr(std::unique_ptr<ConstCoordItrAbstract>(new ConstCoordItrRG(this, true))); }
Expand All @@ -123,7 +124,7 @@ class VDF_API RegularGrid : public StructuredGrid {
CoordType _minu = {{0.0, 0.0, 0.0}};
CoordType _maxu = {{0.0, 0.0, 0.0}};
size_t _geometryDim;
std::vector<double> _delta; // increment between grid points in user coords
CoordType _delta; // increment between grid points in user coords
};
}; // namespace VAPoR
#endif
4 changes: 2 additions & 2 deletions include/vapor/StretchedGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ class VDF_API StretchedGrid : public StructuredGrid {

private:
const StretchedGrid *_sg;
std::vector<size_t> _index;
std::vector<double> _coords;
DimsType _index;
CoordType _coords;
};

virtual ConstCoordItr ConstCoordBegin() const override { return ConstCoordItr(std::unique_ptr<ConstCoordItrAbstract>(new ConstCoordItrSG(this, true))); }
Expand Down
7 changes: 4 additions & 3 deletions include/vapor/StructuredGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,11 @@ class VDF_API StructuredGrid : public Grid {
static std::string GetClassType() { return ("Structured"); }
std::string GetType() const override { return (GetClassType()); }

const DimsType GetNodeDimensions() const override;
const DimsType &GetNodeDimensions() const override;
const size_t GetNumNodeDimensions() const override;

const std::vector<size_t> &GetCellDimensions() const override { return (_cellDims); };
const DimsType &GetCellDimensions() const override { return (_cellDims); };
const size_t GetNumCellDimensions() const override { return GetNumNodeDimensions(); }

//! \copydoc Grid::GetCellNodes()
//!
Expand Down Expand Up @@ -111,7 +112,7 @@ class VDF_API StructuredGrid : public Grid {

protected:
private:
std::vector<size_t> _cellDims;
DimsType _cellDims;
};
}; // namespace VAPoR
#endif
15 changes: 9 additions & 6 deletions include/vapor/UnstructuredGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,16 +143,18 @@ class VDF_API UnstructuredGrid : public Grid {

//! Return the grid node dimmensions
//!
const VAPoR::DimsType GetNodeDimensions() const override;
const VAPoR::DimsType &GetNodeDimensions() const override;
const size_t GetNumNodeDimensions() const override;

//! Return the grid cell dimmensions
//!
const std::vector<size_t> &GetCellDimensions() const override { return (_faceDims); }
const DimsType &GetCellDimensions() const override { return (_faceDims); }

virtual const size_t GetNumCellDimensions() const override { return (_nDims); }

//! Return the grid edge dimmensions
//!
const std::vector<size_t> &GetEdgeDimensions() const { return (_edgeDims); }
const DimsType &GetEdgeDimensions() const { return (_edgeDims); }

//! Get missing element ID
//!
Expand Down Expand Up @@ -196,9 +198,10 @@ class VDF_API UnstructuredGrid : public Grid {
Location _location;

private:
std::vector<size_t> _vertexDims;
std::vector<size_t> _faceDims;
std::vector<size_t> _edgeDims;
DimsType _vertexDims;
DimsType _faceDims;
DimsType _edgeDims;
size_t _nDims;
int _missingID;
int _boundaryID;
};
Expand Down
4 changes: 2 additions & 2 deletions include/vapor/UnstructuredGrid2D.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ class VDF_API UnstructuredGrid2D : public UnstructuredGrid {
virtual std::unique_ptr<ConstCoordItrAbstract> clone() const { return std::unique_ptr<ConstCoordItrAbstract>(new ConstCoordItrU2D(*this)); };

private:
int _ncoords;
size_t _ncoords;
ConstIterator _xCoordItr;
ConstIterator _yCoordItr;
ConstIterator _zCoordItr;
std::vector<double> _coords;
CoordType _coords;
};

virtual ConstCoordItr ConstCoordBegin() const override { return ConstCoordItr(std::unique_ptr<ConstCoordItrAbstract>(new ConstCoordItrU2D(this, true))); }
Expand Down

0 comments on commit 9e1d01c

Please sign in to comment.