osgEarth 2.1.1
|
00001 /* -*-c++-*- */ 00002 /* osgEarth - Dynamic map generation toolkit for OpenSceneGraph 00003 * Copyright 2008-2010 Pelican Mapping 00004 * http://osgearth.org 00005 * 00006 * osgEarth is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU Lesser General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public License 00017 * along with this program. If not, see <http://www.gnu.org/licenses/> 00018 */ 00019 #ifndef OSGEARTH_DRIVER_KML_COMMON 00020 #define OSGEARTH_DRIVER_KML_COMMON 1 00021 00022 #include <osgEarth/Common> 00023 #include <osgEarth/URI> 00024 #include <osgEarth/MapNode> 00025 #include <osgEarthSymbology/Style> 00026 #include "KMLOptions" 00027 00028 #define LC "[KML] " 00029 00030 using namespace osgEarth; 00031 using namespace osgEarth::Drivers; 00032 using namespace osgEarth::Symbology; 00033 00034 #define for_one( NAME, FUNC, CONF, CX ) \ 00035 { \ 00036 Config c = conf.child( toLower( #NAME ) ); \ 00037 if ( !c.empty() ) { \ 00038 KML_##NAME instance; \ 00039 instance. FUNC (c, CX); \ 00040 } \ 00041 } 00042 00043 #define for_many( NAME, FUNC, CONF, CX ) \ 00044 { \ 00045 ConfigSet c = conf.children( toLower( #NAME ) ); \ 00046 for( ConfigSet::const_iterator i = c.begin(); i != c.end(); ++i ) { \ 00047 KML_##NAME instance; \ 00048 instance. FUNC (*i, CX); \ 00049 } \ 00050 } 00051 00052 #define for_features( FUNC, CONF, CX ) \ 00053 for_many( Document, FUNC, CONF, CX ); \ 00054 for_many( Folder, FUNC, CONF, CX ); \ 00055 for_many( PhotoOverlay, FUNC, CONF, CX ); \ 00056 for_many( ScreenOverlay, FUNC, CONF, CX ); \ 00057 for_many( GroundOverlay, FUNC, CONF, CX ); \ 00058 for_many( NetworkLink, FUNC, CONF, CX ); \ 00059 for_many( Placemark, FUNC, CONF, CX ); 00060 00061 struct KMLContext 00062 { 00063 MapNode* _mapNode; 00064 const KMLOptions* _options; 00065 osg::ref_ptr<StyleSheet> _sheet; 00066 Style _activeStyle; 00067 std::stack<osg::ref_ptr<osg::Group> > _groupStack; 00068 }; 00069 00070 00071 #endif // OSGEARTH_DRIVER_KML_READER 00072