Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgs3dsymbolregistry.cpp 3 : : -------------------------------------- 4 : : Date : July 2020 5 : : Copyright : (C) 2020 by Nyall Dawson 6 : : Email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include "qgs3dsymbolregistry.h" 17 : : #include "qgsabstract3dsymbol.h" 18 : : 19 : 5 : Qgs3DSymbolRegistry::Qgs3DSymbolRegistry() 20 : : { 21 : 5 : } 22 : : 23 : 5 : Qgs3DSymbolRegistry::~Qgs3DSymbolRegistry() 24 : : { 25 : 5 : qDeleteAll( mMetadata ); 26 : 5 : } 27 : : 28 : 0 : bool Qgs3DSymbolRegistry::addSymbolType( Qgs3DSymbolAbstractMetadata *metadata ) 29 : : { 30 : 0 : if ( !metadata || mMetadata.contains( metadata->type() ) ) 31 : 0 : return false; 32 : : 33 : 0 : mMetadata[metadata->type()] = metadata; 34 : 0 : return true; 35 : 0 : } 36 : : 37 : 0 : QgsAbstract3DSymbol *Qgs3DSymbolRegistry::createSymbol( const QString &type ) const 38 : : { 39 : 0 : if ( !mMetadata.contains( type ) ) 40 : 0 : return nullptr; 41 : : 42 : 0 : return mMetadata[type]->create(); 43 : 0 : } 44 : : 45 : 0 : QgsAbstract3DSymbol *Qgs3DSymbolRegistry::defaultSymbolForGeometryType( QgsWkbTypes::GeometryType type ) 46 : : { 47 : 0 : switch ( type ) 48 : : { 49 : : case QgsWkbTypes::PointGeometry: 50 : 0 : return createSymbol( QStringLiteral( "point" ) ); 51 : : case QgsWkbTypes::LineGeometry: 52 : 0 : return createSymbol( QStringLiteral( "line" ) ); 53 : : case QgsWkbTypes::PolygonGeometry: 54 : 0 : return createSymbol( QStringLiteral( "polygon" ) ); 55 : : default: 56 : 0 : return nullptr; 57 : : } 58 : 0 : } 59 : : 60 : 0 : QgsFeature3DHandler *Qgs3DSymbolRegistry::createHandlerForSymbol( QgsVectorLayer *layer, const QgsAbstract3DSymbol *symbol ) 61 : : { 62 : 0 : if ( !symbol ) 63 : 0 : return nullptr; 64 : : 65 : 0 : if ( !mMetadata.contains( symbol->type() ) ) 66 : 0 : return nullptr; 67 : : 68 : 0 : return mMetadata.value( symbol->type() )->createFeatureHandler( layer, symbol ); 69 : 0 : } 70 : : 71 : 0 : Qgs3DSymbolAbstractMetadata *Qgs3DSymbolRegistry::symbolMetadata( const QString &type ) const 72 : : { 73 : 0 : return mMetadata.value( type ); 74 : : } 75 : : 76 : 5 : QStringList Qgs3DSymbolRegistry::symbolTypes() const 77 : : { 78 : 5 : return mMetadata.keys(); 79 : : }