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 60821 : static int OGRCADDriverIdentify(GDALOpenInfo *poOpenInfo) 28 : 29 : { 30 : #if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) 31 60821 : if (!poOpenInfo->IsExtensionEqualToCI("DWG")) 32 60817 : 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 1780 : void OGRCADDriverSetCommonMetadata(GDALDriver *poDriver) 43 : { 44 1780 : poDriver->SetDescription(DRIVER_NAME); 45 1780 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 46 1780 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 47 1780 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 48 1780 : poDriver->SetMetadataItem(GDAL_DCAP_DELETE_LAYER, "YES"); 49 1780 : poDriver->SetMetadataItem(GDAL_DMD_SUBDATASETS, "YES"); 50 1780 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "AutoCAD Driver"); 51 1780 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "dwg"); 52 1780 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/cad.html"); 53 1780 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 54 1780 : poDriver->SetMetadataItem(GDAL_DCAP_CURVE_GEOMETRIES, "YES"); 55 1780 : poDriver->SetMetadataItem(GDAL_DCAP_MEASURED_GEOMETRIES, "YES"); 56 1780 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 57 1780 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 58 : 59 1780 : 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 1780 : "</OpenOptionList>"); 70 : 71 1780 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 72 1780 : poDriver->SetMetadataItem(GDAL_DCAP_FEATURE_STYLES, "YES"); 73 1780 : poDriver->SetMetadataItem(GDAL_DCAP_FEATURE_STYLES_READ, "YES"); 74 : 75 1780 : poDriver->pfnIdentify = OGRCADDriverIdentify; 76 1780 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 77 1780 : } 78 : 79 : /************************************************************************/ 80 : /* DeclareDeferredOGRCADPlugin() */ 81 : /************************************************************************/ 82 : 83 : #ifdef PLUGIN_FILENAME 84 2054 : void DeclareDeferredOGRCADPlugin() 85 : { 86 2054 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 87 : { 88 283 : return; 89 : } 90 1771 : 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 1771 : OGRCADDriverSetCommonMetadata(poDriver); 96 1771 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 97 : } 98 : #endif