Coverage Report

Created: 2026-02-14 09:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/ogr/ogrsf_frmts/cad/ogr_cad.h
Line
Count
Source
1
/*******************************************************************************
2
 *  Project: OGR CAD Driver
3
 *  Purpose: Implements driver based on libopencad
4
 *  Author: Alexandr Borzykh, mush3d at gmail.com
5
 *  Author: Dmitry Baryshnikov, polimax@mail.ru
6
 *  Language: C++
7
 *******************************************************************************
8
 *  The MIT License (MIT)
9
 *
10
 *  Copyright (c) 2016 Alexandr Borzykh
11
 *  Copyright (c) 2016, NextGIS
12
 *
13
 * SPDX-License-Identifier: MIT
14
 *******************************************************************************/
15
#ifndef OGR_CAD_H_INCLUDED
16
#define OGR_CAD_H_INCLUDED
17
18
// gdal headers
19
#include "ogrsf_frmts.h"
20
21
// libopencad headers
22
#include "cadgeometry.h"
23
#include "opencad_api.h"
24
25
#include <set>
26
27
class OGRCADLayer final : public OGRLayer
28
{
29
    GDALDataset *m_poDS = nullptr;
30
    OGRFeatureDefn *poFeatureDefn;
31
    OGRSpatialReference *poSpatialRef;
32
    GIntBig nNextFID;
33
    CADLayer &poCADLayer;
34
    int nDWGEncoding;
35
36
  public:
37
    OGRCADLayer(GDALDataset *poDS, CADLayer &poCADLayer,
38
                OGRSpatialReference *poSR, int nEncoding);
39
    ~OGRCADLayer() override;
40
41
    void ResetReading() override;
42
    OGRFeature *GetNextFeature() override;
43
    OGRFeature *GetFeature(GIntBig nFID) override;
44
    GIntBig GetFeatureCount(int /* bForce */) override;
45
46
    const OGRSpatialReference *GetSpatialRef() const override
47
1.39k
    {
48
1.39k
        return poSpatialRef;
49
1.39k
    }
50
51
    const OGRFeatureDefn *GetLayerDefn() const override
52
2.79k
    {
53
2.79k
        return poFeatureDefn;
54
2.79k
    }
55
56
    std::set<CPLString> asFeaturesAttributes;
57
    int TestCapability(const char *) const override;
58
59
    GDALDataset *GetDataset() override
60
0
    {
61
0
        return m_poDS;
62
0
    }
63
};
64
65
class GDALCADDataset final : public GDALDataset
66
{
67
    CPLString osCADFilename;
68
    CADFile *poCADFile;
69
    // vector
70
    OGRCADLayer **papoLayers;
71
    int nLayers;
72
    // raster
73
    GDALGeoTransform m_gt{};
74
    GDALDataset *poRasterDS;
75
    mutable OGRSpatialReference *poSpatialReference;
76
77
  public:
78
    GDALCADDataset();
79
    ~GDALCADDataset() override;
80
81
    int Open(GDALOpenInfo *poOpenInfo, CADFileIO *pFileIO,
82
             long nSubRasterLayer = -1, long nSubRasterFID = -1);
83
84
    int GetLayerCount() const override
85
2.02k
    {
86
2.02k
        return nLayers;
87
2.02k
    }
88
89
    const OGRLayer *GetLayer(int) const override;
90
    int TestCapability(const char *) const override;
91
    char **GetFileList() override;
92
    const OGRSpatialReference *GetSpatialRef() const override;
93
    CPLErr GetGeoTransform(GDALGeoTransform &gt) const override;
94
    int GetGCPCount() override;
95
    const OGRSpatialReference *GetGCPSpatialRef() const override;
96
    const GDAL_GCP *GetGCPs() override;
97
    int CloseDependentDatasets() override;
98
99
  protected:
100
    const std::string GetPrjFilePath() const;
101
    void FillTransform(CADImage *pImage, double dfUnits);
102
    int GetCadEncoding() const;
103
104
  private:
105
    CPL_DISALLOW_COPY_ASSIGN(GDALCADDataset)
106
};
107
108
CPLString CADRecode(const CPLString &sString, int CADEncoding);
109
110
#endif