#pragma once #include #include #include #include #include #include #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>& laserLines, const VrAlgorithmParams& algorithmParams, const SSG_planeCalibPara& groundCalibParam, const VrDebugParam& debugParam, LaserDataLoader& dataLoader, DetectionResult& detectionResult); private: void ResetIncrementalImage(); void AddIncrementalImageLine(const std::vector& scanLine); QImage BuildIncrementalResultImage( const std::vector>& weldPaths) const; mutable std::mutex m_incrementalMutex; std::vector m_pendingLineValleys; std::vector 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; };