diff --git a/SimoxUtility/color/ColorMap.cpp b/SimoxUtility/color/ColorMap.cpp index dc933f66c2b7ea18c81477384b25963c6aeaac70..bc12263c26c7bb95ab0d5b2644285e5343bb0b6c 100644 --- a/SimoxUtility/color/ColorMap.cpp +++ b/SimoxUtility/color/ColorMap.cpp @@ -47,6 +47,11 @@ namespace simox::color Color ColorMap::at(float value) const + { + return at(value, _vmin, _vmax); + } + + Color ColorMap::at(float value, std::optional<float> vmin, std::optional<float> vmax) const { if (empty()) { @@ -58,12 +63,16 @@ namespace simox::color return keys.begin()->second; } - if (_vmin || _vmax) + if (vmin || vmax) { // Original: [1 .. 2] // Virtual: [100 .. 200] // => Scale 150 to 1.5 - value = simox::math::rescale(value, vmin(), vmax(), original_vmin(), original_vmax()); + value = simox::math::rescale(value, + vmin.value_or(original_vmin()), + vmax.value_or(original_vmax()), + original_vmin(), + original_vmax()); } // keys.size() >= 2 diff --git a/SimoxUtility/color/ColorMap.h b/SimoxUtility/color/ColorMap.h index 27c1e2f7f86086fa435b45bed148771cd133937f..de992b442925bada153f42a8ad8916a0f9326bfe 100644 --- a/SimoxUtility/color/ColorMap.h +++ b/SimoxUtility/color/ColorMap.h @@ -56,6 +56,18 @@ namespace simox::color */ Color at(float value) const; + /** + * @brief Get the color for the given scalar value. + * + * Empty color maps always return black. + * + * @param value The scalar value. + * @param vmin Override for vmin(). + * @param vmax Override for vmax(). + * @return + */ + Color at(float value, std::optional<float> vmin, std::optional<float> vmax) const; + /// @see `ColorMap::at()` Color operator()(float value) const { return this->at(value); }