/usr/include/osgEarth/ModelSource is in libosgearth-dev 2.7.0+dfsg-2+b3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | /* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
* Copyright 2015 Pelican Mapping
* http://osgearth.org
*
* osgEarth is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
#ifndef OSGEARTH_MODEL_SOURCE_H
#define OSGEARTH_MODEL_SOURCE_H 1
#include <osgEarth/Common>
#include <osgEarth/Config>
#include <osgEarth/GeoData>
#include <osgEarth/NodeUtils>
#include <osgEarth/Revisioning>
#include <osgEarth/ThreadingUtils>
#include <osg/Referenced>
namespace osgEarth
{
class Map;
class ProgressCallback;
/**
* Configuration options for a models source.
*/
class OSGEARTH_EXPORT ModelSourceOptions : public DriverConfigOptions
{
public:
ModelSourceOptions( const ConfigOptions& options =ConfigOptions() );
/** dtor */
virtual ~ModelSourceOptions();
public: // properties
/** minimum camera range at which the data is visible */
optional<float>& minRange() { return _minRange; }
const optional<float>& minRange() const { return _minRange; }
/** maximum camera range at which the data is visible */
optional<float>& maxRange() { return _maxRange; }
const optional<float>& maxRange() const { return _maxRange; }
/** render bin order */
optional<int>& renderOrder() { return _renderOrder; }
const optional<int>& renderOrder() const { return _renderOrder; }
/** whether to read the depth buffer when rendering */
optional<bool>& depthTestEnabled() { return _depthTestEnabled; }
const optional<bool>& depthTestEnabled() const { return _depthTestEnabled; }
public:
virtual Config getConfig() const;
protected:
virtual void mergeConfig( const Config& conf );
private:
void fromConfig( const Config& conf );
optional<float> _minRange, _maxRange;
optional<int> _renderOrder;
optional<bool> _depthTestEnabled;
optional<bool> _overlay;
};
/**
* A ModelSource is a plugin object that generates OSG nodes.
*/
class OSGEARTH_EXPORT ModelSource : public osg::Object, public Revisioned
{
public:
ModelSource( const ModelSourceOptions& options =ModelSourceOptions() );
/** dtor */
virtual ~ModelSource();
osg::Node* createNode(
const Map* map,
ProgressCallback* progress );
/**
* Subclass implements this method to create a scene graph within the
* context of the provided Map.
*/
virtual osg::Node* createNodeImplementation(
const Map* map,
ProgressCallback* progress ) =0;
/**
* Add a post processing operation that will run (possibly in a pager
* thread) after a new node has been generated.
*/
void addPreMergeOperation( NodeOperation* cb );
/**
* Add a post processing operation that will run (in the update thread)
* after a node merges into the scene graph.
*/
void addPostMergeOperation( NodeOperation* cb );
/**
* Remove a pre-merge processing operation
*/
void removePreMergeOperation( NodeOperation* cb );
/**
* Remove a post-merge processing operation
*/
void removePostMergeOperation( NodeOperation* cb );
/**
* The vector of post processor callback operations
*/
const NodeOperationVector& preMergeOperations() const { return *_preMergeOps; }
const NodeOperationVector& postMergeOperations() const { return *_postMergeOps; }
public: // META_Object specialization
// these are neseccary to we can load ModelSource implementations as plugins
virtual osg::Object* cloneType() const { return 0; } // cloneType() not appropriate
virtual osg::Object* clone(const osg::CopyOp&) const { return 0; } // clone() not appropriate
virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const ModelSource*>(obj)!=NULL; }
virtual const char* className() const { return "ModelSource"; }
virtual const char* libraryName() const { return "osgEarth"; }
public:
/** Perform any one-time initialization */
virtual void initialize( const osgDB::Options* dbOptions ) { }
/** Get the options used to create this model source */
const ModelSourceOptions& getOptions() const { return _options; }
/**
* Gets the list of areas with data for this ModelSource
*/
const DataExtentList& getDataExtents() const { return _dataExtents; }
DataExtentList& getDataExtents() { return _dataExtents; }
protected:
/**
* Fire the callbacks. The implementation class should call this whenever it adds
* a new node.
*/
void firePostProcessors( osg::Node* node );
protected:
osg::ref_ptr<RefNodeOperationVector> _postMergeOps;
osg::ref_ptr<RefNodeOperationVector> _preMergeOps;
private:
const ModelSourceOptions _options;
optional<double> _minRange;
optional<double> _maxRange;
optional<int> _renderOrder;
DataExtentList _dataExtents;
friend class Map;
friend class MapEngine;
friend class ModelSourceFactory;
};
//--------------------------------------------------------------------
class OSGEARTH_EXPORT ModelSourceDriver : public osgDB::ReaderWriter
{
protected:
const ModelSourceOptions& getModelSourceOptions( const osgDB::ReaderWriter::Options* rwOpt ) const;
virtual ~ModelSourceDriver();
};
//--------------------------------------------------------------------
/**
* Creates TileSource instances and chains them together to create
* tile source "pipelines" for data access and processing.
*/
class OSGEARTH_EXPORT ModelSourceFactory
{
public:
static ModelSource* create( const ModelSourceOptions& options );
virtual ~ModelSourceFactory();
};
}
#endif // OSGEARTH_MODEL_SOURCE_H
|