Line data Source code
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 : 16 : #include "gdal_frmts.h" 17 : #include "gdalplugindriverproxy.h" 18 : 19 : #include "ogrsf_frmts.h" 20 : 21 : #include "ogrcaddrivercore.h" 22 : 23 : /************************************************************************/ 24 : /* OGRCADDriverIdentify() */ 25 : /************************************************************************/ 26 : 27 60270 : static int OGRCADDriverIdentify(GDALOpenInfo *poOpenInfo) 28 : 29 : { 30 : #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) 31 60270 : if (!poOpenInfo->IsExtensionEqualToCI("DWG")) 32 60262 : return FALSE; 33 : #endif 34 18 : return poOpenInfo->nHeaderBytes >= 6 && poOpenInfo->pabyHeader[0] == 'A' && 35 18 : poOpenInfo->pabyHeader[1] == 'C'; 36 : } 37 : 38 : /************************************************************************/ 39 : /* OGRCADDriverSetCommonMetadata() */ 40 : /************************************************************************/ 41 : 42 2108 : void OGRCADDriverSetCommonMetadata(GDALDriver *poDriver) 43 : { 44 2108 : poDriver->SetDescription(DRIVER_NAME); 45 2108 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 46 2108 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 47 2108 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 48 2108 : poDriver->SetMetadataItem(GDAL_DCAP_DELETE_LAYER, "YES"); 49 2108 : poDriver->SetMetadataItem(GDAL_DMD_SUBDATASETS, "YES"); 50 2108 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "AutoCAD Driver"); 51 2108 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "dwg"); 52 2108 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/cad.html"); 53 2108 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 54 2108 : poDriver->SetMetadataItem(GDAL_DCAP_CURVE_GEOMETRIES, "YES"); 55 2108 : poDriver->SetMetadataItem(GDAL_DCAP_MEASURED_GEOMETRIES, "YES"); 56 2108 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 57 2108 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 58 : 59 2108 : poDriver->SetMetadataItem( 60 : GDAL_DMD_OPENOPTIONLIST, 61 : "<OpenOptionList>" 62 : " <Option name='MODE' type='string' description='Open mode. " 63 : "READ_ALL - read all data (slow), READ_FAST - read main data " 64 : "(fast), READ_FASTEST - read less data' default='READ_FAST'/>" 65 : " <Option name='ADD_UNSUPPORTED_GEOMETRIES_DATA' type='string' " 66 : "description='Add unsupported geometries data (color, attributes) " 67 : "to the layer (YES/NO). They will have no geometrical " 68 : "representation.' default='NO'/>" 69 2108 : "</OpenOptionList>"); 70 : 71 2108 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 72 2108 : poDriver->SetMetadataItem(GDAL_DCAP_FEATURE_STYLES, "YES"); 73 2108 : poDriver->SetMetadataItem(GDAL_DCAP_FEATURE_STYLES_READ, "YES"); 74 : 75 2108 : poDriver->pfnIdentify = OGRCADDriverIdentify; 76 2108 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 77 2108 : } 78 : 79 : /************************************************************************/ 80 : /* DeclareDeferredOGRCADPlugin() */ 81 : /************************************************************************/ 82 : 83 : #ifdef PLUGIN_FILENAME 84 2038 : void DeclareDeferredOGRCADPlugin() 85 : { 86 2038 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 87 : { 88 283 : return; 89 : } 90 1755 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 91 : #ifdef PLUGIN_INSTALLATION_MESSAGE 92 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 93 : PLUGIN_INSTALLATION_MESSAGE); 94 : #endif 95 1755 : OGRCADDriverSetCommonMetadata(poDriver); 96 1755 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 97 : } 98 : #endif