Mercurial > hg > aimc
changeset 508:d609725e568a
Re-add support for plotting strobes (untested).
author | tomwalters@google.com |
---|---|
date | Fri, 22 Jun 2012 12:17:24 +0000 |
parents | 7cc44d4e9b86 |
children | 0284d2152e17 |
files | src/Modules/Output/Graphics/GraphicsView.cc src/Modules/Output/Graphics/GraphicsView.h src/Modules/Output/Graphics/GraphicsViewTime.cc src/Modules/Output/Graphics/GraphicsViewTime.h src/Support/SignalBank.h |
diffstat | 5 files changed, 95 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Modules/Output/Graphics/GraphicsView.cc Wed May 30 20:54:57 2012 +0000 +++ b/src/Modules/Output/Graphics/GraphicsView.cc Fri Jun 22 12:17:24 2012 +0000 @@ -58,6 +58,7 @@ m_fMarginTop = parameters_->DefaultFloat(_S("graph.margin.top"), 0.005); m_fMarginBottom = parameters_->DefaultFloat(_S("graph.margin.bottom"), 0.05); m_bPlotLabels = parameters_->DefaultBool(_S("graph.plotlabels"), true); + plotting_strobes_ = parameters_->DefaultBool(_S("graph.plot_strobes"), false); const char *sGraphType = parameters_->DefaultString(_S("graph.type"), "line"); if (strcmp(sGraphType, _S("line"))==0) @@ -136,6 +137,7 @@ float height = 1.0 / bank.channel_count(); float heightMinMargin = height * (1.0f - m_fMarginBottom - m_fMarginTop); float xScaling = 1.0f; + float diameter = height / 5.0; m_pDev->gGrab(); PlotAxes(bank); @@ -155,6 +157,10 @@ yOffs = yOffs * (1.0f - height) + height / 2.0; yOffs = yOffs * (1.0f - m_fMarginTop - m_fMarginBottom) + m_fMarginBottom; PlotData(bank[i], bank.sample_rate(), yOffs, heightMinMargin, xScaling); + if (plotting_strobes_) { + PlotStrobes(bank[i], bank.get_strobes(i), bank.sample_rate(), + yOffs, heightMinMargin ,xScaling, diameter); + } } m_pDev->gRelease(); @@ -235,6 +241,35 @@ PlotDataPointDirect(x, y, val, height); } +void GraphicsView::PlotStrobe(float x, float y, float val, + float height, + float diameter) { + switch(m_iGraphType) { + case GraphTypeLine: + m_pDev->gBeginQuadStrip(); + m_pDev->gVertex2f(x + diameter, y + val * height + diameter); + m_pDev->gVertex2f(x + diameter, y + val * height - diameter); + m_pDev->gVertex2f(x - diameter, y + val * height - diameter); + m_pDev->gVertex2f(x - diameter, y + val * height + diameter); + m_pDev->gEnd(); + break; + case GraphTypeColormap: + m_pDev->gBeginQuadStrip(); + m_pDev->gVertex2f(x + diameter, y + diameter); + m_pDev->gVertex2f(x + diameter, y - diameter); + m_pDev->gVertex2f(x - diameter, y - diameter); + m_pDev->gVertex2f(x - diameter, y + diameter); + m_pDev->gEnd(); + break; + case GraphTypeNone: + // Nothing: just for testing computation overhead of graphing + break; + default: + // Shouldn't happen + AIM_ASSERT(0); + } +} + void GraphicsView::PlotDataPointDirect(float x, float y, float val,
--- a/src/Modules/Output/Graphics/GraphicsView.h Wed May 30 20:54:57 2012 +0000 +++ b/src/Modules/Output/Graphics/GraphicsView.h Fri Jun 22 12:17:24 2012 +0000 @@ -95,10 +95,24 @@ * \param xScale Scaling in x-direction. 1.0 makes it cover the whole length. 0.5 only the left half. */ virtual void PlotData(const vector<float> &signal, - float sample_rate, + float sample_rate, float yOffset, float height, float xScale) = 0; + + virtual void PlotStrobes(const vector<float>& signal, + const vector<int>& strobes, + float sample_rate, + float y_offset, + float height, + float x_scale, + float diameter) = 0; + + virtual void PlotStrobe(float x, + float y, + float val, + float height, + float diameter); /*! \brief Plot the axes for a signal bank * \param pSig Signal to plot the axes for @@ -167,6 +181,7 @@ int previous_start_time_; bool initialized_; + bool plotting_strobes_; }; } // namespace aimc #endif /* __GRAPHICS_VIEW_H__ */
--- a/src/Modules/Output/Graphics/GraphicsViewTime.cc Wed May 30 20:54:57 2012 +0000 +++ b/src/Modules/Output/Graphics/GraphicsViewTime.cc Fri Jun 22 12:17:24 2012 +0000 @@ -93,6 +93,31 @@ m_pDev->gText2f(0.8f, 0.0025f, sTxt, false); } +void GraphicsViewTime::PlotStrobes(const vector<float>& signal, + const vector<int>& strobes, + float sample_rate, + float y_offset, + float height, + float x_scale, + float diameter) { + x_scale *= 1000.0 / sample_rate; + m_pDev->gColor3f(1.0f, 0.0f, 0.0f); + for (vector<int>::const_iterator i = strobes.begin(); + i != strobes.end(); ++i) { + float x = *i * x_scale; + float y = signal[*i]; + x = m_pAxisX->m_pScale->FromLinearScaled(x) + 0.5f; + y = m_pAxisY->m_pScale->FromLinearScaled(y); + + if (x < 0.0) + continue; + + // Now fit it into the drawing area. + x = x * (1.0f - m_fMarginLeft - m_fMarginRight) + m_fMarginLeft; // fit inside x-axis area + PlotStrobe(x, y_offset, y, height, diameter); + } +} + void GraphicsViewTime::PlotData(const vector<float> &signal, float sample_rate, float yOffset,
--- a/src/Modules/Output/Graphics/GraphicsViewTime.h Wed May 30 20:54:57 2012 +0000 +++ b/src/Modules/Output/Graphics/GraphicsViewTime.h Fri Jun 22 12:17:24 2012 +0000 @@ -34,13 +34,19 @@ virtual GraphicsViewTime *Clone(GraphicsOutputDevice *pDev); private: - void PlotData(const vector<float> &signal, - float sample_rate, - float yOffset, - float height, - float xScale = 1.0); - void PlotAxes(const vector<float> &signal); - void PlotAxes(const SignalBank &pBank); + virtual void PlotData(const vector<float> &signal, + float sample_rate, + float yOffset, + float height, + float xScale = 1.0); + virtual void PlotStrobes(const vector<float>& signal, + const vector<int>& strobes, + float sample_rate, + float y_offset, + float height, + float x_scale, + float diameter); + virtual void PlotAxes(const SignalBank &pBank); }; } // namesapce aimc #endif /* __GRAPHICS_VIEW_TIME_H__ */
--- a/src/Support/SignalBank.h Wed May 30 20:54:57 2012 +0000 +++ b/src/Support/SignalBank.h Fri Jun 22 12:17:24 2012 +0000 @@ -64,6 +64,12 @@ inline const vector<float> &get_signal(int channel) const { return signals_[channel]; }; + + inline const vector<int>& get_strobes(int channel) const { + //DCHECK(channel > 0); + //DCHECK(channel < strobes.size()); + return strobes_[channel]; + }; // Return a reference to the signal vector. The reference is not // const, so the vector is directly modifiable. In order to maintain