/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 >) 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 |