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 : public: 52 : OGRDGNLayer(OGRDGNDataSource *poDS, const char *pszName, DGNHandle hDGN, 53 : int bUpdate); 54 : virtual ~OGRDGNLayer(); 55 : 56 : OGRErr ISetSpatialFilter(int iGeomField, 57 : const OGRGeometry *poGeom) override; 58 : 59 : void ResetReading() override; 60 : OGRFeature *GetNextFeature() override; 61 : OGRFeature *GetFeature(GIntBig nFeatureId) override; 62 : 63 : virtual GIntBig GetFeatureCount(int bForce = TRUE) override; 64 : 65 : virtual OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, 66 : bool bForce) override; 67 : 68 290 : OGRFeatureDefn *GetLayerDefn() override 69 : { 70 290 : return poFeatureDefn; 71 : } 72 : 73 : int TestCapability(const char *) override; 74 : 75 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 76 : 77 : GDALDataset *GetDataset() override; 78 : }; 79 : 80 : /************************************************************************/ 81 : /* OGRDGNDataSource */ 82 : /************************************************************************/ 83 : 84 77 : class OGRDGNDataSource final : public GDALDataset 85 : { 86 : OGRDGNLayer **papoLayers = nullptr; 87 : int nLayers = 0; 88 : 89 : DGNHandle hDGN = nullptr; 90 : 91 : char **papszOptions = nullptr; 92 : 93 : std::string m_osEncoding{}; 94 : 95 : public: 96 : OGRDGNDataSource(); 97 : ~OGRDGNDataSource(); 98 : 99 : bool Open(GDALOpenInfo *poOpenInfo); 100 : void PreCreate(CSLConstList); 101 : 102 : OGRLayer *ICreateLayer(const char *pszName, 103 : const OGRGeomFieldDefn *poGeomFieldDefn, 104 : CSLConstList) override; 105 : 106 47 : int GetLayerCount() override 107 : { 108 47 : return nLayers; 109 : } 110 : 111 : OGRLayer *GetLayer(int) override; 112 : 113 : int TestCapability(const char *) override; 114 : 115 15 : const std::string &GetEncoding() const 116 : { 117 15 : return m_osEncoding; 118 : } 119 : }; 120 : 121 : #endif /* ndef OGR_DGN_H_INCLUDED */