Mercurial > hg > svgui
diff layer/Colour3DPlotLayer.cpp @ 509:f8b98f63f200
* Add Absolute plot scale, in colour 3d plot layer only for the moment
author | Chris Cannam |
---|---|
date | Wed, 25 Feb 2009 17:41:34 +0000 |
parents | 2613bc1b2823 |
children | 4ba0476ebbb6 |
line wrap: on
line diff
--- a/layer/Colour3DPlotLayer.cpp Wed Feb 25 12:12:07 2009 +0000 +++ b/layer/Colour3DPlotLayer.cpp Wed Feb 25 17:41:34 2009 +0000 @@ -212,7 +212,7 @@ if (name == "Colour Scale") { *min = 0; - *max = 2; + *max = 3; *deflt = (int)LinearScale; val = (int)m_colourScale; @@ -265,6 +265,7 @@ case 0: return tr("Linear"); case 1: return tr("Log"); case 2: return tr("+/-1"); + case 3: return tr("Absolute"); } } return tr("<unknown>"); @@ -279,6 +280,7 @@ case 0: setColourScale(LinearScale); break; case 1: setColourScale(LogScale); break; case 2: setColourScale(PlusMinusOneScale); break; + case 3: setColourScale(AbsoluteScale); break; } } else if (name == "Colour") { setColourMap(value); @@ -604,6 +606,15 @@ } else if (m_colourScale == PlusMinusOneScale) { mmin = -1.f; mmax = 1.f; + } else if (m_colourScale == AbsoluteScale) { + if (mmin < 0) { + if (fabsf(mmin) > fabsf(mmax)) mmax = fabsf(mmin); + else mmax = fabsf(mmax); + mmin = 0; + } else { + mmin = fabsf(mmin); + mmax = fabsf(mmax); + } } if (max == min) max = min + 1.0; @@ -844,6 +855,15 @@ } else if (m_colourScale == PlusMinusOneScale) { min = -1.f; max = 1.f; + } else if (m_colourScale == AbsoluteScale) { + if (min < 0) { + if (fabsf(min) > fabsf(max)) max = fabsf(min); + else max = fabsf(max); + min = 0; + } else { + min = fabsf(min); + max = fabsf(max); + } } if (max == min) max = min + 1.0; @@ -886,6 +906,15 @@ visibleMin = LogRange::map(visibleMin); visibleMax = LogRange::map(visibleMax); if (visibleMin > visibleMax) std::swap(visibleMin, visibleMax); + } else if (m_colourScale == AbsoluteScale) { + if (visibleMin < 0) { + if (fabsf(visibleMin) > fabsf(visibleMax)) visibleMax = fabsf(visibleMin); + else visibleMax = fabsf(visibleMax); + visibleMin = 0; + } else { + visibleMin = fabsf(visibleMin); + visibleMax = fabsf(visibleMax); + } } } @@ -912,6 +941,8 @@ if (m_colourScale == LogScale) { value = LogRange::map(value); + } else if (m_colourScale == AbsoluteScale) { + value = fabsf(value); } if (normalizeVisible) { @@ -1065,7 +1096,7 @@ pixel = m_cache->pixel(sx, sy); } - QRect r(rx0, ry0 - h / (symax - symin) - 1, + QRect r(rx0, ry0 - h / (symax - symin), rw, h / (symax - symin) + 1); if (rw == 1) {