Răsfoiți Sursa

V0.4.1
1、添加了网格

Apple 4 luni în urmă
părinte
comite
292278007f
5 a modificat fișierele cu 96 adăugiri și 27 ștergeri
  1. 11 25
      EyeMap/OscData.cpp
  2. 2 0
      EyeMap/OscData.h
  3. 68 2
      EyeMap/eyemap.cpp
  4. 10 0
      oscwidget.cpp
  5. 5 0
      oscwidget.h

+ 11 - 25
EyeMap/OscData.cpp

@@ -705,6 +705,11 @@ void OscilloscopeData::threadProcessData()
             /* 处理数据 */
             // SPDLOG_LOGGER_DEBUG(m_logger, "开始处理数据,通道A数据: {}, 通道B数据: {}", m_bufferChnA[32000], m_bufferChnB[32000]);
             /* 矫正零电压值 */
+            for(uint32_t i = 0; i < BUFFER_SIZE / 2; i++)
+            {
+                m_bufferChnA[i] = m_bufferChnA[i] + m_diffVoltageA;
+                // m_bufferChnB[i] = m_bufferChnB[i] + m_diffVoltageB;
+            }
         }
         /* 打印1000个数据 */
         // for(uint32_t i = 0; i < BUFFER_SIZE/2; i++)
@@ -825,34 +830,11 @@ void OscilloscopeData::parseEyeMapData(unsigned char* buffer, unsigned int size)
         int numTmp = bufferSize - 1;
         float num11 = 0.0;
 
-        bool flag2 = false;
-        /*  */
         uint8_t b2 = 0;
         uint8_t b3 = 0;
         uint8_t b = 0;
-        int num5 = 0;
-        /* 进行插值,每个采样点之间插30个值 */
-        // for (int i = 0; i < numTmp; i++)
-        // {
-        //     b2 = array[i];			/* 偶数位 */
-        //     b3 = array[i + 1];		/* 奇数位 */
-        //     /* 在b2和b3之间添加30个插值 */
-        //     num11 = (float)(b3 - b2) / 30.f; /* 将幅值分成30份 */
-        //     vecData.push_back(EyeDataT(true, b2));
-        //     num5 = 30;
-        //     /* Qt的全局随机数生成器 */
-        //     auto random = QRandomGenerator::global();
-        //     for (int j = 0; j < num5; j++)
-        //     {
-        //         /* 四舍五入 */
-        //         b = std::round((num11 * (float)j) + (int)b2);
-        //         // flag2 = ((1 == random.Next(1)) ? true : false);
-        //         // flag2 = ((1 == random->bounded(0, 1)) ? true : false);
-        //         vecData.push_back(EyeDataT(true, b));
-        //     }
-        //     vecData.push_back(EyeDataT(true, b3));
-        // }
-        /* 进行插值,每个采样点之间插值 */
+
+        /* 进行插值,每个采样点之间插值根据实际的采样点来计算,插值后的采样点个数比1000略大 */
         int numMulti2 = 0;
         double numMulti1 = 1000.0 / saTotal;
         if(numMulti1 > 1.0 && numMulti1 < 2.0)
