61 lines
1.9 KiB
C++

#pragma once
#include <QImage>
#include <QString>
#include <cstddef>
#include <mutex>
#include <utility>
#include <vector>
#include "IVrConfig.h"
#include "IYWeldSeamStatus.h"
#include "LaserDataLoader.h"
#include "SG_baseDataType.h"
#include "VZNL_Types.h"
class DetectPresenter
{
public:
DetectPresenter();
static QString GetAlgoVersion();
void ResetIncrementalData();
bool ProcessDetectionLine(EVzResultDataType dataType,
const SVzLaserLineData& lineData,
const VrAlgorithmParams& algorithmParams,
const SSG_planeCalibPara& groundCalibParam,
LaserDataLoader& dataLoader);
bool HasIncrementalData() const;
int DetectWeldSeam(
int cameraIndex,
std::vector<std::pair<EVzResultDataType, SVzLaserLineData>>& laserLines,
const VrAlgorithmParams& algorithmParams,
const SSG_planeCalibPara& groundCalibParam,
const VrDebugParam& debugParam,
LaserDataLoader& dataLoader,
DetectionResult& detectionResult);
private:
void ResetIncrementalImage();
void AddIncrementalImageLine(const std::vector<SVzNL3DPosition>& scanLine);
QImage BuildIncrementalResultImage(
const std::vector<std::vector<SVzNL3DPoint>>& weldPaths) const;
mutable std::mutex m_incrementalMutex;
std::vector<SSG_basicFeatureGap> m_pendingLineValleys;
std::vector<SSG_gapFeatureTree> m_incrementalFeatureTrees;
std::size_t m_incrementalLineCount = 0;
QImage m_incrementalImage;
double m_imageXMin = 0.0;
double m_imageYMin = 0.0;
double m_imageScale = 1.0;
double m_observedXMin = 0.0;
double m_observedXMax = 0.0;
double m_observedYMin = 0.0;
double m_observedYMax = 0.0;
bool m_incrementalImageValid = false;
std::size_t m_imageInputPointCount = 0;
std::size_t m_imageOutputPointCount = 0;
};