Mercurial > hg > svgui
comparison layer/Colour3DPlotLayer.cpp @ 1563:563bab925c9b spectrogram-export
Use Colour3DPlotExporter in line with SpectrogramLayer
author | Chris Cannam |
---|---|
date | Thu, 09 Jan 2020 14:35:55 +0000 |
parents | e6362cf5ff1d |
children | 5f6fdd525158 |
comparison
equal
deleted
inserted
replaced
1562:3b45788b7804 | 1563:563bab925c9b |
---|---|
20 #include "base/RangeMapper.h" | 20 #include "base/RangeMapper.h" |
21 | 21 |
22 #include "ColourMapper.h" | 22 #include "ColourMapper.h" |
23 #include "LayerGeometryProvider.h" | 23 #include "LayerGeometryProvider.h" |
24 #include "PaintAssistant.h" | 24 #include "PaintAssistant.h" |
25 #include "Colour3DPlotExporter.h" | |
25 | 26 |
26 #include "data/model/Dense3DModelPeakCache.h" | 27 #include "data/model/Dense3DModelPeakCache.h" |
27 | 28 |
28 #include "view/ViewManager.h" | 29 #include "view/ViewManager.h" |
29 | 30 |
68 } | 69 } |
69 | 70 |
70 Colour3DPlotLayer::~Colour3DPlotLayer() | 71 Colour3DPlotLayer::~Colour3DPlotLayer() |
71 { | 72 { |
72 invalidateRenderers(); | 73 invalidateRenderers(); |
74 | |
75 for (auto exporterId: m_exporters) { | |
76 if (auto exporter = | |
77 ModelById::getAs<Colour3DPlotExporter>(exporterId)) { | |
78 exporter->discardSources(); | |
79 } | |
80 ModelById::release(exporterId); | |
81 } | |
73 } | 82 } |
74 | 83 |
75 const ZoomConstraint * | 84 const ZoomConstraint * |
76 Colour3DPlotLayer::getZoomConstraint() const | 85 Colour3DPlotLayer::getZoomConstraint() const |
77 { | 86 { |
203 { | 212 { |
204 #ifdef DEBUG_COLOUR_3D_PLOT_LAYER_PAINT | 213 #ifdef DEBUG_COLOUR_3D_PLOT_LAYER_PAINT |
205 SVDEBUG << "Colour3DPlotLayer::invalidateMagnitudes called" << endl; | 214 SVDEBUG << "Colour3DPlotLayer::invalidateMagnitudes called" << endl; |
206 #endif | 215 #endif |
207 m_viewMags.clear(); | 216 m_viewMags.clear(); |
217 } | |
218 | |
219 ModelId | |
220 Colour3DPlotLayer::getExportModel(LayerGeometryProvider *v) const | |
221 { | |
222 // Creating Colour3DPlotExporters is cheap, so we create one on | |
223 // every call - calls probably being infrequent - to avoid having | |
224 // to worry about view lifecycles. | |
225 | |
226 auto model = ModelById::getAs<DenseThreeDimensionalModel>(m_model); | |
227 if (!model) return {}; | |
228 int viewId = v->getId(); | |
229 | |
230 Colour3DPlotExporter::Sources sources; | |
231 sources.verticalBinLayer = this; | |
232 sources.source = m_model; | |
233 sources.provider = v; | |
234 | |
235 double minValue = 0.0; | |
236 double maxValue = 1.0; | |
237 | |
238 if (m_normalizeVisibleArea && m_viewMags[viewId].isSet()) { | |
239 minValue = m_viewMags[viewId].getMin(); | |
240 maxValue = m_viewMags[viewId].getMax(); | |
241 } else if (m_normalization == ColumnNormalization::Hybrid) { | |
242 minValue = 0; | |
243 maxValue = log10(model->getMaximumLevel() + 1.0); | |
244 } else if (m_normalization == ColumnNormalization::None) { | |
245 minValue = model->getMinimumLevel(); | |
246 maxValue = model->getMaximumLevel(); | |
247 } | |
248 | |
249 if (maxValue <= minValue) { | |
250 maxValue = minValue + 0.1f; | |
251 | |
252 if (!(maxValue > minValue)) { // one of them must be NaN or Inf | |
253 SVCERR << "WARNING: Colour3DPlotLayer::getExportModel: resetting " | |
254 << "minValue and maxValue to zero and one" << endl; | |
255 minValue = 0.f; | |
256 maxValue = 1.f; | |
257 } | |
258 } | |
259 | |
260 Colour3DPlotExporter::Parameters params; | |
261 params.threshold = minValue; | |
262 params.gain = m_gain; // matching ColourScale in getRenderer | |
263 params.normalization = m_normalization; | |
264 | |
265 ModelId exporter = ModelById::add | |
266 (std::make_shared<Colour3DPlotExporter>(sources, params)); | |
267 m_exporters.push_back(exporter); | |
268 return exporter; | |
208 } | 269 } |
209 | 270 |
210 ModelId | 271 ModelId |
211 Colour3DPlotLayer::getPeakCache() const | 272 Colour3DPlotLayer::getPeakCache() const |
212 { | 273 { |