1 /****************************************************************************** 2 * $Id: ogr_dgn.h 28375 2015-01-30 12:06:11Z rouault $ 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 * Permission is hereby granted, free of charge, to any person obtaining a 12 * copy of this software and associated documentation files (the "Software"), 13 * to deal in the Software without restriction, including without limitation 14 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 15 * and/or sell copies of the Software, and to permit persons to whom the 16 * Software is furnished to do so, subject to the following conditions: 17 * 18 * The above copyright notice and this permission notice shall be included 19 * in all copies or substantial portions of the Software. 20 * 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 27 * DEALINGS IN THE SOFTWARE. 28 ****************************************************************************/ 29 30 #ifndef _OGR_DGN_H_INCLUDED 31 #define _OGR_DGN_H_INCLUDED 32 33 #include "dgnlib.h" 34 #include "ogrsf_frmts.h" 35 36 /************************************************************************/ 37 /* OGRDGNLayer */ 38 /************************************************************************/ 39 40 class OGRDGNLayer : public OGRLayer 41 { 42 OGRFeatureDefn *poFeatureDefn; 43 44 int iNextShapeId; 45 46 DGNHandle hDGN; 47 int bUpdate; 48 49 char *pszLinkFormat; 50 51 OGRFeature *ElementToFeature( DGNElemCore * ); 52 53 void ConsiderBrush( DGNElemCore *, const char *pszPen, 54 OGRFeature *poFeature ); 55 56 DGNElemCore **LineStringToElementGroup( OGRLineString *, int ); 57 DGNElemCore **TranslateLabel( OGRFeature * ); 58 59 int bHaveSimpleQuery; 60 OGRFeature *poEvalFeature; 61 62 OGRErr CreateFeatureWithGeom( OGRFeature *, OGRGeometry * ); 63 64 public: 65 OGRDGNLayer( const char * pszName, DGNHandle hDGN, 66 int bUpdate ); 67 ~OGRDGNLayer(); 68 69 void SetSpatialFilter( OGRGeometry * ); 70 71 void ResetReading(); 72 OGRFeature * GetNextFeature(); 73 OGRFeature * GetFeature( GIntBig nFeatureId ); 74 75 virtual GIntBig GetFeatureCount( int bForce = TRUE ); 76 virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE); 77 GetLayerDefn()78 OGRFeatureDefn * GetLayerDefn() { return poFeatureDefn; } 79 80 int TestCapability( const char * ); 81 82 OGRErr ICreateFeature( OGRFeature *poFeature ); 83 84 }; 85 86 /************************************************************************/ 87 /* OGRDGNDataSource */ 88 /************************************************************************/ 89 90 class OGRDGNDataSource : public OGRDataSource 91 { 92 OGRDGNLayer **papoLayers; 93 int nLayers; 94 95 char *pszName; 96 DGNHandle hDGN; 97 98 char **papszOptions; 99 100 public: 101 OGRDGNDataSource(); 102 ~OGRDGNDataSource(); 103 104 int Open( const char *, int bTestOpen, int bUpdate ); 105 int PreCreate( const char *, char ** ); 106 107 OGRLayer *ICreateLayer( const char *, 108 OGRSpatialReference * = NULL, 109 OGRwkbGeometryType = wkbUnknown, 110 char ** = NULL ); 111 GetName()112 const char *GetName() { return pszName; } GetLayerCount()113 int GetLayerCount() { return nLayers; } 114 OGRLayer *GetLayer( int ); 115 116 int TestCapability( const char * ); 117 }; 118 119 #endif /* ndef _OGR_DGN_H_INCLUDED */ 120