diff --git a/include/osgSim/ColorRange b/include/osgSim/ColorRange index d1dcbc67b..2a7d605d2 100644 --- a/include/osgSim/ColorRange +++ b/include/osgSim/ColorRange @@ -32,12 +32,18 @@ class OSGSIM_EXPORT ColorRange: public ScalarsToColors { public: + /** Constructor for a ColorRange with a default list of colors set to Red-Yellow-Green-Blue-Cyan + @param min minimum scalar value + @param max maximum scalar value + */ + ColorRange(float min, float max); + /** Constructor for a ColorRange @param min minimum scalar value @param max maximum scalar value - @param colors optional range of colors, defaulting to Red-Yellow-Green-Blue-Cyan + @param colors optional range of colors, */ - ColorRange(float min, float max, const std::vector& colors = std::vector()); + ColorRange(float min, float max, const std::vector& colors); /** Set the range of colors. */ void setColors(const std::vector& colors); diff --git a/src/osgSim/ColorRange.cpp b/src/osgSim/ColorRange.cpp index f2298d6f3..7a96a5354 100644 --- a/src/osgSim/ColorRange.cpp +++ b/src/osgSim/ColorRange.cpp @@ -2,6 +2,16 @@ using namespace osgSim; +ColorRange::ColorRange(float min, float max): ScalarsToColors(min,max) +{ + // Default to something sensible + _colors.push_back(osg::Vec4(1.0,0.0,0.0,1.0)); // R + _colors.push_back(osg::Vec4(1.0,1.0,0.0,1.0)); // Y + _colors.push_back(osg::Vec4(0.0,1.0,0.0,1.0)); // G + _colors.push_back(osg::Vec4(0.0,1.0,1.0,1.0)); // C + _colors.push_back(osg::Vec4(0.0,0.0,1.0,1.0)); // B +} + ColorRange::ColorRange(float min, float max, const std::vector& colors): ScalarsToColors(min,max) { setColors(colors); @@ -9,30 +19,21 @@ ColorRange::ColorRange(float min, float max, const std::vector& color void ColorRange::setColors(const std::vector& colors) { - if(colors.size()>1) - { - _colors=colors; - } - else - { - // Default to something sensible - _colors.push_back(osg::Vec4(1.0,0.0,0.0,1.0)); // R - _colors.push_back(osg::Vec4(1.0,1.0,0.0,1.0)); // Y - _colors.push_back(osg::Vec4(0.0,1.0,0.0,1.0)); // G - _colors.push_back(osg::Vec4(0.0,1.0,1.0,1.0)); // C - _colors.push_back(osg::Vec4(0.0,0.0,1.0,1.0)); // B - } + _colors=colors; } osg::Vec4 ColorRange::getColor(float scalar) const { + if (_colors.empty()) return osg::Vec4(1.0f,1.0f,1.0f,1.0f); + if (_colors.size()==1) return _colors.front(); + if(scalargetMax()) return _colors.back(); - float r = ((scalar - getMin())/(getMax() - getMin())) * (_colors.size()-1); + float r = ((scalar - getMin())/(getMax() - getMin())) * (_colors.size()-1); int lower = static_cast(floor(r)); - int upper = static_cast(ceil(r)); + int upper = static_cast(ceil(r)); - osg::Vec4 color = _colors[lower] + ((_colors[upper] - _colors[lower]) * (r-lower)); - return color; + osg::Vec4 color = _colors[lower] + ((_colors[upper] - _colors[lower]) * (r-lower)); + return color; }