⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exportoptions.cpp

📁 最新osg包
💻 CPP
字号:
/*  * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or (at * your option) any later version. The full license is in the LICENSE file * included with this distribution, and on the openscenegraph.org website. *  * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details.*///// Copyright(c) 2008 Skew Matrix Software LLC.//#include <osg/Notify>#include <osg/ProxyNode>#include <osgDB/FileNameUtils>#include <osgDB/FileUtils>#include <osgDB/Registry>#include <osgDB/ReadFile>#include "ExportOptions.h"#include <fstream>#include <sstream>namespace flt{/** @name Valid Option Strings *  This plugin supports the following \c Option string values. *///@{/** Value: "version". *  Specifies the version of the output OpenFlight file. Supported values *  include 15.7, 15.8, and 16.1. Default is 16.1. Example: *  "version=15.8". */std::string ExportOptions::_versionOption( "version" );/** Value: "units". *  Specifies the contents of the \c Units field of the OpenFliht header record. *  Valid values include INCHES, FEET, METERS, KILOMETERS, and NATICAL_MILES. *  Default is METERS. Example: "units=METERS". */std::string ExportOptions::_unitsOption( "units" );/** Value: "validate". *  If present in the Options string, the plugin does not write an OpenFlight file. *  Instead, it returns an indication of the scene graph's suitability for *  OpenFlight export. */std::string ExportOptions::_validateOption( "validate" );/** Value: "tempDir". *  Specifies the directory to use for creation of temporary files. If not *  specified, the directory is taken from the file name. If the file doesn't *  contain a path, the current working directory is used. Applications should *  set this to the name of their app-specific temp directory. If the path *  contains spaces, use double quotes to ensure correct parsing. Examples: *  "tempDir=/tmp". *  "tempDir=\"C:\\My Temp Dir\"". */std::string ExportOptions::_tempDirOption( "tempDir" );/** Value: "lighting". *  Specifies a default enable/disable state for lighting, for Nodes in the  *  exported scene graph that don't set it explicitly. By default, the *  exporter assumes lighting is enabled (GL_LIGHTING ON). Set this to *  either ON or OFF. Example: *  "lighting=OFF". */std::string ExportOptions::_lightingOption( "lighting" );/** Value: "stripTextureFilePath". *  If present in the Options string, the exporter strips the path from *  texture file names, and writes only the texture file name to the FLT *  Texture Palette. By default, the exporter doesn't strip the path, *  and the name written to the Texture Palette is taken directly from *  the osg::Image object referenced by the osg::Texture2D StateAttribute. */std::string ExportOptions::_stripTextureFilePathOption( "stripTextureFilePath" );//@}using namespace osgDB;const int ExportOptions::VERSION_15_7( 1570 );const int ExportOptions::VERSION_15_8( 1580 );const int ExportOptions::VERSION_16_1( 1610 );ExportOptions::ExportOptions()  : _version( VERSION_16_1 ),    _units( METERS ),    _validate( false ),    _lightingDefault( true ),    _stripTextureFilePath( false ){}ExportOptions::ExportOptions( const osgDB::ReaderWriter::Options* opt )  : _version( VERSION_16_1 ),    _units( METERS ),    _validate( false ),    _lightingDefault( true ),    _stripTextureFilePath( false )    {    if (opt)    {        const ExportOptions* fltOpt = dynamic_cast<const ExportOptions*>( opt );        if (fltOpt)        {            _version = fltOpt->_version;            _units = fltOpt->_units;            _validate = fltOpt->_validate;            _tempDir = fltOpt->_tempDir;            _lightingDefault = fltOpt->_lightingDefault;        }        setOptionString( opt->getOptionString() );    }}voidExportOptions::parseOptionsString(){    // Parse out the option string and store values directly in    //   ExportOptions member variables.    const std::string& str = getOptionString();    if (str.empty())        return;    std::string::size_type pos( 0 );    while (pos != str.npos)    {        // Skip leading spaces.        while ( (pos < str.length()) &&            (str[pos] == ' ') )            pos++;        // Get the next token        std::string::size_type count = str.substr( pos ).find_first_of( " =" );        std::string token = str.substr( pos, count );        if (count == str.npos)            pos = str.npos;        else            pos += (count+1);        // See if it's a Boolen/toggle        if ( token == _validateOption )        {            osg::notify( osg::INFO ) << "fltexp: Found: " << token << std::endl;            setValidateOnly( true );            continue;        }        if ( token == _stripTextureFilePathOption )        {            osg::notify( osg::INFO ) << "fltexp: Found: " << token << std::endl;            setStripTextureFilePath( true );            continue;        }        // Not a Boolean/toggle. Must have a value.        // Get the value of the token, which could be double-quoted.        if( str[pos] == '"' )        {            ++pos;            count = str.substr( pos ).find_first_of( '"' );        }        else            count = str.substr( pos ).find_first_of( ' ' );        std::string value = str.substr( pos, count );        if (count == str.npos)            pos = str.npos;        else            pos += (count+1);        if (token == _versionOption)        {            osg::notify( osg::INFO ) << "fltexp: Token: " << token << ", Value: " << value << std::endl;            int version( VERSION_16_1 );            if( value == std::string( "15.7" ) )                version = VERSION_15_7;            else if( value == std::string( "15.8" ) )                version = VERSION_15_8;            else if( value != std::string( "16.1" ) )                osg::notify( osg::WARN ) << "fltexp: Unsupported version: " << value << ". Defaulting to 16.1." << std::endl;            setFlightFileVersionNumber( version );        }        else if (token == _unitsOption)        {            osg::notify( osg::INFO ) << "fltexp: Token: " << token << ", Value: " << value << std::endl;            FlightUnits units( METERS );            if( value == std::string( "KILOMETERS" ) )                units = KILOMETERS;            else if( value == std::string( "FEET" ) )                units = FEET;            else if( value == std::string( "INCHES" ) )                units = INCHES;            else if( value == std::string( "NAUTICAL_MILES" ) )                units = NAUTICAL_MILES;            else if( value != std::string( "METERS" ) )                osg::notify( osg::WARN ) << "fltexp: Unsupported units: " << value << ". Defaulting to METERS." << std::endl;            setFlightUnits( units );        }        else if (token == _tempDirOption)        {            osg::notify( osg::INFO ) << "fltexp: Token: " << token << ", Value: " << value << std::endl;            setTempDir( value );        }        else if (token == _lightingOption)        {            osg::notify( osg::INFO ) << "fltexp: Token: " << token << ", Value: " << value << std::endl;            bool lighting( true );            if (value == std::string( "OFF" ) )                lighting = false;            else if (value != std::string( "ON" ) )                osg::notify( osg::WARN ) << "fltexp: Unsupported lighting value: " << value << ". Defaulting to ON." << std::endl;            setLightingDefault( lighting );        }        else            osg::notify( osg::WARN ) << "fltexp: Bogus OptionString: " << token << std::endl;    }}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -