From e3a778919ab5f3b8a5f207c8524ac08ef33eba5a Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Thu, 2 Apr 2026 10:34:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=8F=98=E6=96=87=E4=BB=B6=E7=BC=96?= =?UTF-8?q?=E7=A0=81=EF=BC=9Autf-8=E5=B8=A6bom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HPPA/Carousel.h | 6 +-- HPPA/Corning410Imager.cpp | 12 +++--- HPPA/Corning410Imager.h | 2 +- HPPA/CustomDockWidgetBase.cpp | 4 +- HPPA/CustomDockWidgetBase.h | 2 +- HPPA/FileNameLineEdit.cpp | 2 +- HPPA/FileNameLineEdit.h | 2 +- HPPA/ImageReaderWriter.cpp | 10 ++--- HPPA/ImageReaderWriter.h | 2 +- HPPA/ImageViewer.cpp | 4 +- HPPA/ImageViewer.h | 24 ++++++------ HPPA/ImagerPositionSimulation.cpp | 4 +- HPPA/ImagerPositionSimulation.h | 4 +- HPPA/LayerTree.cpp | 2 +- HPPA/LayerTree.h | 14 +++---- HPPA/LayerTreeGroupNode.cpp | 2 +- HPPA/LayerTreeGroupNode.h | 22 +++++------ HPPA/LayerTreeLayerNode.cpp | 4 +- HPPA/LayerTreeLayerNode.h | 12 +++--- HPPA/LayerTreeModel.cpp | 10 ++--- HPPA/LayerTreeModel.h | 14 +++---- HPPA/LayerTreeNode.cpp | 4 +- HPPA/LayerTreeNode.h | 24 ++++++------ HPPA/LayerTreeView.cpp | 2 +- HPPA/LayerTreeView.h | 2 +- HPPA/LayerTreeViewMenuProvider.cpp | 6 +-- HPPA/LayerTreeViewMenuProvider.h | 4 +- HPPA/MapLayer.cpp | 2 +- HPPA/MapLayer.h | 2 +- HPPA/MapLayerStore.cpp | 2 +- HPPA/MapLayerStore.h | 2 +- HPPA/OneMotorControl.cpp | 4 +- HPPA/OneMotorControl.h | 2 +- HPPA/PowerControl.cpp | 2 +- HPPA/PowerControl.h | 2 +- HPPA/QDoubleSlider.cpp | 6 +-- HPPA/QDoubleSlider.h | 10 ++--- HPPA/QMotorDoubleSlider.cpp | 12 +++--- HPPA/QMotorDoubleSlider.h | 12 +++--- HPPA/RasterDataProvider.cpp | 2 +- HPPA/RasterDataProvider.h | 2 +- HPPA/RasterLayer.cpp | 2 +- HPPA/RasterLayer.h | 2 +- HPPA/RasterRenderer.cpp | 2 +- HPPA/RasterRenderer.h | 2 +- HPPA/ResononNirImager.cpp | 58 ++++++++++++++-------------- HPPA/ResononNirImager.h | 2 +- HPPA/RgbCameraOperation.cpp | 12 +++--- HPPA/RgbCameraOperation.h | 4 +- HPPA/RobotArmControl.cpp | 22 +++++------ HPPA/RobotArmControl.h | 62 +++++++++++++++--------------- HPPA/TabManager.cpp | 4 +- HPPA/TabManager.h | 2 +- HPPA/View3D.h | 2 +- HPPA/View3DModelManager.cpp | 2 +- HPPA/View3DModelManager.h | 2 +- HPPA/aboutWindow.cpp | 4 +- HPPA/aboutWindow.h | 2 +- HPPA/adjustTable.cpp | 2 +- HPPA/adjustTable.h | 2 +- HPPA/fileOperation.cpp | 12 +++--- HPPA/fileOperation.h | 4 +- HPPA/focusWindow.h | 18 ++++----- HPPA/hppaConfigFile.cpp | 14 +++---- HPPA/hppaConfigFile.h | 4 +- HPPA/image2display.cpp | 36 ++++++++--------- HPPA/image2display.h | 12 +++--- HPPA/imageControl.cpp | 4 +- HPPA/imageControl.h | 2 +- HPPA/imageProcessor.cpp | 36 ++++++++--------- HPPA/imageProcessor.h | 10 ++--- HPPA/imagerSimulatioin.cpp | 16 ++++---- HPPA/imagerSimulatioin.h | 8 ++-- HPPA/imager_base.cpp | 2 +- HPPA/imager_base.h | 2 +- HPPA/main.cpp | 2 +- HPPA/path_tc.cpp | 2 +- HPPA/path_tc.h | 2 +- HPPA/resononImager.cpp | 4 +- HPPA/resononImager.h | 2 +- HPPA/resource.h | 6 +-- HPPA/stdafx.cpp | 2 +- HPPA/stdafx.h | 2 +- HPPA/utility_tc.h | 2 +- 84 files changed, 328 insertions(+), 328 deletions(-) diff --git a/HPPA/Carousel.h b/HPPA/Carousel.h index c5e4132..05c3557 100644 --- a/HPPA/Carousel.h +++ b/HPPA/Carousel.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include @@ -40,13 +40,13 @@ private: QString m_nomalQSS; QString m_lockedQSS; - // ״ֵ̬ + // 状态值 int m_currentIndex; bool m_isPlaying; bool m_isLocked; int m_lockedIndex; - // + // 参数 int m_playInterval; int m_intervalButtonSize; diff --git a/HPPA/Corning410Imager.cpp b/HPPA/Corning410Imager.cpp index 27adf4f..ce9eb9e 100644 --- a/HPPA/Corning410Imager.cpp +++ b/HPPA/Corning410Imager.cpp @@ -1,8 +1,8 @@ -#include "Corning410Imager.h" +#include "Corning410Imager.h" Corning410Imager::Corning410Imager() { - //ļûУʹļ + //配置文件:如果没有,就创建配置文件 string CfgFile = getPathofEXE() + "\\corning410.cfg"; m_configfile.setConfigfilePath(CfgFile); if (!m_configfile.isConfigfileExist()) @@ -18,7 +18,7 @@ Corning410Imager::~Corning410Imager() { if (buffer != nullptr) { - std::cout << "ͷŶڴ" << std::endl; + std::cout << "释放堆上内存" << std::endl; free(buffer); free(dark); free(white); @@ -70,7 +70,7 @@ void Corning410Imager::connectImager(const char* camera_sn) { m_imager.connect(); - //ȡļΪò + //读取配置文件参数,并为相机设置参数 bool ret, ret1, ret2; int spatialBin; @@ -82,8 +82,8 @@ void Corning410Imager::connectImager(const char* camera_sn) bool haha = m_imager.setSpectralBin(spectralBin); bool haha2 = m_imager.setSpatialBin(spatialBin); - std::cout << "spectralBin" << spectralBin << std::endl; - std::cout << "spatialBin" << spatialBin << std::endl; + std::cout << "spectralBin:" << spectralBin << std::endl; + std::cout << "spatialBin:" << spatialBin << std::endl; } float gain, offset; diff --git a/HPPA/Corning410Imager.h b/HPPA/Corning410Imager.h index d3a03c3..781db46 100644 --- a/HPPA/Corning410Imager.h +++ b/HPPA/Corning410Imager.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/CustomDockWidgetBase.cpp b/HPPA/CustomDockWidgetBase.cpp index 46f404e..5077d70 100644 --- a/HPPA/CustomDockWidgetBase.cpp +++ b/HPPA/CustomDockWidgetBase.cpp @@ -1,4 +1,4 @@ -#include "CustomDockWidgetBase.h" +#include "CustomDockWidgetBase.h" CustomDockWidgetBase::CustomDockWidgetBase(QMainWindow* parent) : QDockWidget(parent), @@ -55,7 +55,7 @@ void CustomDockWidgetBase::initialize() border-top: 1px solid #2c586b; border-left: 1px solid #2c586b; border-right: 1px solid #2c586b; - border-bottom: none; /* ȡײ߿ */ + border-bottom: none; /* 取消底部边框 */ border-top-left-radius: 5px; border-top-right-radius: 5px; diff --git a/HPPA/CustomDockWidgetBase.h b/HPPA/CustomDockWidgetBase.h index 77f3eea..770b0f4 100644 --- a/HPPA/CustomDockWidgetBase.h +++ b/HPPA/CustomDockWidgetBase.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include #include diff --git a/HPPA/FileNameLineEdit.cpp b/HPPA/FileNameLineEdit.cpp index 5cde11c..10bc946 100644 --- a/HPPA/FileNameLineEdit.cpp +++ b/HPPA/FileNameLineEdit.cpp @@ -1,4 +1,4 @@ -#include "FileNameLineEdit.h" +#include "FileNameLineEdit.h" FileNameLineEdit::FileNameLineEdit(QWidget* parent) : QLineEdit(parent) diff --git a/HPPA/FileNameLineEdit.h b/HPPA/FileNameLineEdit.h index 48ac749..fe1fc04 100644 --- a/HPPA/FileNameLineEdit.h +++ b/HPPA/FileNameLineEdit.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/ImageReaderWriter.cpp b/HPPA/ImageReaderWriter.cpp index eebc154..01b8cba 100644 --- a/HPPA/ImageReaderWriter.cpp +++ b/HPPA/ImageReaderWriter.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include #include "ImageReaderWriter.h" @@ -11,11 +11,11 @@ ImageReaderWriter::ImageReaderWriter(const char * fileName) m_poDataset = (GDALDataset *)GDALOpen(fileName, GA_ReadOnly); if (m_poDataset == NULL) { - std::cout << "Ӱʧܣ" << std::endl; + std::cout << "打开影像失败!" << std::endl; return; } - //ȡӰϢ + //获取影像信息 m_DataType = m_poDataset->GetRasterBand(1)->GetRasterDataType(); m_iBands = m_poDataset->GetRasterCount(); m_iXCount = m_poDataset->GetRasterXSize(); @@ -47,11 +47,11 @@ float * ImageReaderWriter::ReadImage(int nXOff, int nYOff, int nXSize, int nYSiz float *pDataBuffer = (float*)CPLMalloc(sizeof(float)*(1)*(1)*(m_iBands)); memset(pDataBuffer, 0, 1 * 1 * m_iBands * sizeof(float)); - CPLErr status = m_poDataset->RasterIO(GF_Read, nXOff, nYOff, nXSize, nYSize, pDataBuffer, xBuff, yBuff, GDT_Float32, m_iBands, NULL, 0, 0, 0); //ȸߺ + CPLErr status = m_poDataset->RasterIO(GF_Read, nXOff, nYOff, nXSize, nYSize, pDataBuffer, xBuff, yBuff, GDT_Float32, m_iBands, NULL, 0, 0, 0); //先高后宽 if (status != CE_None) { - std::cout << "ȡӰʧܣ" << std::endl; + std::cout << "读取影像失败!" << std::endl; return 0; } diff --git a/HPPA/ImageReaderWriter.h b/HPPA/ImageReaderWriter.h index cbf687f..ae5967a 100644 --- a/HPPA/ImageReaderWriter.h +++ b/HPPA/ImageReaderWriter.h @@ -1,4 +1,4 @@ -#ifndef IMAGE_READER_WRITER +#ifndef IMAGE_READER_WRITER #define IMAGE_READER_WRITER #include "stdafx.h" #include "gdal_priv.h" diff --git a/HPPA/ImageViewer.cpp b/HPPA/ImageViewer.cpp index c03fdd7..e489c5a 100644 --- a/HPPA/ImageViewer.cpp +++ b/HPPA/ImageViewer.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include #include @@ -20,7 +20,7 @@ Mapcavas::Mapcavas(QWidget* pParent) :QGraphicsView(pParent) setRenderHint(QPainter::SmoothPixmapTransform); setDragMode(QGraphicsView::ScrollHandDrag); - // ʹ Qt Ĭ anchor Ϊ + // 使用 Qt 默认 anchor 行为以外的配置 setTransformationAnchor(QGraphicsView::NoAnchor); setResizeAnchor(QGraphicsView::NoAnchor); diff --git a/HPPA/ImageViewer.h b/HPPA/ImageViewer.h index 93d9e3c..a95f994 100644 --- a/HPPA/ImageViewer.h +++ b/HPPA/ImageViewer.h @@ -1,4 +1,4 @@ -#ifndef MAPCAVAS_H +#ifndef MAPCAVAS_H #define MAPCAVAS_H #include "QGraphicsView" @@ -35,15 +35,15 @@ public: void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; void scaling(qreal scaleFactor); - void zoomIn(); // Ŵ - void zoomOut(); // С - void zoom(float scaleFactor); // - scaleFactorŵı + void zoomIn(); // 放大 + void zoomOut(); // 缩小 + void zoom(float scaleFactor); // 缩放 - scaleFactor缩放的比例因子 - // ƽٶ + // 平移速度 void setTranslateSpeed(qreal speed); qreal translateSpeed() const; - // ŵ + // 缩放的增量 void setZoomDelta(qreal delta); qreal zoomDelta() const; @@ -63,16 +63,16 @@ protected: QGraphicsScene *m_qtGraphicsScene; private: QGraphicsPixmapItem *m_GraphicsPixmapItemHandle; - QLabel *m_framNumberLabel;//ʾʵʱɼ֡ + QLabel *m_framNumberLabel;//显示实时采集到的帧数 RasterLayer* m_rasterLayer = nullptr; // associated raster layer MapTool* m_mapTool = nullptr; // current active map tool - qreal m_translateSpeed; // ƽٶ - qreal m_zoomDelta; // ŵ - bool m_bMouseTranslate; // ƽƱʶ - QPoint m_lastMousePos; // µλ - qreal m_scale; // ֵ + qreal m_translateSpeed; // 平移速度 + qreal m_zoomDelta; // 缩放的增量 + bool m_bMouseTranslate; // 平移标识 + QPoint m_lastMousePos; // 鼠标最后按下的位置 + qreal m_scale; // 缩放值 double m_CrosshairHalfLen = 10.0; QGraphicsLineItem* m_hLine = nullptr; // horizontal line diff --git a/HPPA/ImagerPositionSimulation.cpp b/HPPA/ImagerPositionSimulation.cpp index 31e981e..2ad0ad9 100644 --- a/HPPA/ImagerPositionSimulation.cpp +++ b/HPPA/ImagerPositionSimulation.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "ImagerPositionSimulation.h" @@ -61,7 +61,7 @@ void ImagerPositionSimulation::mouseReleaseEvent(QMouseEvent *event) { QPoint viewPos = event->pos(); - //// + ////输出类型 //const type_info &x = typeid(imager); //qDebug() << "---------------type_info: " << x.name() << x.raw_name() << x.hash_code(); diff --git a/HPPA/ImagerPositionSimulation.h b/HPPA/ImagerPositionSimulation.h index a314b41..f2c9e7b 100644 --- a/HPPA/ImagerPositionSimulation.h +++ b/HPPA/ImagerPositionSimulation.h @@ -1,4 +1,4 @@ -#ifndef IMAGER_POSITION_SIMULATION +#ifndef IMAGER_POSITION_SIMULATION #define IMAGER_POSITION_SIMULATION #include #include @@ -16,7 +16,7 @@ public: void drawX(); - void setSceneRect();//QGraphicsViewviewportΪsceneRect + void setSceneRect();//将QGraphicsView的viewport设置为sceneRect QRectF sceneRect(); diff --git a/HPPA/LayerTree.cpp b/HPPA/LayerTree.cpp index 7499d1a..137c143 100644 --- a/HPPA/LayerTree.cpp +++ b/HPPA/LayerTree.cpp @@ -1,4 +1,4 @@ -#include "LayerTree.h" +#include "LayerTree.h" LayerTree::LayerTree(QObject* parent) : LayerTreeGroup("__root__", parent) diff --git a/HPPA/LayerTree.h b/HPPA/LayerTree.h index 050a1a4..3b45315 100644 --- a/HPPA/LayerTree.h +++ b/HPPA/LayerTree.h @@ -1,14 +1,14 @@ -#pragma once +#pragma once #include "LayerTreeGroupNode.h" /** - * LayerTreeͼڵ - * - ̳ LayerTreeGroupĸڵ - * - ṩɼԼ븸ڵ̬µľ̬ + * LayerTree:图层树根节点 + * - 继承自 LayerTreeGroup,本身就是树的根节点 + * - 提供可见性级联与父节点三态更新的静态工具 * - * ע⣺beginInsertRows/endInsertRows Qt Model ֪ͨӦ Model ã - * LayerTree ֻάݽṹȷԡ + * 注意:beginInsertRows/endInsertRows 等 Qt Model 变更通知应由 Model 驱动调用, + * LayerTree 只负责维护数据结构正确性。 */ class LayerTree : public LayerTreeGroup { @@ -20,7 +20,7 @@ public: LayerTree(const LayerTree&) = delete; LayerTree& operator=(const LayerTree&) = delete; - // ɼ߼ Model ã + // 可见性逻辑(供 Model 调用) static void setChildrenVisible(LayerTreeNode* n, Qt::CheckState state); static void updateParentVisibleFromChildren(LayerTreeNode* parent); }; diff --git a/HPPA/LayerTreeGroupNode.cpp b/HPPA/LayerTreeGroupNode.cpp index 621da50..b5832a7 100644 --- a/HPPA/LayerTreeGroupNode.cpp +++ b/HPPA/LayerTreeGroupNode.cpp @@ -1,4 +1,4 @@ -#include "LayerTreeGroupNode.h" +#include "LayerTreeGroupNode.h" #include "LayerTreeLayerNode.h" LayerTreeGroup::LayerTreeGroup(const QString& name, QObject* parent) diff --git a/HPPA/LayerTreeGroupNode.h b/HPPA/LayerTreeGroupNode.h index 1e80fa8..a146eaf 100644 --- a/HPPA/LayerTreeGroupNode.h +++ b/HPPA/LayerTreeGroupNode.h @@ -1,12 +1,12 @@ -#pragma once +#pragma once #include "LayerTreeNode.h" class LayerTreeLayer; /** - * LayerTreeGroupͼڵ - * - Ϊ LayerTreeNode - * - ṩͼڵ㣨LayerTreeLayerͼ飨LayerTreeGroupı + * LayerTreeGroup:图层组节点 + * - 基类为 LayerTreeNode + * - 提供插入图层节点(LayerTreeLayer)或图层组(LayerTreeGroup)的便利方法 */ class LayerTreeGroup : public LayerTreeNode { @@ -17,28 +17,28 @@ public: Type type() const override { return Type::Group; } - // + // 便利方法:插入子组 LayerTreeGroup* insertGroup(int index, const QString& name); LayerTreeGroup* addGroup(const QString& name); - // ͼڵ + // 便利方法:插入图层节点 LayerTreeLayer* insertLayer(int index, LayerTreeLayer* layer); LayerTreeLayer* addLayer(LayerTreeLayer* layer); - // ڵ + // 插入任意节点 void insertChildNode(int index, LayerTreeNode* node); void addChildNode(LayerTreeNode* node); - // Ƴӽڵ㣨 deleteرƳڵ㣩 + // 移除子节点(不 delete,返回被移除节点) LayerTreeNode* removeChildNode(LayerTreeNode* node); - // + // 查找 LayerTreeLayer* findLayer(const QString& name) const; QList findLayers() const; QList findGroups() const; - // Ժչcollapsed / groupOpacity + // 以后可扩展:collapsed / groupOpacity 等 }; -// +// 保持向后兼容 using LayerTreeGroupNode = LayerTreeGroup; diff --git a/HPPA/LayerTreeLayerNode.cpp b/HPPA/LayerTreeLayerNode.cpp index 16237bc..621d8d7 100644 --- a/HPPA/LayerTreeLayerNode.cpp +++ b/HPPA/LayerTreeLayerNode.cpp @@ -1,4 +1,4 @@ -#include "LayerTreeLayerNode.h" +#include "LayerTreeLayerNode.h" LayerTreeLayer::LayerTreeLayer(MapLayer* layer, QObject* parent) : LayerTreeNode(layer ? layer->name() : QString(), parent), m_layer(layer) @@ -10,7 +10,7 @@ LayerTreeNode::Type LayerTreeLayer::type() const return Type::Layer; } -// һ MapLayer ָ루ӵУ +// 持有一个 MapLayer 指针(不拥有) void LayerTreeLayer::setMapLayer(MapLayer* layer) { m_layer = layer; diff --git a/HPPA/LayerTreeLayerNode.h b/HPPA/LayerTreeLayerNode.h index 4c70663..5d4b679 100644 --- a/HPPA/LayerTreeLayerNode.h +++ b/HPPA/LayerTreeLayerNode.h @@ -1,11 +1,11 @@ -#pragma once +#pragma once #include "LayerTreeNode.h" #include "MapLayer.h" /** - * LayerTreeLayerͼڵ - * - Ϊ LayerTreeNode - * - һ MapLayer ָ루ӵУ + * LayerTreeLayer:图层节点 + * - 基类为 LayerTreeNode + * - 持有一个 MapLayer 指针(不拥有) */ class LayerTreeLayer : public LayerTreeNode { @@ -21,8 +21,8 @@ public: private: MapLayer* m_layer = nullptr; - // չlayerId / pointer / legendItems + // 可扩展:layerId / pointer / legendItems 等 }; -// +// 保持向后兼容 using LayerTreeLayerNode = LayerTreeLayer; diff --git a/HPPA/LayerTreeModel.cpp b/HPPA/LayerTreeModel.cpp index 740ff4f..04787e6 100644 --- a/HPPA/LayerTreeModel.cpp +++ b/HPPA/LayerTreeModel.cpp @@ -1,4 +1,4 @@ -#include "LayerTreeModel.h" +#include "LayerTreeModel.h" #include "LayerTreeGroupNode.h" #include "LayerTreeLayerNode.h" @@ -90,15 +90,15 @@ bool LayerTreeModel::setData(const QModelIndex& index, const QVariant& value, in n->setVisible(newState); - // 1) -> + // 1) 父 -> 子 级联 if (m_cascadeCheck) { LayerTree::setChildrenVisible(n, newState); } - // 2) -> PartiallyChecked + // 2) 子 -> 父 更新 PartiallyChecked LayerTree::updateParentVisibleFromChildren(n->parentNode()); - // 򻯣ˢ£滻Ϊ׼ dataChanged + // 简化:整体刷新(你后续可替换为精准 dataChanged) emit layoutChanged(); return true; } @@ -156,7 +156,7 @@ bool LayerTreeModel::cascadeCheckEnabled() const return m_cascadeCheck; } -// ʵ֣Ƴӽڵ㲢 model Ϸ begin/endRemoveRows +// 新增实现:移除子节点并在 model 上发出 begin/endRemoveRows LayerTreeNode* LayerTreeModel::removeNode(LayerTreeNode* parent, int row) { if (!parent) parent = m_tree; diff --git a/HPPA/LayerTreeModel.h b/HPPA/LayerTreeModel.h index 9d3bf4b..d575cec 100644 --- a/HPPA/LayerTreeModel.h +++ b/HPPA/LayerTreeModel.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include #include "LayerTree.h" @@ -6,9 +6,9 @@ class LayerTreeLayer; // forward declare /** - * LayerTreeModelQt 㣨ٹ - * - 1 Уƣͼ꣩+ checkbox - * - ѡɼԣѡѡ + * LayerTreeModel:Qt 适配层(不再管理树) + * - 1 列:名称(带图标)+ checkbox + * - 勾选可见性(可选级联勾选) */ class LayerTreeModel : public QAbstractItemModel { @@ -19,7 +19,7 @@ public: bool cascadeCheck = true); ~LayerTreeModel() override = default; - // QAbstractItemModel ӿ + // QAbstractItemModel 必须接口 QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex& child) const override; @@ -30,7 +30,7 @@ public: bool setData(const QModelIndex& index, const QVariant& value, int role) override; Qt::ItemFlags flags(const QModelIndex& index) const override; - // APIڲȷ begin/endInsertRows + // 对外 API:构建树(内部会正确调用 begin/endInsertRows) LayerTreeNode* root() const; LayerTreeNode* addGroup(LayerTreeNode* parent, const QString& name, const QIcon& icon = QIcon()); @@ -39,7 +39,7 @@ public: void setCascadeCheckEnabled(bool enabled); bool cascadeCheckEnabled() const; - // ӸڵƳӽڵ㣨װ LayerTree::removeNode model ֪ͨ + // 新增:从父节点移除子节点(包装 LayerTree::removeNode 并发出 model 通知) LayerTreeNode* removeNode(LayerTreeNode* parent, int row); private: diff --git a/HPPA/LayerTreeNode.cpp b/HPPA/LayerTreeNode.cpp index 9f9a48d..9401e8c 100644 --- a/HPPA/LayerTreeNode.cpp +++ b/HPPA/LayerTreeNode.cpp @@ -1,4 +1,4 @@ -#include "LayerTreeNode.h" +#include "LayerTreeNode.h" #include @@ -55,7 +55,7 @@ LayerTreeNode* LayerTreeNode::parentNode() const void LayerTreeNode::setParentNode(LayerTreeNode* p) { m_parentNode = p; - // QObject parent Ҳ棨 Qt ιҲӰֶ delete children + // 让 QObject 的 parent 也跟随(便于 Qt 对象层次管理,且不会影响我们手动 delete children) if (p) this->setParent(p); else this->setParent(nullptr); } diff --git a/HPPA/LayerTreeNode.h b/HPPA/LayerTreeNode.h index 3385342..1e65c7a 100644 --- a/HPPA/LayerTreeNode.h +++ b/HPPA/LayerTreeNode.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include @@ -6,14 +6,14 @@ #include /** - * LayerTreeNodeڵࣨ - * - ͨԣ/ͼ/ɼ/ӹϵ - * - Group / Layer ڵ̳ͨʵ - * - ṩ/ɾڵź֪ͨ + * LayerTreeNode:节点基类(抽象) + * - 仅包含通用属性:名称/图标/可见性/父子关系 + * - Group / Layer 节点通过继承实现 + * - 提供插入/删除节点的信号通知 * - * ˵ - * - ͬʱά"ָ"m_parentNode QObject parentѡ - * - children ɽڵԼвͷţʱ delete children + * 说明: + * - 这里同时维护"树父指针"(m_parentNode)与 QObject parent(可选) + * - children 由节点自己持有并负责释放(析构时 delete children) */ class LayerTreeNode : public QObject { @@ -52,8 +52,8 @@ public: void appendChild(LayerTreeNode* child); void insertChild(int row, LayerTreeNode* child); - // QgsLayerTreeNode::removeChildrenPrivate Ľ - // from: ʼ, count: Ƴ, destroy: true delete Ƴڵ + // 基于 QgsLayerTreeNode::removeChildrenPrivate 改进 + // from: 起始索引, count: 移除数量, destroy: true 则 delete 被移除节点 void removeChild(int from, int count, bool destroy = true); // ---- static type helpers ---- @@ -68,11 +68,11 @@ public: } signals: - // ڲӽڵ֮ǰ/֮󷢳 + // 在插入子节点之前/之后发出 void willAddChildren(LayerTreeNode* node, int indexFrom, int indexTo); void addedChildren(LayerTreeNode* node, int indexFrom, int indexTo); - // Ƴӽڵ֮ǰ/֮󷢳 + // 在移除子节点之前/之后发出 void willRemoveChildren(LayerTreeNode* node, int indexFrom, int indexTo); void removedChildren(LayerTreeNode* node, int indexFrom, int indexTo); diff --git a/HPPA/LayerTreeView.cpp b/HPPA/LayerTreeView.cpp index fd73c17..5260c62 100644 --- a/HPPA/LayerTreeView.cpp +++ b/HPPA/LayerTreeView.cpp @@ -1,4 +1,4 @@ -#include "LayerTreeView.h" +#include "LayerTreeView.h" #include "LayerTreeViewMenuProvider.h" #include #include diff --git a/HPPA/LayerTreeView.h b/HPPA/LayerTreeView.h index ab39dfc..0f149e9 100644 --- a/HPPA/LayerTreeView.h +++ b/HPPA/LayerTreeView.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include diff --git a/HPPA/LayerTreeViewMenuProvider.cpp b/HPPA/LayerTreeViewMenuProvider.cpp index a736cd9..d9e4faf 100644 --- a/HPPA/LayerTreeViewMenuProvider.cpp +++ b/HPPA/LayerTreeViewMenuProvider.cpp @@ -1,4 +1,4 @@ -#include "LayerTreeViewMenuProvider.h" +#include "LayerTreeViewMenuProvider.h" #include "LayerTreeView.h" #include "LayerTreeModel.h" #include "LayerTreeNode.h" @@ -36,7 +36,7 @@ QMenu* LayerTreeViewMenuProvider::createContextMenu() if (node->type() == LayerTreeNode::Type::Layer) { - QAction* removeAction = new QAction(QStringLiteral("Ƴͼ"), menu); + QAction* removeAction = new QAction(QStringLiteral("移除图层"), menu); connect(removeAction, &QAction::triggered, HPPA::instance(), &HPPA::removeLayerByTreeIndex); menu->addAction(removeAction); } @@ -45,7 +45,7 @@ QMenu* LayerTreeViewMenuProvider::createContextMenu() HPPA* app = HPPA::instance(); if (app && node == app->rasterGroupNode()) { - QAction* removeAllAction = new QAction(QStringLiteral("Ƴͼ"), menu); + QAction* removeAllAction = new QAction(QStringLiteral("移除所有图层"), menu); connect(removeAllAction, &QAction::triggered, app, &HPPA::removeAllLayersInRasterGroup); menu->addAction(removeAllAction); } diff --git a/HPPA/LayerTreeViewMenuProvider.h b/HPPA/LayerTreeViewMenuProvider.h index b1d56a0..4761122 100644 --- a/HPPA/LayerTreeViewMenuProvider.h +++ b/HPPA/LayerTreeViewMenuProvider.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include @@ -15,7 +15,7 @@ public: explicit LayerTreeViewMenuProvider(LayerTreeView* view, QObject* parent = nullptr); ~LayerTreeViewMenuProvider() override = default; - // ݸ index һ˵߸ɾص QMenu* + // 根据给定 index 创建一个菜单,调用者负责删除返回的 QMenu* QMenu* createContextMenu(); private: diff --git a/HPPA/MapLayer.cpp b/HPPA/MapLayer.cpp index e4122ca..9b89784 100644 --- a/HPPA/MapLayer.cpp +++ b/HPPA/MapLayer.cpp @@ -1,4 +1,4 @@ -#include "MapLayer.h" +#include "MapLayer.h" MapLayer::MapLayer(const QString& name, const QString& uri) : QObject(nullptr), m_name(name), m_uri(uri) diff --git a/HPPA/MapLayer.h b/HPPA/MapLayer.h index c9579f0..dd1bfdb 100644 --- a/HPPA/MapLayer.h +++ b/HPPA/MapLayer.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/MapLayerStore.cpp b/HPPA/MapLayerStore.cpp index 65ed3ad..f74ca03 100644 --- a/HPPA/MapLayerStore.cpp +++ b/HPPA/MapLayerStore.cpp @@ -1,4 +1,4 @@ -#include "MapLayerStore.h" +#include "MapLayerStore.h" #include "MapLayer.h" MapLayerStore::MapLayerStore(QObject* parent) diff --git a/HPPA/MapLayerStore.h b/HPPA/MapLayerStore.h index c535fa8..0988eda 100644 --- a/HPPA/MapLayerStore.h +++ b/HPPA/MapLayerStore.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/OneMotorControl.cpp b/HPPA/OneMotorControl.cpp index f5d0677..b01f118 100644 --- a/HPPA/OneMotorControl.cpp +++ b/HPPA/OneMotorControl.cpp @@ -1,4 +1,4 @@ -#include "OneMotorControl.h" +#include "OneMotorControl.h" OneMotorControl::OneMotorControl(QWidget* parent) : QDialog(parent) { @@ -27,7 +27,7 @@ void OneMotorControl::onConnectMotor() catch (std::exception const& e) { QMessageBox msgBox; - msgBox.setText(QString::fromLocal8Bit("")); + msgBox.setText(QString::fromLocal8Bit("请连接马达!")); msgBox.exec(); } diff --git a/HPPA/OneMotorControl.h b/HPPA/OneMotorControl.h index d336eda..01e8605 100644 --- a/HPPA/OneMotorControl.h +++ b/HPPA/OneMotorControl.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/PowerControl.cpp b/HPPA/PowerControl.cpp index 2bb9417..dcb231d 100644 --- a/HPPA/PowerControl.cpp +++ b/HPPA/PowerControl.cpp @@ -1,4 +1,4 @@ -#include "PowerControl.h" +#include "PowerControl.h" PowerControl::PowerControl(QWidget *parent) : QDialog(parent) diff --git a/HPPA/PowerControl.h b/HPPA/PowerControl.h index 3181f86..2d92722 100644 --- a/HPPA/PowerControl.h +++ b/HPPA/PowerControl.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/QDoubleSlider.cpp b/HPPA/QDoubleSlider.cpp index b3aaad9..938558c 100644 --- a/HPPA/QDoubleSlider.cpp +++ b/HPPA/QDoubleSlider.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "qDoubleSlider.h" QDoubleSlider::QDoubleSlider(QWidget* pParent /*= NULL*/) : QSlider(pParent), @@ -13,13 +13,13 @@ m_Multiplier(100.0) setFocusPolicy(Qt::NoFocus); } -//ⷢ +//向外发射 void QDoubleSlider::notifyValueChanged(int Value) { emit valueChanged((double)Value / m_Multiplier); } -// +//接收外边 void QDoubleSlider::setValue(double Value, bool BlockSignals) { QSlider::blockSignals(BlockSignals); diff --git a/HPPA/QDoubleSlider.h b/HPPA/QDoubleSlider.h index dcfdd22..160557e 100644 --- a/HPPA/QDoubleSlider.h +++ b/HPPA/QDoubleSlider.h @@ -1,4 +1,4 @@ -#ifndef Q_DOUBLE_SLIDER_H +#ifndef Q_DOUBLE_SLIDER_H #define Q_DOUBLE_SLIDER_H #include #include @@ -17,14 +17,14 @@ public: double value() const; public slots: - void notifyValueChanged(int value);//źvalueChanged(int)wrap - void setValue(double Value, bool BlockSignals = true);//QSlider::setValuewrap + void notifyValueChanged(int value);//信号valueChanged(int)的wrap + void setValue(double Value, bool BlockSignals = true);//QSlider::setValue函数的wrap private slots: signals : - void valueChanged(double Value);//QSlidervalueChangedźŵIJΪ - void rangeChanged(double Min, double Max);//QSliderrangeChangedźŵIJΪ + void valueChanged(double Value);//QSlider的valueChanged信号的参数为整型 + void rangeChanged(double Min, double Max);//QSlider的rangeChanged信号的参数为整型 private: double m_Multiplier; diff --git a/HPPA/QMotorDoubleSlider.cpp b/HPPA/QMotorDoubleSlider.cpp index 32ccca3..57db859 100644 --- a/HPPA/QMotorDoubleSlider.cpp +++ b/HPPA/QMotorDoubleSlider.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "QMotorDoubleSlider.h" QMotorDoubleSlider::QMotorDoubleSlider(QWidget* pParent /*= NULL*/) :QSlider(pParent) { @@ -14,9 +14,9 @@ QMotorDoubleSlider::QMotorDoubleSlider(QWidget* pParent /*= NULL*/) :QSlider(pPa void QMotorDoubleSlider::setMultiplier(float lead, float stepAnglemar, float scaleFactor, int subdivisionParam) { - //ݹʽ廻Ϊ룺1(m_Multiplier)=/(360/*ϸֱ)ַhttps://wenku.baidu.com/view/4b2ea88bd0d233d4b14e69b8.html - //m_Multiplier(0.00054496986),//ϺũԺ޸ǰ0.00052734375/5=0.00010546875޸ĺ׼ȷֵΪ0.000544969862759644Ϊ0.00054496986/5=0.000108993972Ϊиеװ1Ҫ5 - //m_Multiplier(0.00054496986)//˰ũ + //根据公式将脉冲换算为距离:1脉冲距离(m_Multiplier)=导程/(360/步距角*细分倍数);网址:https://wenku.baidu.com/view/4b2ea88bd0d233d4b14e69b8.html + //m_Multiplier(0.00054496986),//上海农科院,修改前:0.00052734375/5=0.00010546875;修改后准确值为0.000544969862759644,近似为0.00054496986/5=0.000108993972,因为有个机械装置1脉冲距离需要除以5; + //m_Multiplier(0.00054496986)//兴安盟农研所 m_Multiplier = lead / (360 / stepAnglemar * getValidSubdivision(subdivisionParam)) * scaleFactor; } @@ -38,13 +38,13 @@ int QMotorDoubleSlider::getValidSubdivision(int subdivisionParam) return 256; } -//ⷢ +//向外发射 void QMotorDoubleSlider::notifyValueChanged(int Value) { emit valueChanged((double)Value * m_Multiplier);////////// } -// +//接收外边 void QMotorDoubleSlider::setValue(double Value, bool BlockSignals) { QSlider::blockSignals(BlockSignals); diff --git a/HPPA/QMotorDoubleSlider.h b/HPPA/QMotorDoubleSlider.h index 5a383a3..597686e 100644 --- a/HPPA/QMotorDoubleSlider.h +++ b/HPPA/QMotorDoubleSlider.h @@ -1,4 +1,4 @@ -#ifndef Q_MOTOR_DOUBLE_SLIDER_H +#ifndef Q_MOTOR_DOUBLE_SLIDER_H #define Q_MOTOR_DOUBLE_SLIDER_H #include #include @@ -15,7 +15,7 @@ public: void setMultiplier(float lead, float stepAnglemar, float scaleFactor, int subdivisionParam); int getValidSubdivision(int subdivisionParam); - double m_Multiplier;//ݹʽ廻Ϊ룺1(m_Multiplier)=/(360/*ϸֱ)ַhttps://wenku.baidu.com/view/4b2ea88bd0d233d4b14e69b8.html + double m_Multiplier;//根据公式将脉冲换算为距离:1脉冲距离(m_Multiplier)=导程/(360/步距角*细分倍数);网址:https://wenku.baidu.com/view/4b2ea88bd0d233d4b14e69b8.html void setRange(double Min, double Max); void setMinimum(double Min); @@ -23,13 +23,13 @@ public: void setMaximum(double Max); double maximum() const; double value() const; - double OriginalValue() const;//ֵҪʵʵֵǾ - long getPositionPulse(double position);//ݴľ뷵ֵ + double OriginalValue() const;//返回脉冲值:马达需要实际的脉冲值,而不是距离 + long getPositionPulse(double position);//根据传入的距离返回脉冲值 double getDistanceFromPulse(int pulse); public slots: - void notifyValueChanged(int value);//źvalueChanged(int)wrap - void setValue(double Value, bool BlockSignals = true);//QSlider::setValuewrap + void notifyValueChanged(int value);//信号valueChanged(int)的wrap + void setValue(double Value, bool BlockSignals = true);//QSlider::setValue函数的wrap signals: void valueChanged(double Value); diff --git a/HPPA/RasterDataProvider.cpp b/HPPA/RasterDataProvider.cpp index 80fc349..ac6d827 100644 --- a/HPPA/RasterDataProvider.cpp +++ b/HPPA/RasterDataProvider.cpp @@ -1,4 +1,4 @@ -#include "RasterDataProvider.h" +#include "RasterDataProvider.h" #include #include #include diff --git a/HPPA/RasterDataProvider.h b/HPPA/RasterDataProvider.h index de1ce9f..630190b 100644 --- a/HPPA/RasterDataProvider.h +++ b/HPPA/RasterDataProvider.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/RasterLayer.cpp b/HPPA/RasterLayer.cpp index 7751f88..378dec7 100644 --- a/HPPA/RasterLayer.cpp +++ b/HPPA/RasterLayer.cpp @@ -1,4 +1,4 @@ -#include "RasterLayer.h" +#include "RasterLayer.h" #include "RasterDataProvider.h" #include "RasterRenderer.h" #include diff --git a/HPPA/RasterLayer.h b/HPPA/RasterLayer.h index 462a3fe..fafb800 100644 --- a/HPPA/RasterLayer.h +++ b/HPPA/RasterLayer.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "MapLayer.h" #include diff --git a/HPPA/RasterRenderer.cpp b/HPPA/RasterRenderer.cpp index 6e045be..6e9ba4e 100644 --- a/HPPA/RasterRenderer.cpp +++ b/HPPA/RasterRenderer.cpp @@ -1,4 +1,4 @@ -#include "RasterRenderer.h" +#include "RasterRenderer.h" #include "RasterDataProvider.h" #include #include diff --git a/HPPA/RasterRenderer.h b/HPPA/RasterRenderer.h index 8ba412b..648b461 100644 --- a/HPPA/RasterRenderer.h +++ b/HPPA/RasterRenderer.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/ResononNirImager.cpp b/HPPA/ResononNirImager.cpp index e5d30a6..3a6cf90 100644 --- a/HPPA/ResononNirImager.cpp +++ b/HPPA/ResononNirImager.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include #include #include @@ -14,7 +14,7 @@ ResononNirImager::~ResononNirImager() { if (buffer != nullptr) { - std::cout << "ͷŶڴ" << std::endl; + std::cout << "释放堆上内存" << std::endl; free(buffer); free(dark); free(white); @@ -40,12 +40,12 @@ double ResononNirImager::getIntegrationTime() double ResononNirImager::getGain() { //return m_ResononNirImager.get_gain(); - return 0.0;//nir֧gian + return 0.0;//nir不支持gian } void ResononNirImager::setGain(const double gain) { - //m_ResononNirImager.set_gain(gain);//nir֧gian + //m_ResononNirImager.set_gain(gain);//nir不支持gian } void ResononNirImager::setFramerate(const double frames_per_second) @@ -103,12 +103,12 @@ void ResononNirImager::setSpectraBin(int new_spectral_bin) double ResononNirImager::auto_exposure() { - //һعʱΪڵǰ֡ - double x = 1 / getFramerate() * 1000;//ȡعʱ + //第一步:先设置曝光时间为在当前帧率情况下最大 + double x = 1 / getFramerate() * 1000;//获取最大毫秒曝光时间 reConnectImage(); setIntegrationTime(x); - //ڶͨѭѰعʱ + //第二步:通过循环寻找最佳曝光时间 imagerStartCollect(); while (true) @@ -117,7 +117,7 @@ double ResononNirImager::auto_exposure() if (GetMaxValue(buffer, m_FrameSize) >= 4095) { setIntegrationTime(getIntegrationTime() * 0.8); - std::cout << "Զع-----------" << std::endl; + std::cout << "自动曝光-----------" << std::endl; } else { @@ -128,7 +128,7 @@ double ResononNirImager::auto_exposure() reConnectImage(); //imagerStopCollect(); - //std::cout << "Զع⣺" << getIntegrationTime() << std::endl; + //std::cout << "自动曝光:" << getIntegrationTime() << std::endl; return getIntegrationTime(); } @@ -151,7 +151,7 @@ int ResononNirImager::getSampleCount() void ResononNirImager::focus() { m_iFocusFrameCounter = 1; - //std::cout << "-----------" << std::endl; + //std::cout << "调焦-----------" << std::endl; double tmpFrmerate = getFramerate(); double tmpIntegrationTime = getIntegrationTime(); @@ -159,7 +159,7 @@ void ResononNirImager::focus() setFramerate(5); auto_exposure(); - std::cout << "õعʱΪ" << getIntegrationTime() << std::endl; + std::cout << "调焦获得的曝光时间为:" << getIntegrationTime() << std::endl; reConnectImage(); imagerStartCollect(); @@ -183,12 +183,12 @@ void ResononNirImager::focus() reConnectImage(); setIntegrationTime(tmpIntegrationTime); - setFramerate(tmpFrmerate);//ҪдҪ + setFramerate(tmpFrmerate);//必须要放在这里,如果不放这里,这行代码就要出错。。。。。。 } void ResononNirImager::record_dark() { - std::cout << "ɼ" << std::endl; + std::cout << "采集暗电流!!!!!!!!!" << std::endl; reConnectImage(); imagerStartCollect(); @@ -221,7 +221,7 @@ void ResononNirImager::record_dark() void ResononNirImager::record_white() { - std::cout << "ɼװ壡" << std::endl; + std::cout << "采集白板!!!!!!!!!" << std::endl; reConnectImage(); imagerStartCollect(); @@ -247,7 +247,7 @@ void ResononNirImager::record_white() imagerStopCollect(); - //װ۰ + //白板扣暗电流 if (m_HasDark) { for (size_t i = 0; i < m_FrameSize; i++) @@ -275,17 +275,17 @@ void ResononNirImager::start_record() //std::cout << "------------------------------------------------------" << std::endl; m_iFrameCounter = 0; - m_RgbImage->m_iFrameCounter = 0;//rgbͼĵ0 + m_RgbImage->m_iFrameCounter = 0;//设置填充rgb图像的第0行 m_bRecordControlState = true; - //жڴbufferǷ + //判断内存buffer是否正常分配 if (buffer == 0) { std::cerr << "Error: memory could not be allocated for datacube"; exit(EXIT_FAILURE); } - // ڿʼɼʱļϢUI д MapLayer + // 在开始采集时仅发出文件信息,UI 层自行创建 MapLayer 并管理生命周期 // prepare file name that will be used for saving m_FileName2Save2 = m_FileName2Save + "_" + std::to_string(m_FileSavedCounter) + ".bil"; QString baseName = QString::fromStdString(getFileNameFromPath(m_FileName2Save2)); @@ -300,7 +300,7 @@ void ResononNirImager::start_record() string timesFile = removeFileExtension(m_FileName2Save2) + ".times"; FILE* hTimesFile = fopen(timesFile.c_str(), "w+"); - reConnectImage();//nirڶβɼʱҪimagerStartCollect()ᱨ + reConnectImage();//nir第二次采集时需要重新连接相机,否则函数imagerStartCollect()会报错。。。。。。 imagerStartCollect(); while (m_bRecordControlState) { @@ -310,7 +310,7 @@ void ResononNirImager::start_record() long long timeOs = getNanosecondsSinceMidnight(); //qDebug() << "time ns-------------------: " << timeOs; - //ȥӦΪbufferdarkunsigned shortԵdark>bufferʱbuffer-dark=65535 + //减去暗电流,应为buffer和dark都是unsigned short,所以当dark>buffer时,buffer-dark=65535 if (m_HasDark) { for (size_t i = 0; i < m_FrameSize; i++) @@ -328,12 +328,12 @@ void ResononNirImager::start_record() } - //ת + //转反射率 if (m_HasWhite) { for (size_t i = 0; i < m_FrameSize; i++) { - //װ壩Ϊ0 + //处理除数(白板)为0的情况 if (white[i] != 0) { pixelValueTmp = buffer[i]; @@ -351,12 +351,12 @@ void ResononNirImager::start_record() x = fwrite(buffer, 2, m_FrameSize, m_fImage); fprintf(hTimesFile, "%ll\n", timeOs); - //rgbȡԱڽʾ + //将rgb波段提取出来,以便在界面中显示 m_RgbImage->FillRgbImage(buffer);//?????????????????????????????????????????????????????????????????????????????????????????????????????? - //std::cout << "" << m_iFrameCounter << "֡д" << x << "unsigned short" << std::endl; + //std::cout << "第" << m_iFrameCounter << "帧写了" << x << "个unsigned short。" << std::endl; - //ÿ1sһνͼλ + //每隔1s进行一次界面图形绘制 if (m_iFrameCounter % (int)getFramerate() == 0) { emit PlotSignal(m_FileSavedCounter, m_iFrameCounter, filePath); @@ -370,15 +370,15 @@ void ResononNirImager::start_record() } imagerStopCollect(); - //һλͼǰҪһ + //在最后一次画图前需要进行一次拉伸 //m_RgbImage - emit PlotSignal(m_FileSavedCounter, -1, filePath);//ɼɺһλͼԷɼ֡֡ʵıʱͼȫ + emit PlotSignal(m_FileSavedCounter, -1, filePath);//采集完成后进行一次画图,以防采集帧数不是帧率的倍数时,画图不全 m_bRecordControlState = false; WriteHdr(); - // ImageFileSaved źţ֪ͨ UI Ѹļͼ - // m_FileName2Save2 ˱д .bil ļ "tmp_image_0.bil" + // 发射 ImageFileSaved 信号,通知 UI 层把该文件加入图层管理器 + // m_FileName2Save2 保存了本次写入的 .bil 文件名(例如 "tmp_image_0.bil") emit ImageFileSaved(QString::fromStdString(m_FileName2Save2), m_FileSavedCounter); m_FileSavedCounter++; diff --git a/HPPA/ResononNirImager.h b/HPPA/ResononNirImager.h index 4e310a3..e518888 100644 --- a/HPPA/ResononNirImager.h +++ b/HPPA/ResononNirImager.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/RgbCameraOperation.cpp b/HPPA/RgbCameraOperation.cpp index ab24e12..5b08299 100644 --- a/HPPA/RgbCameraOperation.cpp +++ b/HPPA/RgbCameraOperation.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "RgbCameraOperation.h" RgbCameraOperation::RgbCameraOperation() @@ -14,14 +14,14 @@ RgbCameraOperation::~RgbCameraOperation() void RgbCameraOperation::OpenCamera() { - std::cout << "ͷ+++++++++++++++++++++++++++++++++++++++++++" << std::endl; + std::cout << "打开摄像头+++++++++++++++++++++++++++++++++++++++++++" << std::endl; cam = new cv::VideoCapture(0); record = true; while (record) { - //std::cout << "ɼӰ+++++++++++++++++++++++++++++++++++++++++++" << std::endl; + //std::cout << "采集影像+++++++++++++++++++++++++++++++++++++++++++" << std::endl; cam->read(frame); m_qImage = m_ImageProcessor->Mat2QImage(frame); @@ -36,14 +36,14 @@ void RgbCameraOperation::OpenCamera() void RgbCameraOperation::OpenCamera_callback() { - std::cout << "ͷ+++++++++++++++++++++++++++++++++++++++++++" << std::endl; + std::cout << "打开摄像头+++++++++++++++++++++++++++++++++++++++++++" << std::endl; cam = new cv::VideoCapture(0); record = true; while (record) { - //std::cout << "ɼӰ+++++++++++++++++++++++++++++++++++++++++++" << std::endl; + //std::cout << "采集影像+++++++++++++++++++++++++++++++++++++++++++" << std::endl; cam->read(frame); m_qImage = m_ImageProcessor->Mat2QImage(frame); @@ -62,7 +62,7 @@ void RgbCameraOperation::setCallback(void(*func)()) void RgbCameraOperation::CloseCamera() { - std::cout << "رͷ+++++++++++++++++++++++++++++++++++++++++++" << std::endl; + std::cout << "关闭摄像头+++++++++++++++++++++++++++++++++++++++++++" << std::endl; record = false; } diff --git a/HPPA/RgbCameraOperation.h b/HPPA/RgbCameraOperation.h index d993049..4b36edc 100644 --- a/HPPA/RgbCameraOperation.h +++ b/HPPA/RgbCameraOperation.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #ifndef RGBCAMERAOPERATION_H #define RGBCAMERAOPERATION_H @@ -36,7 +36,7 @@ private: public slots: void OpenCamera(); - void OpenCamera_callback();//ʹźŶʹûص֪ͨˢƵ + void OpenCamera_callback();//不使用信号而使用回调函数来通知界面刷新视频 void CloseCamera(); signals: diff --git a/HPPA/RobotArmControl.cpp b/HPPA/RobotArmControl.cpp index 4f434e8..75f5106 100644 --- a/HPPA/RobotArmControl.cpp +++ b/HPPA/RobotArmControl.cpp @@ -1,4 +1,4 @@ -#include "RobotArmControl.h" +#include "RobotArmControl.h" RobotArmControl::RobotArmControl(QWidget* parent): QDialog(parent) { @@ -82,7 +82,7 @@ void RobotArmControl::getTaskList() files.append(line.trimmed()); } - ////ݣȻ + ////先清除数据,然后添加数据 //for (size_t i = 0; i < files.length(); i++) //{ // int row = m_pModel->rowCount(); @@ -112,7 +112,7 @@ void RobotArmControl::executeTaskWithHyperImager() QModelIndex index = ui.taskList_listView->currentIndex(); if (-1 == index.row()) { - //ʾûѡļ + //弹窗提示用户选择文件 ui.textEdit->append("Please select file on the left!"); return; } @@ -148,7 +148,7 @@ void RobotArmControl::executeTaskWithoutHyperImager() QModelIndex index = ui.taskList_listView->currentIndex(); if (-1 == index.row()) { - //ʾûѡļ + //弹窗提示用户选择文件 ui.textEdit->append("Please select file on the left!"); return; } @@ -290,7 +290,7 @@ bool RobotController::processResponse_getJbiState(QJsonObject response, QString& void RobotController::getPoint() { QJsonObject response; - getJbiState(response);//0 ֹͣ״̬,1 ͣ״̬,2 ͣ״̬,3 ״̬,4 ״̬ + getJbiState(response);//0 停止状态,1 暂停状态,2 急停状态,3 运行状态,4 错误状态 QString result; bool x = processResponse_getJbiState(response, result); //qDebug() << "getJbiState:" << result; @@ -302,7 +302,7 @@ void RobotController::getPoint() m_iCurrentJbiJobLine = 0; m_iFileCounter = 0; - //źţֹͣɼ + //发射信号,相机停止采集 emit hsiRecordSignal(-1); return; @@ -321,12 +321,12 @@ void RobotController::getPoint() m_iFileCounter++; qDebug() << "Changed! CurrentJobLine:" << m_iCurrentJbiJobLine_tmp; - //źţֹͣɼ + //发射信号,相机停止采集 emit hsiRecordSignal(-1); m_iCurrentJbiJobLine = m_iCurrentJbiJobLine_tmp; - //źţʼɼ + //发射信号,相机开始采集 emit hsiRecordSignal(m_iFileCounter); } } @@ -421,7 +421,7 @@ bool RobotController::getRobotMode(QJsonObject& re) bool RobotController::checkJbiExist(const QString& jbiFilename, QJsonObject& re) { QJsonObject paramsRunJbi; - paramsRunJbi["filename"] = jbiFilename;//ʹöṹ + paramsRunJbi["filename"] = jbiFilename;//使用对象结构 sendCommand("checkJbiExist", paramsRunJbi); socket->waitForReadyRead(m_iTimeout); @@ -432,7 +432,7 @@ bool RobotController::checkJbiExist(const QString& jbiFilename, QJsonObject& re) bool RobotController::setServoStatus(int status, QJsonObject& re) { QJsonObject params_set_servo_status; - params_set_servo_status["status"] = status;//ʹöṹ + params_set_servo_status["status"] = status;//使用对象结构 sendCommand("set_servo_status", params_set_servo_status); socket->waitForReadyRead(m_iTimeout); @@ -443,7 +443,7 @@ bool RobotController::setServoStatus(int status, QJsonObject& re) bool RobotController::runJbi(const QString& jbiFilename, QJsonObject& re, bool isRecordHsi) { QJsonObject paramsRunJbi; - paramsRunJbi["filename"] = jbiFilename;//ʹöṹ + paramsRunJbi["filename"] = jbiFilename;//使用对象结构 sendCommand("runJbi", paramsRunJbi); socket->waitForReadyRead(m_iTimeout); diff --git a/HPPA/RobotArmControl.h b/HPPA/RobotArmControl.h index 29497a5..7dcc079 100644 --- a/HPPA/RobotArmControl.h +++ b/HPPA/RobotArmControl.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include #include @@ -26,33 +26,33 @@ struct ECData quint32 msgSize; quint64 timeStamp; quint8 auto_cycle; - double machinePos[8];//ؽ - double machinePose[6];// - double machineUserPose[6];//û - double torque[8];//ؽڶذٷֱ - quint32 robotState;//״̬ - quint32 servoReady;//ŷʹ״̬ - quint32 can_motor_run;//ͬ״̬ - qint32 motor_speed[8];//ת - quint32 robotMode;//ģʽ - double analog_ioInput[3];//ģ - double analog_ioOutput[5];//ģ - quint64 digital_ioInput;//ݵĶʽ - quint64 digital_ioOutput;//ݵĶʽ - quint8 collision;//ײ״̬ - double machineFlangePose[6];//ϵµķλ - double machineUserFlangePose[6];//ûϵµķλ - quint8 emergencyStopState;//ǰǷڼͣ״̬ - double tcpSpeed;//tcp˶ٶ - double joIntSpeed[8];//ؽ˶¸ؽ˶ٶ - double tcpAcc;//tcpٶ - double joIntAcc[8];//ؽ˶¸ؽڼٶ - double joIntTemperature[6];//¶ - double joIntTorque[6];//Ť - double extJoIntTorques[6];//ⲿؽŤֵ - double exTcpForceIntool[6];//ǰϵµⲿĩ/عֵ - quint8 dragState;//϶ʹ״̬ - quint8 sensor_connected_state;//ش״̬ + double machinePos[8];//关节坐标 + double machinePose[6];//基座坐标 + double machineUserPose[6];//用户坐标 + double torque[8];//关节额定力矩百分比 + quint32 robotState;//机器人状态 + quint32 servoReady;//伺服使能状态 + quint32 can_motor_run;//同步状态 + qint32 motor_speed[8];//各轴电机转速 + quint32 robotMode;//机器人模式 + double analog_ioInput[3];//模拟量输入口数据 + double analog_ioOutput[5];//模拟量输出口数据 + quint64 digital_ioInput;//数字量输入口数据的二进制形式 + quint64 digital_ioOutput;//数字量输出口数据的二进制形式 + quint8 collision;//碰撞报警状态 + double machineFlangePose[6];//基座坐标系下的法兰盘中心位姿 + double machineUserFlangePose[6];//用户坐标系下的法兰盘中心位姿 + quint8 emergencyStopState;//当前是否处于急停状态 + double tcpSpeed;//tcp运动速度 + double joIntSpeed[8];//关节运动下各关节运动速度 + double tcpAcc;//tcp加速度 + double joIntAcc[8];//关节运动下各关节加速度 + double joIntTemperature[6];//温度 + double joIntTorque[6];//输出扭矩 + double extJoIntTorques[6];//外部关节扭矩值 + double exTcpForceIntool[6];//当前工具坐标系下的外部末端力/力矩估计值 + quint8 dragState;//拖动使能状态 + quint8 sensor_connected_state;//力控传感器连接状态 quint8 reserved; quint32 matchingWord; }; @@ -98,10 +98,10 @@ public: bool processResponse_getJbiState(QJsonObject response, QString& result); bool getRobotPose(QJsonObject& re); - bool getRobotState(QJsonObject& re);//ֹͣ״̬ 0ͣ״̬ 1ͣ״̬ 2״̬ 3״̬ 4ײ״̬ 5 - bool getJbiState(QJsonObject& re);//0 ֹͣ״̬,1 ͣ״̬,2 ͣ״̬,3 ״̬,4 ״̬ + bool getRobotState(QJsonObject& re);//停止状态 0,暂停状态 1,急停状态 2,运行状态 3,报警状态 4,碰撞状态 5 + bool getJbiState(QJsonObject& re);//0 停止状态,1 暂停状态,2 急停状态,3 运行状态,4 错误状态 bool getCurrentJobLine(QJsonObject& re); - bool getRobotMode(QJsonObject& re);//ʾģʽ 0Զģʽ 1Զģʽ 2 + bool getRobotMode(QJsonObject& re);//示教模式 0,自动模式 1,远程模式 2 bool checkJbiExist(const QString& jbiFilename, QJsonObject& re); bool setServoStatus(int status, QJsonObject& re); bool runJbi(const QString& jbiFilename, QJsonObject& re, bool isRecordHsi); diff --git a/HPPA/TabManager.cpp b/HPPA/TabManager.cpp index b845442..572ff4a 100644 --- a/HPPA/TabManager.cpp +++ b/HPPA/TabManager.cpp @@ -1,4 +1,4 @@ -#include "TabManager.h" +#include "TabManager.h" TabManager::TabManager(QTabWidget* tabWidget, QObject* parent) : QObject(parent), @@ -27,7 +27,7 @@ void TabManager::hideTab(QWidget* page) m_hiddenTabs.insert(page, info); - // صǵǰҳлհ + // 如果隐藏的是当前页,先切换,避免空白 if (m_tabWidget->currentIndex() == index) { int next = (index > 0) ? index - 1 : 0; diff --git a/HPPA/TabManager.h b/HPPA/TabManager.h index 22ad759..fd7d227 100644 --- a/HPPA/TabManager.h +++ b/HPPA/TabManager.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/View3D.h b/HPPA/View3D.h index 9bbb63d..c5facaa 100644 --- a/HPPA/View3D.h +++ b/HPPA/View3D.h @@ -1,4 +1,4 @@ -#ifndef VIEW3D_H +#ifndef VIEW3D_H #define VIEW3D_H #include diff --git a/HPPA/View3DModelManager.cpp b/HPPA/View3DModelManager.cpp index 0b796c4..28e1552 100644 --- a/HPPA/View3DModelManager.cpp +++ b/HPPA/View3DModelManager.cpp @@ -1,4 +1,4 @@ -#include "View3DModelManager.h" +#include "View3DModelManager.h" View3DModelManager::View3DModelManager(QWidget* parent) : QWidget(parent) diff --git a/HPPA/View3DModelManager.h b/HPPA/View3DModelManager.h index 9ee0b8e..6729e39 100644 --- a/HPPA/View3DModelManager.h +++ b/HPPA/View3DModelManager.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include #include diff --git a/HPPA/aboutWindow.cpp b/HPPA/aboutWindow.cpp index 7cddd1c..68b83d2 100644 --- a/HPPA/aboutWindow.cpp +++ b/HPPA/aboutWindow.cpp @@ -1,4 +1,4 @@ -#include "aboutWindow.h" +#include "aboutWindow.h" #include #include @@ -6,7 +6,7 @@ aboutWindow::aboutWindow(QWidget* parent) { ui.setupUi(this); - ui.companylname_label->setOpenExternalLinks(true);//Ϊtrueܴҳ + ui.companylname_label->setOpenExternalLinks(true);//设置为true才能打开网页 QString text = ui.companylname_label->text(); ui.companylname_label->setText("" + text); diff --git a/HPPA/aboutWindow.h b/HPPA/aboutWindow.h index 6ad442a..fd98533 100644 --- a/HPPA/aboutWindow.h +++ b/HPPA/aboutWindow.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/adjustTable.cpp b/HPPA/adjustTable.cpp index e6c5273..36b43b6 100644 --- a/HPPA/adjustTable.cpp +++ b/HPPA/adjustTable.cpp @@ -1,4 +1,4 @@ -#include "adjustTable.h" +#include "adjustTable.h" adjustTable::adjustTable(QWidget *parent) : QDialog(parent) diff --git a/HPPA/adjustTable.h b/HPPA/adjustTable.h index 79fa265..d663b1b 100644 --- a/HPPA/adjustTable.h +++ b/HPPA/adjustTable.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/fileOperation.cpp b/HPPA/fileOperation.cpp index 79916be..1080bdc 100644 --- a/HPPA/fileOperation.cpp +++ b/HPPA/fileOperation.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "fileOperation.h" #include "AppSettings.h" @@ -38,7 +38,7 @@ string FileOperation::getDirectoryFromString(string directory) if (!dir.exists(tmp)) { bool res = dir.mkpath(tmp); - //qDebug() << "½Ŀ¼Ƿɹ" << res; + //qDebug() << "新建目录是否成功" << res; } return directory; } @@ -58,9 +58,9 @@ bool FileOperation::copyFile(QString source, QString target) while (!in.eof()) { - in.read(buffer, 256); //ļжȡ256ֽڵݵ - n = in.gcount(); //һв֪ȡ˶ֽڵݣúһ¡ - out.write(buffer, n); //дǸֽڵ + in.read(buffer, 256); //从文件中读取256个字节的数据到缓存区 + n = in.gcount(); //由于最后一行不知读取了多少字节的数据,所以用函数计算一下。 + out.write(buffer, n); //写入那个字节的数据 } in.close(); out.close(); @@ -68,7 +68,7 @@ bool FileOperation::copyFile(QString source, QString target) string::size_type idx; idx = source1.find("hdr"); - if (idx == string::npos) //ڡ + if (idx == string::npos) //不存在。 emit CopyFinishedSignal(); return 1; diff --git a/HPPA/fileOperation.h b/HPPA/fileOperation.h index 44adf3c..fdfc6e8 100644 --- a/HPPA/fileOperation.h +++ b/HPPA/fileOperation.h @@ -1,4 +1,4 @@ -#ifndef FILE_OPERATIOIN_H +#ifndef FILE_OPERATIOIN_H #define FILE_OPERATIOIN_H #include @@ -36,6 +36,6 @@ public Q_SLOTS: signals: - void CopyFinishedSignal();//Ӱź + void CopyFinishedSignal();//绘制影像信号 }; #endif diff --git a/HPPA/focusWindow.h b/HPPA/focusWindow.h index 54c9199..f5b8d89 100644 --- a/HPPA/focusWindow.h +++ b/HPPA/focusWindow.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "windows.h" #include @@ -33,19 +33,19 @@ #include #include -// ݼ¼ṹ +// 数据记录结构体 struct PositionData { - double targetPosition; // Ŀλ - double actualPosition; // ʵλ - double cameraIndex; // ɼָ - QDateTime timestamp; // ʱ + double targetPosition; // 目标位置 + double actualPosition; // 实际马达位置 + double cameraIndex; // 相机采集指数 + QDateTime timestamp; // 时间戳 PositionData(double target = 0, double actual = 0.0, double index = 0.0) : targetPosition(target), actualPosition(actual), cameraIndex(index), timestamp(QDateTime::currentDateTime()) {} }; -// Э +// 协调控制器 class MotionCaptureCoordinator : public QObject { Q_OBJECT @@ -59,7 +59,7 @@ public: bool saveToCsv(const QString& filename); public slots: - void startStepMotion(double speed, int stepInterval = 100, double startPos = 0, double endPos = -1);//-1ܵԶλ + void startStepMotion(double speed, int stepInterval = 100, double startPos = 0, double endPos = -1);//-1:马达能到达的最远位置 void stopStepMotion(); signals: @@ -159,7 +159,7 @@ public Q_SLOTS: void onExit(); signals: - void StartManualFocusSignal(int);//1ʼ0ֹͣ + void StartManualFocusSignal(int);//1:开始调焦;0:停止调焦; void move2LocSignal(int, double, double, int); void move2MaxLocSignal(int, double, int); diff --git a/HPPA/hppaConfigFile.cpp b/HPPA/hppaConfigFile.cpp index 81fd30d..55e2cd5 100644 --- a/HPPA/hppaConfigFile.cpp +++ b/HPPA/hppaConfigFile.cpp @@ -1,4 +1,4 @@ -// +// // Created by tangchao on 2023/3/25. // @@ -301,10 +301,10 @@ bool Configfile::createConfigFile() Setting& x = motionPlatform.add("x", Setting::TypeGroup); Setting& y = motionPlatform.add("y", Setting::TypeGroup); - Setting& x_StepAnglemar = x.add("StepAnglemar", Setting::TypeFloat) = 1.8;// - Setting& x_Lead = x.add("Lead", Setting::TypeFloat) = 13.5;//̣λcm - Setting& x_SubdivisionMultiples = x.add("SubdivisionMultiples", Setting::TypeInt) = 7;//ϸֱ - Setting& x_ScaleFactor = x.add("ScaleFactor", Setting::TypeFloat) = 1.0;// + Setting& x_StepAnglemar = x.add("StepAnglemar", Setting::TypeFloat) = 1.8;//步距角 + Setting& x_Lead = x.add("Lead", Setting::TypeFloat) = 13.5;//导程,单位:cm + Setting& x_SubdivisionMultiples = x.add("SubdivisionMultiples", Setting::TypeInt) = 7;//细分倍数 + Setting& x_ScaleFactor = x.add("ScaleFactor", Setting::TypeFloat) = 1.0;//缩放因子 Setting& x_MaxRange = x.add("MaxRange", Setting::TypeFloat) = 120.0; Setting& y_StepAnglemar = y.add("StepAnglemar", Setting::TypeFloat) = 1.8; Setting& y_Lead = y.add("Lead", Setting::TypeFloat) = 13.5; @@ -569,14 +569,14 @@ bool CorningConfigfile::getPushFlowParam(int& flowSwitch, int& rgbHeight, int& f if (!root.exists("push_flow_param")) { - // ڣ + // 配置项不存在,添加配置项 Setting& push_flow_param = root.add("push_flow_param", Setting::TypeGroup); push_flow_param.add("flow_switch", Setting::TypeInt) = 0; push_flow_param.add("rgb_height", Setting::TypeInt) = 720; push_flow_param.add("framerate_video", Setting::TypeInt) = 5; - // ޸ĺõļ + // 保存修改后的配置到文件 try { QList fileInfo = getFileInfo(QString::fromStdString(m_configfilePath)); diff --git a/HPPA/hppaConfigFile.h b/HPPA/hppaConfigFile.h index 09d67d3..e59306d 100644 --- a/HPPA/hppaConfigFile.h +++ b/HPPA/hppaConfigFile.h @@ -1,4 +1,4 @@ -// +// // Created by tangchao on 2023/3/25. // @@ -62,7 +62,7 @@ public: bool getspatialBin(int& spatialBin); bool getEffectiveWindow(int& width, int& offsetx, int& height, int& offsety); bool getEffectiveWindowRoi(int& width, int& offsetx); - bool getWindowOffsety_HeightOfSpectral(int& offsety, int& height, string spectralBinString);//spectralBinString = "bin1"ߡbin2 + bool getWindowOffsety_HeightOfSpectral(int& offsety, int& height, string spectralBinString);//spectralBinString = "bin1"或者”bin2“ bool getGainOffset(float& gain, float& offset); bool getGainOffsetOfSpectralBin1(float& gain, float& offset); bool getSN(QString& SN); diff --git a/HPPA/image2display.cpp b/HPPA/image2display.cpp index 3c5cb0c..35fb018 100644 --- a/HPPA/image2display.cpp +++ b/HPPA/image2display.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "image2display.h" #include @@ -16,7 +16,7 @@ void CImage::SetRgbImageWidthAndHeight(int BandCount, int Sample, int FrameNumbe if (m_QRgbImage != nullptr) { - delete m_QRgbImage;//⣿ + delete m_QRgbImage;//有问题???????????????????????????????????????????????? } //m_QRgbImage = new QImage(Sample, FrameNumber, QImage::Format_RGB888); @@ -54,19 +54,19 @@ void CImage::SetRgbImageWidthAndHeight(int BandCount, int Sample, int FrameNumbe - std::cout << "֡" << FrameNumber << std::endl; + std::cout << "设置帧数:" << FrameNumber << std::endl; - m_iFrameCounter = 0;//ÿζΪ0 + m_iFrameCounter = 0;//每次都重置为0 m_iSampleNumber = Sample; m_iBandNumber = BandCount; m_iFrameNumber = FrameNumber; - //std::cout << "rgbӰڴַΪ" << m_QRgbImage << std::endl; + //std::cout << "rgb影像内存地址为:" << m_QRgbImage << std::endl; } void CImage::FillRgbImage(unsigned short *datacube) { - //uchar==unsigned charڴС1ֽڣΧΪ0-255 + //uchar==unsigned char,内存大小:1个字节,范围为0-255 //uchar * imagebits24 = m_QRgbImage->bits(); //uchar * imagebits24 = m_QRgbImage->scanLine(m_iFrameCounter);//?????????????????????????????????????????????????????????????????????? @@ -75,26 +75,26 @@ void CImage::FillRgbImage(unsigned short *datacube) for (int j = 0; j < m_iSampleNumber; j++) { - //std::cout << "rgbͼд֡" << j << std::endl; + //std::cout << "rgb图像写入数据帧数:" << j << std::endl; - //ȡֵһ֡ӰУҵrgbԪֵ + //取值:一帧影像中,从左到右的rgb像元值 r = *(datacube + 121 * m_iSampleNumber + j); g = *(datacube + 79 * m_iSampleNumber + j); b = *(datacube + 40 * m_iSampleNumber + j); - //Ԫֵֵcv::MatУԪֵhttps://zhuanlan.zhihu.com/p/51842288 - //int dataType = m_matRgbImage->type();//ΪCV_16UC3ʱ18 - //std::cout << "m_matRgbImageΪ" << dataType << std::endl; + //将像元值赋值到cv::Mat中,操作像元值:https://zhuanlan.zhihu.com/p/51842288 + //int dataType = m_matRgbImage->type();//当数据类型为CV_16UC3时,返回18 + //std::cout << "m_matRgbImage数据类型为:" << dataType << std::endl; if (m_matRgbImage->type() == CV_16UC3) { - //std::cout << "ֵ" << std::endl; + //std::cout << "操作像素值!" << std::endl; m_matRgbImage->at(m_iFrameCounter, j)[2] = r; m_matRgbImage->at(m_iFrameCounter, j)[1] = g; m_matRgbImage->at(m_iFrameCounter, j)[0] = b; } - ////Ԫֵ4095һ255ķΧֵQImage + ////将像元值从4095归一化到255的范围并赋值到QImage中 //imagebits24[j * 3] = uchar(r * 255 / 4095); //imagebits24[j * 3 + 1] = uchar(g * 255 / 4095); //imagebits24[j * 3 + 2] = uchar(b * 255 / 4095); @@ -102,14 +102,14 @@ void CImage::FillRgbImage(unsigned short *datacube) m_iFrameCounter++; - //rgbͼƬ + //保存rgb图片 if (m_iFrameCounter % m_iFramerate == 0 || m_iFrameCounter == m_iFrameNumber - 1) { - ////ļ + ////保存文件 //FileOperation * fileOperation = new FileOperation(); //string directory = fileOperation->getDirectoryOfExe(); - //string rgbFilePathStrech = directory + "\\tmp_image_strech.png";//ûͼƬ - //string rgbFilePathNoStrech = directory + "\\tmp_image_no_strech.png";//ͼƬ + //string rgbFilePathStrech = directory + "\\tmp_image_strech.png";//没有拉伸图片 + //string rgbFilePathNoStrech = directory + "\\tmp_image_no_strech.png";//拉伸图片 //m_QRgbImage->save(QString::fromStdString(rgbFilePathNoStrech), "PNG"); @@ -147,7 +147,7 @@ void CImage::FillFocusGrayImage(unsigned short * datacube) // } //} - //matļ + //将mat保存成文件 //cv::imwrite("D:/delete/2222222222/test.bmp", m_matFocusGrayImage); } diff --git a/HPPA/image2display.h b/HPPA/image2display.h index e5257c8..2fa11ca 100644 --- a/HPPA/image2display.h +++ b/HPPA/image2display.h @@ -1,9 +1,9 @@ -#ifndef CIMAGE +#ifndef CIMAGE #define CIMAGE #include -#include //ж +#include //包含了所有东西,编译很慢 //#include //#include @@ -29,12 +29,12 @@ public: cv::Mat *m_matRgbImage; QImage *m_qimageFocusGrayImage; - cv::Mat *m_matFocusGrayImage;//ڵʱʾһ֡ĻҶͼ - //cv::Mat m_matFocusGrayImage;//ڵʱʾһ֡ĻҶͼ + cv::Mat *m_matFocusGrayImage;//用于调焦时,显示一帧的灰度图 + //cv::Mat m_matFocusGrayImage;//用于调焦时,显示一帧的灰度图 - //Ƹrgbͼڼ֡У - //ҪΪ01úSetRgbImageWidthAndHeight2ÿοʼǰ + //控制该填充rgb图像第几帧(行)数据 + //以下两种情况需要重置为0:1)调用函数SetRgbImageWidthAndHeight;2)每次开始填充数据前 int m_iFrameCounter; diff --git a/HPPA/imageControl.cpp b/HPPA/imageControl.cpp index aa84d92..df313ce 100644 --- a/HPPA/imageControl.cpp +++ b/HPPA/imageControl.cpp @@ -1,4 +1,4 @@ -#include "imageControl.h" +#include "imageControl.h" #include "RasterLayer.h" #include #include @@ -42,7 +42,7 @@ ImageControl::ImageControl(QWidget* parent) QDoubleSpinBox { border: 1px solid #999; border-radius: 4px; - padding: 2px 20px 2px 6px; /* Ҳռť */ + padding: 2px 20px 2px 6px; /* 右侧留空间给按钮 */ background: #0e1c4c; selection-background-color: #0078d7; font-size: 12px; diff --git a/HPPA/imageControl.h b/HPPA/imageControl.h index 8b89720..de8ff3c 100644 --- a/HPPA/imageControl.h +++ b/HPPA/imageControl.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/HPPA/imageProcessor.cpp b/HPPA/imageProcessor.cpp index ce7991f..57972b9 100644 --- a/HPPA/imageProcessor.cpp +++ b/HPPA/imageProcessor.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "imageProcessor.h" #include @@ -17,19 +17,19 @@ std::vector ImageProcessor::CHistogram(const cv::Mat img) int cols = mimg.cols; int maxValue = *std::max_element(mimg.begin(), mimg.end()); maxValue = 65535; - //ͳÿҶȳֵĴ - std::vector hisnum(maxValue, 0);// + //统计每个灰度出现的次数 + std::vector hisnum(maxValue, 0);//?????????????????????????????? for (int i(0); i < rows; ++i) { - //std::cout << "i" << i << std::endl; + //std::cout << "i:" << i << std::endl; for (int j(0); j < cols; ++j) { - //std::cout << "j" << j << std::endl; + //std::cout << "j:" << j << std::endl; unsigned short gv = mimg.at(i, j); - //std::cout << "gvֵ" << gv << std::endl; + //std::cout << "gv值:" << gv << std::endl; - //ԷиֵͷǸڿ۳пΪֵ - //matΪCV_16UC3иֵʱֵΪ65535 + //以防数据中有负值:当镜头盖盖上在扣除暗电流就有可能为负值 + //如果mat的数据类型为CV_16UC3,当数据中有有负值时,负值表现为65535 if (gv >= maxValue) { ++hisnum[0]; @@ -40,7 +40,7 @@ std::vector ImageProcessor::CHistogram(const cv::Mat img) } } } - //ʼҶƵ + //开始计算灰度频率 long int pnum = rows * cols; std::vector hisp; for (int i(0); i < hisnum.size(); ++i) @@ -118,21 +118,21 @@ cv::Mat ImageProcessor::CStretchDeal(const cv::Mat img, const uint minnum, const int rows = mimg.rows; int cols = mimg.cols; cv::Mat nimg = cv::Mat::zeros(rows, cols, CV_8U); - //һ + //归一化参数 float dertnum = maxnum - minnum; - //ʼ + //开始处理 for (int i(0); i < rows; ++i) { for (int j(0); j < cols; ++j) { unsigned short a = mimg.at(i, j); - //СratioӦֵȡ0 + //小于ratio对应像素值取0 if (a <= minnum) nimg.at(i, j) = 0; - //ratioֵӦֵȡ255 + //大于ratio值对应像素值取255 else if (a >= maxnum) nimg.at(i, j) = 255; - //мֵ쵽0-255 + //中间值拉伸到0-255 else nimg.at(i, j) = 255 * (mimg.at(i, j) - minnum) / dertnum; } @@ -142,26 +142,26 @@ cv::Mat ImageProcessor::CStretchDeal(const cv::Mat img, const uint minnum, const cv::Mat ImageProcessor::CStretch(const cv::Mat img, const float ratio) { - //ӰRGBҶֱͼ + //影像分RGB计算灰度直方图 cv::Mat mimg = img.clone(); cv::Mat bgr[3]; split(mimg, bgr); std::vector hb = CHistogram(bgr[0]); std::vector hg = CHistogram(bgr[1]); std::vector hr = CHistogram(bgr[2]); - //ͳֱͼۼƵratioֵӦĻҶ + //统计直方图累计频率ratio值对应的灰度 uint minb = MinRatio(hb, ratio); uint ming = MinRatio(hg, ratio); uint minr = MinRatio(hr, ratio); uint maxb = MaxRatio(hb, ratio); uint maxg = MaxRatio(hg, ratio); uint maxr = MaxRatio(hr, ratio); - //ʼ칤 + //开始拉伸工作 cv::Mat b, g, r; b = CStretchDeal(bgr[0], minb, maxb); g = CStretchDeal(bgr[1], ming, maxg); r = CStretchDeal(bgr[2], minr, maxr); - //ϲ + //合并拉伸结果 cv::Mat newbgr; newbgr.create(img.rows, img.cols, CV_32FC3); cv::Mat nbgr[3] = { b, g, r }; diff --git a/HPPA/imageProcessor.h b/HPPA/imageProcessor.h index c99fa73..01381bd 100644 --- a/HPPA/imageProcessor.h +++ b/HPPA/imageProcessor.h @@ -1,8 +1,8 @@ -#pragma once +#pragma once #ifndef IMAGEPROCESSOR #define IMAGEPROCESSOR -#include //ж +#include //包含了所有东西,编译很慢 //#include //#include @@ -18,9 +18,9 @@ public: QImage Mat2QImage(cv::Mat cvImg);//https://www.cnblogs.com/annt/p/ant003.html - //envi 2%ԭ - //gdal汾 https://blog.csdn.net/HB_Programmer/article/details/82020703?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control - //opencv汾 https://blog.csdn.net/qq_41824159/article/details/105469986 + //envi 2%拉伸原理: + //gdal版本 → https://blog.csdn.net/HB_Programmer/article/details/82020703?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control + //opencv版本 → https://blog.csdn.net/qq_41824159/article/details/105469986 cv::Mat CStretchDeal(const cv::Mat img, const uint minnum, const uint maxnum); uint MaxRatio(const std::vector data, const float ratio); uint MinRatio(const std::vector data, const float ratio); diff --git a/HPPA/imagerSimulatioin.cpp b/HPPA/imagerSimulatioin.cpp index a930241..65f8368 100644 --- a/HPPA/imagerSimulatioin.cpp +++ b/HPPA/imagerSimulatioin.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "imagerSimulatioin.h" imagerSimulatioin::imagerSimulatioin(QGraphicsItem *parent) :QGraphicsItem(parent) @@ -8,7 +8,7 @@ imagerSimulatioin::imagerSimulatioin(QGraphicsItem *parent) :QGraphicsItem(paren setFlags(ItemIsSelectable | ItemIsMovable); - //itemChangeҪItemSendsGeometryChanges flag is needed to capture the change in position of QGraphicsItem + //itemChange需要:ItemSendsGeometryChanges flag is needed to capture the change in position of QGraphicsItem this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); m_height = 50; m_width = 50; @@ -39,7 +39,7 @@ void imagerSimulatioin::paint(QPainter *painter, const QStyleOptionGraphicsItem painter->setPen(outlinePen); painter->setBrush(blueBrush); - painter->drawRect(-m_width / 2, -m_height / 2, m_width, m_height);//Ըıitemԭ㣬setSceneRect(qreal x, qreal y, qreal w, qreal h)һ + painter->drawRect(-m_width / 2, -m_height / 2, m_width, m_height);//可以改变item坐标原点,和setSceneRect(qreal x, qreal y, qreal w, qreal h)一样 //QPen outlinePen(Qt::red); @@ -65,7 +65,7 @@ void imagerSimulatioin::setPos(qreal x, qreal y) x = floor(x); y = floor(y); - QGraphicsItem::setPos(x, y);//ø౻ǵĺִӦ + QGraphicsItem::setPos(x, y);//调用父类被覆盖的函数执行相应操作 scene()->update(); } @@ -97,7 +97,7 @@ void imagerSimulatioin::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { scene()->update(); - QPointF originOfItem = this->scenePos();//itemϽsceneе + QPointF originOfItem = this->scenePos();//这是item左上角在scene中的坐标 //qDebug() << originOfItem; QGraphicsItem::mouseMoveEvent(event); @@ -105,8 +105,8 @@ void imagerSimulatioin::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void imagerSimulatioin::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - QPointF x = pos();//itemԭ㣨00sceneе - QPointF originOfItem = this->scenePos();//itemԭ㣨00sceneе + QPointF x = pos();//这是item原点(0,0)在scene中的坐标 + QPointF originOfItem = this->scenePos();//这是item原点(0,0)在scene中的坐标 QPointF viewPos = event->pos(); @@ -123,7 +123,7 @@ void imagerSimulatioin::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) emit leftMouseButtonPressed(originOfItem.x(), originOfItem.y()); - //update();//ʵʱ + //update();//不会实时绘制 scene()->update(); QGraphicsItem::mouseReleaseEvent(event); diff --git a/HPPA/imagerSimulatioin.h b/HPPA/imagerSimulatioin.h index 52416ef..7fa3007 100644 --- a/HPPA/imagerSimulatioin.h +++ b/HPPA/imagerSimulatioin.h @@ -1,4 +1,4 @@ -#ifndef IMAGER_SIMULATIOIN +#ifndef IMAGER_SIMULATIOIN #define IMAGER_SIMULATIOIN #include @@ -15,11 +15,11 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); void setPos(qreal x, qreal y); - //QGraphicsSceneͼԪ϶Χhttps://www.cnblogs.com/sfy5848/p/6611824.html + //在QGraphicsScene中限制图元的拖动范围:https://www.cnblogs.com/sfy5848/p/6611824.html QVariant itemChange(GraphicsItemChange change, const QVariant &value); - void mouseMoveEvent(QGraphicsSceneMouseEvent *event);//϶itemʱͣĻƣ϶Ӱ - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);//ſʱʱͼԪsceneе + void mouseMoveEvent(QGraphicsSceneMouseEvent *event);//当拖动item时不停会的绘制,消除拖动重影 + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);//当放开鼠标时,发射此时图元在scene中的坐标 protected: diff --git a/HPPA/imager_base.cpp b/HPPA/imager_base.cpp index b4c6283..b5d8225 100644 --- a/HPPA/imager_base.cpp +++ b/HPPA/imager_base.cpp @@ -1,4 +1,4 @@ -#include "imager_base.h" +#include "imager_base.h" Iris::ImagerBase::ImagerBase() { diff --git a/HPPA/imager_base.h b/HPPA/imager_base.h index fdc129e..65e855d 100644 --- a/HPPA/imager_base.h +++ b/HPPA/imager_base.h @@ -1,4 +1,4 @@ -/* +/* * Iris API * * By using this API, the user agrees to the terms and conditions as stated in the diff --git a/HPPA/main.cpp b/HPPA/main.cpp index 5d8c67a..29d1ffe 100644 --- a/HPPA/main.cpp +++ b/HPPA/main.cpp @@ -1,4 +1,4 @@ -#include "HPPA.h" +#include "HPPA.h" #include int main(int argc, char *argv[]) diff --git a/HPPA/path_tc.cpp b/HPPA/path_tc.cpp index bd1f7ea..b09da49 100644 --- a/HPPA/path_tc.cpp +++ b/HPPA/path_tc.cpp @@ -1,4 +1,4 @@ -#include "path_tc.h" +#include "path_tc.h" string getPathofEXE() { diff --git a/HPPA/path_tc.h b/HPPA/path_tc.h index 61b9a61..fdfce33 100644 --- a/HPPA/path_tc.h +++ b/HPPA/path_tc.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include //#include using namespace std; diff --git a/HPPA/resononImager.cpp b/HPPA/resononImager.cpp index 6b1f9ff..d0bbaf7 100644 --- a/HPPA/resononImager.cpp +++ b/HPPA/resononImager.cpp @@ -1,4 +1,4 @@ -#include "resononImager.h" +#include "resononImager.h" ResononPicaLImager::ResononPicaLImager() { @@ -9,7 +9,7 @@ ResononPicaLImager::~ResononPicaLImager() { if (buffer != nullptr) { - std::cout << "ͷŶڴ" << std::endl; + std::cout << "释放堆上内存" << std::endl; free(buffer); free(dark); free(white); diff --git a/HPPA/resononImager.h b/HPPA/resononImager.h index 1f45ea4..0b89f90 100644 --- a/HPPA/resononImager.h +++ b/HPPA/resononImager.h @@ -1,4 +1,4 @@ -#ifndef RESONON_IMAGER +#ifndef RESONON_IMAGER #define RESONON_IMAGER #include diff --git a/HPPA/resource.h b/HPPA/resource.h index 327f5b5..13eaf64 100644 --- a/HPPA/resource.h +++ b/HPPA/resource.h @@ -1,6 +1,6 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ ɵİļ -// HPPA.rc ʹ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ 生成的包含文件。 +// 供 HPPA.rc 使用 // #define IDI_ICON1 106 diff --git a/HPPA/stdafx.cpp b/HPPA/stdafx.cpp index fd4f341..d1303f3 100644 --- a/HPPA/stdafx.cpp +++ b/HPPA/stdafx.cpp @@ -1 +1 @@ -#include "stdafx.h" +#include "stdafx.h" diff --git a/HPPA/stdafx.h b/HPPA/stdafx.h index 983474e..e517d41 100644 --- a/HPPA/stdafx.h +++ b/HPPA/stdafx.h @@ -1,3 +1,3 @@ -#include +#include #include #include diff --git a/HPPA/utility_tc.h b/HPPA/utility_tc.h index 1428550..469ed82 100644 --- a/HPPA/utility_tc.h +++ b/HPPA/utility_tc.h @@ -1,4 +1,4 @@ -#ifndef UTILITY_TC_H +#ifndef UTILITY_TC_H #define UTILITY_TC_H #include