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 #include <osgEarthFeatures/ConvertTypeFilter> 00020 #include <list> 00021 #include <deque> 00022 00023 using namespace osgEarth; 00024 using namespace osgEarth::Features; 00025 using namespace osgEarth::Symbology; 00026 00027 00028 ConvertTypeFilter::ConvertTypeFilter() : 00029 _toType( Geometry::TYPE_UNKNOWN ) 00030 { 00031 //NOP 00032 } 00033 00034 ConvertTypeFilter::ConvertTypeFilter( const Geometry::Type& toType ) : 00035 _toType( toType ) 00036 { 00037 // NOP 00038 } 00039 00040 ConvertTypeFilter::ConvertTypeFilter( const ConvertTypeFilter& rhs ) : 00041 _toType( rhs._toType ) 00042 { 00043 //NOP 00044 } 00045 00046 FilterContext 00047 ConvertTypeFilter::push( FeatureList& input, FilterContext& context ) 00048 { 00049 if ( !isSupported() ) 00050 { 00051 OE_WARN << "ConvertTypeFilter support not enabled" << std::endl; 00052 return context; 00053 } 00054 00055 bool ok = true; 00056 for( FeatureList::iterator i = input.begin(); i != input.end(); ++i ) 00057 { 00058 Feature* input = i->get(); 00059 if ( input && input->getGeometry() && input->getGeometry()->getComponentType() != _toType ) 00060 { 00061 input->setGeometry( input->getGeometry()->cloneAs(_toType) ); 00062 } 00063 } 00064 00065 return context; 00066 }