#include "echoplot.h" #include "commons.h" #include #include #include #include #include "moc_echoplot.cpp" #define MAX_SCREENSIZE 2048 EPlotter::EPlotter(QWidget *parent) : //EPlotter Constructor QFrame(parent) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setFocusPolicy(Qt::StrongFocus); setAttribute(Qt::WA_PaintOnScreen,false); setAutoFillBackground(false); setAttribute(Qt::WA_OpaquePaintEvent, false); setAttribute(Qt::WA_NoSystemBackground, true); m_StartFreq = -200; m_fftBinWidth=12000.0/32768.0; m_binsPerPixel=1; m_fSpan=1000.0; m_hdivs = HORZ_DIVS; m_Running = false; m_paintEventBusy=false; m_2DPixmap = QPixmap(0,0); m_ScalePixmap = QPixmap(0,0); m_OverlayPixmap = QPixmap(0,0); m_Size = QSize(0,0); m_TxFreq = 1500; m_line = 0; m_dBStepSize=10; } EPlotter::~EPlotter() { } // Destructor QSize EPlotter::minimumSizeHint() const { return QSize(50, 50); } QSize EPlotter::sizeHint() const { return QSize(180, 180); } void EPlotter::resizeEvent(QResizeEvent* ) //resizeEvent() { if(!size().isValid()) return; if( m_Size != size() ) { //if changed, resize pixmaps to new screensize m_Size = size(); m_w = m_Size.width(); m_h = m_Size.height(); m_h1=30; m_h2=m_h-m_h1; m_2DPixmap = QPixmap(m_Size.width(), m_h2); m_2DPixmap.fill(Qt::black); m_OverlayPixmap = QPixmap(m_Size.width(), m_h2); m_ScalePixmap = QPixmap(m_w,30); m_ScalePixmap.fill(Qt::white); m_fSpan=m_w*m_fftBinWidth*m_binsPerPixel; m_StartFreq=50 * int((-0.5*m_fSpan)/50.0 - 0.5); } DrawOverlay(); draw(); } void EPlotter::paintEvent(QPaintEvent *) // paintEvent() { if(m_paintEventBusy) return; m_paintEventBusy=true; QPainter painter(this); painter.drawPixmap(0,0,m_ScalePixmap); painter.drawPixmap(0,m_h1,m_2DPixmap); m_paintEventBusy=false; } void EPlotter::draw() //draw() { int i,j,y; float blue[4096],red[4096]; float gain = pow(10.0,(m_plotGain/20.0)); QPen penBlue(QColor(0,255,255),1); QPen penRed(Qt::red,1); QPen penRed2(Qt::red,2); QPen penBlack(Qt::black,1); QPen penBlack2(Qt::black,2); if(m_2DPixmap.size().width()==0) return; QPainter painter2D(&m_2DPixmap); QRect tmp(0,0,m_w,m_h2); if(m_nColor < 2) { painter2D.fillRect(tmp,Qt::black); } else { painter2D.fillRect(tmp,Qt::white); painter2D.setPen(penBlack); painter2D.drawLine(0,0,m_w,0); } QPoint LineBuf[MAX_SCREENSIZE]; if(m_binsPerPixel==0) m_binsPerPixel=1; j=0; for(i=0; i<4096/m_binsPerPixel; i++) { blue[i]=0.0; red[i]=0.0; for(int k=0; k0) { for(i=0; i250) m_freqPerDiv=50; if(m_fSpan>500) m_freqPerDiv=100; if(m_fSpan>1000) m_freqPerDiv=200; if(m_fSpan>2000) m_freqPerDiv=500; // m_StartFreq=50 * int((-0.5*m_fSpan)/50.0 - 0.5); m_StartFreq=m_freqPerDiv * int((-0.5*m_fSpan)/m_freqPerDiv - 0.5); float pixPerHdiv = m_freqPerDiv/(m_fftBinWidth*m_binsPerPixel); float pixPerVdiv = float(m_h2)/float(VERT_DIVS); m_hdivs = m_w*m_fftBinWidth*m_binsPerPixel/m_freqPerDiv + 0.9999; painter.setPen(QPen(Qt::white, 1,Qt::DotLine)); for( int i=1; im_w) return m_w; return x; } float EPlotter::FreqfromX(int x) //FreqfromX() { return float(m_StartFreq + x*m_fftBinWidth*m_binsPerPixel); } void EPlotter::SetRunningState(bool running) //SetRunningState() { m_Running = running; } void EPlotter::setPlotZero(int plotZero) //setPlotZero() { m_plotZero=plotZero; } int EPlotter::getPlotZero() //getPlotZero() { return m_plotZero; } void EPlotter::setPlotGain(int plotGain) //setPlotGain() { m_plotGain=plotGain; } int EPlotter::getPlotGain() //getPlotGain() { return m_plotGain; } void EPlotter::setSmooth(int n) //setSmooth() { m_smooth=n; } int EPlotter::getSmooth() //getSmooth() { return m_smooth; } void EPlotter::setColors(qint32 n) //setSmooth() { m_nColor=n; draw(); } int EPlotter::plotWidth(){return m_2DPixmap.width();} void EPlotter::UpdateOverlay() {DrawOverlay();}