comparison layer/Colour3DPlotLayer.cpp @ 972:1011ffb1b6d5 osx-retina

Merge from default branch
author Chris Cannam
date Wed, 10 Jun 2015 13:38:02 +0100
parents 0aac065f09f9 1c37aa13bfd8
children bc23c2cfff65
comparison
equal deleted inserted replaced
969:0aac065f09f9 972:1011ffb1b6d5
52 m_binScale(LinearBinScale), 52 m_binScale(LinearBinScale),
53 m_normalizeColumns(false), 53 m_normalizeColumns(false),
54 m_normalizeVisibleArea(false), 54 m_normalizeVisibleArea(false),
55 m_normalizeHybrid(false), 55 m_normalizeHybrid(false),
56 m_invertVertical(false), 56 m_invertVertical(false),
57 m_rectified(false),
57 m_opaque(false), 58 m_opaque(false),
58 m_smooth(false), 59 m_smooth(false),
59 m_peakResolution(256), 60 m_peakResolution(256),
60 m_miny(0), 61 m_miny(0),
61 m_maxy(0) 62 m_maxy(0)
160 list.push_back("Normalize Columns"); 161 list.push_back("Normalize Columns");
161 list.push_back("Normalize Visible Area"); 162 list.push_back("Normalize Visible Area");
162 list.push_back("Gain"); 163 list.push_back("Gain");
163 list.push_back("Bin Scale"); 164 list.push_back("Bin Scale");
164 list.push_back("Invert Vertical Scale"); 165 list.push_back("Invert Vertical Scale");
166 list.push_back("Show Rectified");
165 list.push_back("Opaque"); 167 list.push_back("Opaque");
166 list.push_back("Smooth"); 168 list.push_back("Smooth");
167 return list; 169 return list;
168 } 170 }
169 171
173 if (name == "Colour") return tr("Colour"); 175 if (name == "Colour") return tr("Colour");
174 if (name == "Colour Scale") return tr("Scale"); 176 if (name == "Colour Scale") return tr("Scale");
175 if (name == "Normalize Columns") return tr("Normalize Columns"); 177 if (name == "Normalize Columns") return tr("Normalize Columns");
176 if (name == "Normalize Visible Area") return tr("Normalize Visible Area"); 178 if (name == "Normalize Visible Area") return tr("Normalize Visible Area");
177 if (name == "Invert Vertical Scale") return tr("Invert Vertical Scale"); 179 if (name == "Invert Vertical Scale") return tr("Invert Vertical Scale");
180 if (name == "Show Rectified") return tr("Half-Wave Rectify");
178 if (name == "Gain") return tr("Gain"); 181 if (name == "Gain") return tr("Gain");
179 if (name == "Opaque") return tr("Always Opaque"); 182 if (name == "Opaque") return tr("Always Opaque");
180 if (name == "Smooth") return tr("Smooth"); 183 if (name == "Smooth") return tr("Smooth");
181 if (name == "Bin Scale") return tr("Bin Scale"); 184 if (name == "Bin Scale") return tr("Bin Scale");
182 return ""; 185 return "";
186 Colour3DPlotLayer::getPropertyIconName(const PropertyName &name) const 189 Colour3DPlotLayer::getPropertyIconName(const PropertyName &name) const
187 { 190 {
188 if (name == "Normalize Columns") return "normalise-columns"; 191 if (name == "Normalize Columns") return "normalise-columns";
189 if (name == "Normalize Visible Area") return "normalise"; 192 if (name == "Normalize Visible Area") return "normalise";
190 if (name == "Invert Vertical Scale") return "invert-vertical"; 193 if (name == "Invert Vertical Scale") return "invert-vertical";
194 if (name == "Show Rectified") return "derivative";
191 if (name == "Opaque") return "opaque"; 195 if (name == "Opaque") return "opaque";
192 if (name == "Smooth") return "smooth"; 196 if (name == "Smooth") return "smooth";
193 return ""; 197 return "";
194 } 198 }
195 199
198 { 202 {
199 if (name == "Gain") return RangeProperty; 203 if (name == "Gain") return RangeProperty;
200 if (name == "Normalize Columns") return ToggleProperty; 204 if (name == "Normalize Columns") return ToggleProperty;
201 if (name == "Normalize Visible Area") return ToggleProperty; 205 if (name == "Normalize Visible Area") return ToggleProperty;
202 if (name == "Invert Vertical Scale") return ToggleProperty; 206 if (name == "Invert Vertical Scale") return ToggleProperty;
207 if (name == "Show Rectified") return ToggleProperty;
203 if (name == "Opaque") return ToggleProperty; 208 if (name == "Opaque") return ToggleProperty;
204 if (name == "Smooth") return ToggleProperty; 209 if (name == "Smooth") return ToggleProperty;
205 return ValueProperty; 210 return ValueProperty;
206 } 211 }
207 212
209 Colour3DPlotLayer::getPropertyGroupName(const PropertyName &name) const 214 Colour3DPlotLayer::getPropertyGroupName(const PropertyName &name) const
210 { 215 {
211 if (name == "Normalize Columns" || 216 if (name == "Normalize Columns" ||
212 name == "Normalize Visible Area" || 217 name == "Normalize Visible Area" ||
213 name == "Colour Scale" || 218 name == "Colour Scale" ||
219 name == "Show Rectified" ||
214 name == "Gain") return tr("Scale"); 220 name == "Gain") return tr("Scale");
215 if (name == "Bin Scale" || 221 if (name == "Bin Scale" ||
216 name == "Invert Vertical Scale") return tr("Bins"); 222 name == "Invert Vertical Scale") return tr("Bins");
217 if (name == "Opaque" || 223 if (name == "Opaque" ||
218 name == "Smooth" || 224 name == "Smooth" ||
272 278
273 } else if (name == "Invert Vertical Scale") { 279 } else if (name == "Invert Vertical Scale") {
274 280
275 *deflt = 0; 281 *deflt = 0;
276 val = (m_invertVertical ? 1 : 0); 282 val = (m_invertVertical ? 1 : 0);
283
284 } else if (name == "Show Rectified") {
285
286 if (min) *min = 0;
287 if (max) *max = 0;
288 if (deflt) *deflt = 0;
289 val = (m_rectified ? 1.0 : 0.0);
277 290
278 } else if (name == "Bin Scale") { 291 } else if (name == "Bin Scale") {
279 292
280 *min = 0; 293 *min = 0;
281 *max = 1; 294 *max = 1;
353 setNormalizeColumns(value ? true : false); 366 setNormalizeColumns(value ? true : false);
354 } else if (name == "Normalize Visible Area") { 367 } else if (name == "Normalize Visible Area") {
355 setNormalizeVisibleArea(value ? true : false); 368 setNormalizeVisibleArea(value ? true : false);
356 } else if (name == "Invert Vertical Scale") { 369 } else if (name == "Invert Vertical Scale") {
357 setInvertVertical(value ? true : false); 370 setInvertVertical(value ? true : false);
371 } else if (name == "Show Rectified") {
372 setShowRectified(value > 0.5);
358 } else if (name == "Opaque") { 373 } else if (name == "Opaque") {
359 setOpaque(value ? true : false); 374 setOpaque(value ? true : false);
360 } else if (name == "Smooth") { 375 } else if (name == "Smooth") {
361 setSmooth(value ? true : false); 376 setSmooth(value ? true : false);
362 } else if (name == "Bin Scale") { 377 } else if (name == "Bin Scale") {
465 void 480 void
466 Colour3DPlotLayer::setInvertVertical(bool n) 481 Colour3DPlotLayer::setInvertVertical(bool n)
467 { 482 {
468 if (m_invertVertical == n) return; 483 if (m_invertVertical == n) return;
469 m_invertVertical = n; 484 m_invertVertical = n;
485 cacheInvalid();
486 emit layerParametersChanged();
487 }
488
489 void
490 Colour3DPlotLayer::setShowRectified(bool show)
491 {
492 if (m_rectified == show) return;
493 m_rectified = show;
470 cacheInvalid(); 494 cacheInvalid();
471 emit layerParametersChanged(); 495 emit layerParametersChanged();
472 } 496 }
473 497
474 void 498 void
931 DenseThreeDimensionalModel::Column 955 DenseThreeDimensionalModel::Column
932 Colour3DPlotLayer::getColumn(int col) const 956 Colour3DPlotLayer::getColumn(int col) const
933 { 957 {
934 Profiler profiler("Colour3DPlotLayer::getColumn"); 958 Profiler profiler("Colour3DPlotLayer::getColumn");
935 959
960 DenseThreeDimensionalModel::Column prev;
961 if (m_rectified && (col > m_model->getStartFrame())) {
962 prev = m_model->getColumn(col - 1);
963 }
964
936 DenseThreeDimensionalModel::Column values = m_model->getColumn(col); 965 DenseThreeDimensionalModel::Column values = m_model->getColumn(col);
966
967 if (m_rectified && !prev.empty()) {
968 for (int y = 0; y < values.size(); ++y) {
969 if (values[y] < prev[y]) values[y] = 0;
970 else values[y] -= prev[y];
971 }
972 }
973
937 while (values.size() < m_model->getHeight()) values.push_back(0.f); 974 while (values.size() < m_model->getHeight()) values.push_back(0.f);
938 if (!m_normalizeColumns && !m_normalizeHybrid) return values; 975 if (!m_normalizeColumns && !m_normalizeHybrid) return values;
939 976
940 double colMax = 0.f, colMin = 0.f; 977 double colMax = 0.f, colMin = 0.f;
941 double min = 0.f, max = 0.f; 978 double min = 0.f, max = 0.f;