#ifndef CT_READER_LAZ_H #define CT_READER_LAZ_H #include "ct_reader/abstract/ct_abstractreader.h" #include "ct_reader/extensions/ct_indexablepointsreader.h" #include "ct_reader/extensions/ct_readerpointsfilteringextension.h" #include "ctliblaz/ctliblaz_global.h" #include "ctliblaz/readers/headers/ct_lazheader.h" #include "ct_itemdrawable/ct_scene.h" #include "ctliblas/itemdrawable/las/ct_stdlaspointsattributescontainer.h" #include "ct_shape2ddata/ct_box2ddata.h" /** * @brief Read LAS File (http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html) */ class CTLIBLAZ_EXPORT CT_Reader_LAZ : public CT_AbstractReader, public CT_IndexablePointsReader, public CT_ReaderPointsFilteringExtension { Q_OBJECT typedef CT_AbstractReader SuperClass; public: struct PointCore0_5 { quint8 entire; // Edge of Flight Line (1 bit) // Scan Direction Flag (1 bit) // Number of Returns (3 bits) // Return Number (3 bits) typedef quint8 MASK; }; struct PointCore6_10 { quint16 entire; // Number of Returns (4 bits) // Return Number (4 bits) // Edge of Flight Line (1 bit) // Scan Direction Flag (1 bit) // Scanner Channel (2 bits) // Classification Flags (4 bits) typedef quint16 MASK; }; CT_Reader_LAZ(int subMenuLevel = 0); CT_Reader_LAZ(const CT_Reader_LAZ &other); virtual ~CT_Reader_LAZ() override; QString displayableName() const override; bool setFilePath(const QString& filepath) override; bool configure() override; CT_FileHeader* createHeaderPrototype() const override; virtual bool hasBoundingBox() {return true;} void getPointIndicesInside2DShape(QList &candidateShapes) const override; QString getFormatCode() const override; bool restoreSettings(SettingsReaderInterface &reader) override; READER_ALL_COPY_IMP(CT_Reader_LAZ) protected: void internalDeclareOutputModels(CT_ReaderOutModelStructureManager& manager) override; CT_FileHeader* internalReadHeader(const QString &filepath, QString &error) const override; bool internalReadFile(CT_StandardItemGroup* group) override; bool internalReadMultiFile(CT_StandardItemGroup* group) override; private: CT_LAZHeader* m_headerFromConfiguration; CT_HandleOutSingularItem m_hOutScene; CT_HandleOutSingularItem m_hOutAllAtt; CT_DensePointScalarManager mCore6_10Manager; // only one manager for all attributes that use PointCore6_10 because only one cloud to optimize memory CT_HandleOutPointScalarMask m_hOutReturnNumber; CT_HandleOutPointScalarMask m_hOutNumberOfReturn; CT_HandleOutPointScalarMask m_hOutClassificationFlag; CT_HandleOutPointScalarMask m_hOutScannerChannel; CT_HandleOutPointScalarMask m_hOutScanDirectionFlag; CT_HandleOutPointScalarMask m_hOutEdgeOfFlightLine; CT_HandleOutPointScalarWithDenseManager m_hOutIntensity; CT_HandleOutPointScalarWithDenseManager m_hOutClassification; CT_HandleOutPointScalarWithDenseManager m_hOutUserData; CT_HandleOutPointScalarWithDenseManager m_hOutPointSourceID; CT_HandleOutPointScalarWithDenseManager m_hOutScanAngle; CT_HandleOutPointScalarWithDenseManager m_hOutGPSTime; CT_HandleOutPointColorWithDenseManager m_hOutColor; CT_HandleOutPointScalarWithDenseManager m_hOutRed; CT_HandleOutPointScalarWithDenseManager m_hOutGreen; CT_HandleOutPointScalarWithDenseManager m_hOutBlue; CT_HandleOutPointScalarWithDenseManager m_hOutWavePacketDescriptorIndex; CT_HandleOutPointScalarWithDenseManager m_hOutByteOffsetToWaveformData; CT_HandleOutPointScalarWithDenseManager m_hOutWaveformPacketSizeInBytes; CT_HandleOutPointScalarWithDenseManager m_hOutReturnPointWaveformLocation; CT_HandleOutPointScalarWithDenseManager m_hOutNIR; }; CT_TYPEINFO_MACRO(CT_Reader_LAZ::PointCore0_5, CT_Reader_LAZ::PointCore0_5) CT_TYPEINFO_MACRO(CT_Reader_LAZ::PointCore6_10, CT_Reader_LAZ::PointCore6_10) #endif // CT_READER_LAZ_H