Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features Reference Implementation 4 : * Purpose: OGR Driver for DGN Reader. 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2000, Frank Warmerdam (warmerdam@pobox.com) 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef OGR_DGN_H_INCLUDED 14 : #define OGR_DGN_H_INCLUDED 15 : 16 : #include "dgnlib.h" 17 : #include "ogrsf_frmts.h" 18 : 19 : /************************************************************************/ 20 : /* OGRDGNLayer */ 21 : /************************************************************************/ 22 : 23 : class OGRDGNDataSource; 24 : 25 : class OGRDGNLayer final : public OGRLayer 26 : { 27 : OGRDGNDataSource *m_poDS = nullptr; 28 : OGRFeatureDefn *poFeatureDefn{}; 29 : 30 : int iNextShapeId{}; 31 : 32 : DGNHandle hDGN{}; 33 : int bUpdate{}; 34 : 35 : char *pszLinkFormat{}; 36 : 37 : OGRFeature *ElementToFeature(DGNElemCore *, int nRecLevel); 38 : 39 : void ConsiderBrush(DGNElemCore *, const char *pszPen, 40 : OGRFeature *poFeature); 41 : 42 : DGNElemCore **LineStringToElementGroup(const OGRLineString *, int); 43 : DGNElemCore **TranslateLabel(OGRFeature *); 44 : 45 : // Unused: 46 : // int bHaveSimpleQuery; 47 : OGRFeature *poEvalFeature{}; 48 : 49 : OGRErr CreateFeatureWithGeom(OGRFeature *, const OGRGeometry *); 50 : 51 : CPL_DISALLOW_COPY_ASSIGN(OGRDGNLayer) 52 : 53 : public: 54 : OGRDGNLayer(OGRDGNDataSource *poDS, const char *pszName, DGNHandle hDGN, 55 : int bUpdate); 56 : virtual ~OGRDGNLayer(); 57 : 58 : OGRErr ISetSpatialFilter(int iGeomField, 59 : const OGRGeometry *poGeom) override; 60 : 61 : void ResetReading() override; 62 : OGRFeature *GetNextFeature() override; 63 : OGRFeature *GetFeature(GIntBig nFeatureId) override; 64 : 65 : virtual GIntBig GetFeatureCount(int bForce = TRUE) override; 66 : 67 : virtual OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, 68 : bool bForce) override; 69 : 70 290 : OGRFeatureDefn *GetLayerDefn() override 71 : { 72 290 : return poFeatureDefn; 73 : } 74 : 75 : int TestCapability(const char *) override; 76 : 77 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 78 : 79 : GDALDataset *GetDataset() override; 80 : }; 81 : 82 : /************************************************************************/ 83 : /* OGRDGNDataSource */ 84 : /************************************************************************/ 85 : 86 77 : class OGRDGNDataSource final : public GDALDataset 87 : { 88 : OGRDGNLayer **papoLayers = nullptr; 89 : int nLayers = 0; 90 : 91 : DGNHandle hDGN = nullptr; 92 : 93 : char **papszOptions = nullptr; 94 : 95 : std::string m_osEncoding{}; 96 : 97 : CPL_DISALLOW_COPY_ASSIGN(OGRDGNDataSource) 98 : 99 : public: 100 : OGRDGNDataSource(); 101 : ~OGRDGNDataSource(); 102 : 103 : bool Open(GDALOpenInfo *poOpenInfo); 104 : void PreCreate(CSLConstList); 105 : 106 : OGRLayer *ICreateLayer(const char *pszName, 107 : const OGRGeomFieldDefn *poGeomFieldDefn, 108 : CSLConstList) override; 109 : 110 47 : int GetLayerCount() override 111 : { 112 47 : return nLayers; 113 : } 114 : 115 : OGRLayer *GetLayer(int) override; 116 : 117 : int TestCapability(const char *) override; 118 : 119 15 : const std::string &GetEncoding() const 120 : { 121 15 : return m_osEncoding; 122 : } 123 : }; 124 : 125 : #endif /* ndef OGR_DGN_H_INCLUDED */