GrabBag/Tools/CloudView/Inc/CloudViewMainWindow.h

200 lines
4.3 KiB
C
Raw Normal View History

2026-01-16 01:04:43 +08:00
#ifndef CLOUD_VIEW_MAIN_WINDOW_H
#define CLOUD_VIEW_MAIN_WINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QListWidget>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSplitter>
#include <QFileDialog>
#include <QMessageBox>
#include <QStatusBar>
#include <QLineEdit>
#include <QRadioButton>
#include <QCheckBox>
#include <QDialog>
2026-01-16 01:04:43 +08:00
#include <memory>
#include "PointCloudGLWidget.h"
#include "PointCloudConverter.h"
class QTextEdit;
class QTableWidget;
2026-01-16 01:04:43 +08:00
/**
* @brief
*
*/
class CloudViewMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit CloudViewMainWindow(QWidget* parent = nullptr);
~CloudViewMainWindow() override;
private slots:
/**
* @brief
*/
void onOpenFile();
/**
* @brief
*/
void onClearAll();
/**
* @brief
*/
void onResetView();
/**
* @brief
*/
void onClearSelectedPoints();
/**
* @brief 线
*/
void onClearLinePoints();
/**
* @brief
*/
void onPointSelected(const SelectedPointInfo& point);
/**
* @brief
*/
void onTwoPointsSelected(const SelectedPointInfo& p1, const SelectedPointInfo& p2, float distance);
/**
* @brief 线
*/
void onLineSelected(const SelectedLineInfo& line);
/**
* @brief 线线
*/
void onSelectLineByNumber();
/**
* @brief 线/
*/
void onLineSelectModeChanged(bool checked);
/**
* @brief 线
*/
void onShowLinePoints();
/**
* @brief 线
*/
void onLinePointTableClicked(int row, int column);
2026-01-16 01:04:43 +08:00
private:
/**
* @brief
*/
void setupUI();
/**
* @brief
*/
QWidget* createViewerArea();
/**
* @brief
*/
QWidget* createControlPanel();
/**
* @brief
*/
QGroupBox* createFileGroup();
/**
* @brief
*/
QGroupBox* createMeasureGroup();
/**
* @brief 线
*/
QGroupBox* createLineGroup();
/**
* @brief
*/
QGroupBox* createCloudListGroup();
/**
* @brief
*/
void updateSelectedPointsDisplay();
/**
* @brief 线0,0,0
*/
QVector<QVector3D> getOriginalLinePoints(const SelectedLineInfo& lineInfo);
/**
* @brief 线
*/
void updateLinePointsDialog();
2026-01-16 01:04:43 +08:00
// 点云显示控件
PointCloudGLWidget* m_glWidget;
// 点云转换器
std::unique_ptr<PointCloudConverter> m_converter;
// 文件操作控件
QPushButton* m_btnOpenFile;
QPushButton* m_btnClearAll;
QPushButton* m_btnResetView;
// 选点测距控件
QCheckBox* m_cbMeasureDistance;
2026-01-16 01:04:43 +08:00
QPushButton* m_btnClearPoints;
QLabel* m_lblPoint1;
QLabel* m_lblPoint2;
QLabel* m_lblDistance;
// 选线拟合控件
QPushButton* m_btnClearLine;
QPushButton* m_btnShowLinePoints;
2026-01-16 01:04:43 +08:00
QLineEdit* m_lineNumberInput;
QPushButton* m_btnSelectByNumber;
QRadioButton* m_rbVertical;
QRadioButton* m_rbHorizontal;
QLabel* m_lblLineIndex;
QLabel* m_lblLinePointCount;
// 点云列表
QListWidget* m_cloudList;
// 已加载的点云数量
int m_cloudCount;
// 当前点云的线信息(用于旋转)
int m_currentLineNum;
int m_currentLinePtNum;
// 原始完整点云数据包含0,0,0点用于旋转
PointCloudXYZ m_originalCloud;
// 线上点对话框
QDialog* m_linePointsDialog;
QTableWidget* m_linePointsTable;
QVector<QVector3D> m_currentLinePoints; // 当前线的原始点坐标
2026-01-16 01:04:43 +08:00
};
#endif // CLOUD_VIEW_MAIN_WINDOW_H