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