#include <simgear/props/props.hxx>
#include <simgear/misc/sg_path.hxx>
+namespace osg {
+ class PagedLOD;
+}
+
namespace simgear {
class SGModelData; // defined below
public:
typedef osg::Node *(*panel_func)(SGPropertyNode *);
- typedef SGPath (*resolve_func)(const std::string& path);
-
- static void init(const std::string &root_dir);
+ static void init(const std::string &root_dir, SGPropertyNode* root);
- static void setPropRoot(SGPropertyNode* root);
+ static void resetPropertyRoot();
static void setPanelFunc(panel_func pf);
- static void setResolveFunc(resolve_func rf);
-
// Load a 3D model (any format)
// data->modelLoaded() will be called after the model is loaded
static osg::Node* loadModel(const std::string &path,
SGModelData *data=0, bool load2DPanels=false);
// Load a 3D model (any format) through the DatabasePager.
- // Most models should be loaded using this function!
- // This function will initially return an SGPagedLOD node.
- // data->modelLoaded() will be called after the model is loaded and
- // connected to the scene graph. See AIModelData on how to use this.
- // NOTE: AIModelData uses observer_ptr to avoid circular references.
- static osg::Node* loadPagedModel(const std::string &path,
+ // This function initially just returns a proxy node that refers to
+ // the model file. Once the viewer steps onto that node the
+ // model will be loaded.
+ static osg::Node* loadDeferredModel(const std::string &path,
+ SGPropertyNode *prop_root = NULL,
+ SGModelData *data=0);
+ // Load a 3D model (any format) through the DatabasePager.
+ // This function initially just returns a PagedLOD node that refers to
+ // the model file. Once the viewer steps onto that node the
+ // model will be loaded. When the viewer does no longer reference this
+ // node for a long time the node is unloaded again.
+ static osg::PagedLOD* loadPagedModel(const std::string &path,
SGPropertyNode *prop_root = NULL,
SGModelData *data=0);
- static std::string findDataFile(const std::string& file, const osgDB::ReaderWriter::Options* opts = NULL);
+ static std::string findDataFile(const std::string& file,
+ const osgDB::Options* opts = NULL,
+ SGPath currentDir = SGPath());
protected:
SGModelLib();
~SGModelLib ();
private:
static SGPropertyNode_ptr static_propRoot;
static panel_func static_panelFunc;
- static resolve_func static_resolver;
};
virtual ~SGModelData() {}
virtual void modelLoaded(const std::string& path, SGPropertyNode *prop,
osg::Node* branch) = 0;
+ virtual SGModelData* clone() const = 0;
};
}