@@ -1045,6 +1027,9 @@ void OscilloscopeData::setZeroVoltageAndCalibration(OscChannel chn, OscChannelRa
         uint8_t altitudeByteA = 0;
         m_zeroVoltageA = m_mapChAZeroVoltage.value(range);
         altitudeByteA = m_mapChAVoltageAmplitudeRatio.value(range);
+        m_diffVoltageA = m_zeroVoltageA - 128;
+        
+
 
         if(range == OscChannelRange::CR_100MV)
         {
@@ -1088,6 +1073,7 @@ void OscilloscopeData::setZeroVoltageAndCalibration(OscChannel chn, OscChannelRa
         uint8_t altitudeByteB = 0;      
         m_zeroVoltageB = m_mapChBZeroVoltage.value(range);
         altitudeByteB = m_mapChBVoltageAmplitudeRatio.value(range);
+        m_diffVoltageB = m_zeroVoltageB - 128;
 
         if(range == OscChannelRange::CR_100MV)
         {

+ 2 - 0
EyeMap/OscData.h

@@ -117,6 +117,8 @@ private:
 
     unsigned char m_zeroVoltageA = 0;                       /* 通道A零电压值 */
     unsigned char m_zeroVoltageB = 0;                       /* 通道B零电压值 */
+    char m_diffVoltageA = 0;                                /* 通道A零电压差值 */
+    char m_diffVoltageB = 0;                                /* 通道B零电压差值 */
     double m_voltageCalibrationA = 0;                       /* 通道A电压校准系数 */
     double m_voltageCalibrationB = 0;                       /* 通道B电压校准系数 */
     double m_rangeRatioA = 0.0;                             /* 通道A量程比例 */

+ 68 - 2
EyeMap/eyemap.cpp

@@ -68,9 +68,75 @@ void EyeMap::paintEvent(QPaintEvent *event)
     painter.setPen(pen);
     painter.setBrush(brush);
     painter.drawRect(0, 0, this->width(), this->height());
-    /* 绘制刻度 */
+    /* 绘制中线 */
+    int width = this->width();
+    int height = this->height();
+    pen.setColor(QColor(220, 220, 220));
+    pen.setWidth(2);
+    painter.setPen(pen);
+    painter.drawLine(0, height / 2, width, height / 2);     /* 绘制水平中线 */
+    painter.drawLine(width / 2, 0, width / 2, height);      /* 绘制垂直中线 */
+    /* 绘制中线上的刻度 */
+    double scaleW = width / 50.0;
+    double scaleH = height / 50.0;
+    QVector<QLineF> wLines;
+    QVector<QLineF> hLines;
+    for(int i = 0; i < 50; i++)
+    {
+        QLineF line1(i * scaleW, height / 2.0 - 4, i * scaleW, height / 2.0 + 4);
+        wLines.append(line1);
+        QLineF line2(width / 2.0 - 4, i * scaleH, width / 2.0 + 4, i * scaleH);
+        hLines.append(line2);
+    }
+    painter.drawLines(wLines);
+    painter.drawLines(hLines);
+
+    /* 绘制网格,网格点之间的间距是固定的 */
+    pen.setWidth(1);
+    painter.setPen(pen);
+    scaleW = width / 10.0;
+    scaleH = height / 10.0;
+    int x = 0;
+    int y = 0;
+    QVector<QLineF> wGridLines;
+    QVector<QLineF> hGridLines;
+    for(int i = 1; i < 10; i++)
+    {
+        y = i * scaleH;
+        while(true)
+        {
+            x = x + 8;
+            QLineF line1(x, y, x + 2, y);
+            wGridLines.append(line1);
+            if(x >= width)
+            {
+                x = 0;
+                y = 0;
+                break;
+            }
+        }
+    }
+    x = 0;
+    y = 0;
+    for(int i = 1; i < 10; i++)
+    {
+        x = i * scaleW;
+        while(true)
+        {
+            y = y + 8;
+            QLineF line1(x, y, x, y + 2);
+            hGridLines.append(line1);
+            if(y >= height)
+            {
+                x = 0;
+                y = 0;
+                break;
+            }
+        }
+    }
+    painter.drawLines(wGridLines);
+    painter.drawLines(hGridLines);
 
-    /* 绘制网格 */
     
     /* 绘制眼图,就是绘制 1000 * 256 个矩形 */
     painter.setPen(QPen(Qt::NoPen));

+ 10 - 0
oscwidget.cpp

@@ -2,6 +2,7 @@
 #include "ui_oscwidget.h"
 
 #include "OscData.h"
+#include <QPainter>
 
 OscWidget::OscWidget(QWidget *parent) :
     QWidget(parent),
@@ -110,3 +111,12 @@ void OscWidget::on_pBtn_stopCap_clicked()
     update();
 }
 
+/**
+ * @brief 绘制刻度
+ * 
+ */
+void OscWidget::paintEvent(QPaintEvent *event)
+{
+    QPainter painter(this);
+}
+

+ 5 - 0
oscwidget.h

@@ -23,11 +23,16 @@ private slots:
     void on_pBtn_resetCap_clicked();
     void on_pBtn_stopCap_clicked();
 
+protected:
+    void paintEvent(QPaintEvent *event) override;
+
 private:
     Ui::OscWidget *ui;
     std::shared_ptr<spdlog::logger> m_logger = nullptr;
     EyeMap* m_eyeMap = nullptr;
     QMap<QString, int> m_mapTime;
+
+    int m_widthScaleplate = 20;             /* 刻度板宽度 */
 };
 
 #endif // OSCWIDGET_H