00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _SG_MODEL_LIB_HXX
00019 #define _SG_MODEL_LIB_HXX 1
00020
00021 #ifndef __cplusplus
00022 # error This library requires C++
00023 #endif
00024
00025 #include <simgear/compiler.h>
00026
00027 #include <string>
00028
00029 #include <osg/Node>
00030
00031 #include <simgear/props/props.hxx>
00032
00033 using std::map;
00034 using std::string;
00035
00036 namespace simgear {
00037
00038 class SGModelData;
00039
00043 class SGModelLib
00044 {
00045 public:
00046 typedef osg::Node *(*panel_func)(SGPropertyNode *);
00047
00048 static void init(const string &root_dir);
00049
00050
00051
00052 static osg::Node* loadModel(const string &path,
00053 SGPropertyNode *prop_root,
00054 SGModelData *data=0);
00055
00056
00057
00058 static osg::Node* loadModel(const string &path,
00059 SGPropertyNode *prop_root,
00060 panel_func pf);
00061
00062
00063
00064
00065
00066
00067
00068 static osg::Node* loadPagedModel(const string &path,
00069 SGPropertyNode *prop_root,
00070 SGModelData *data=0);
00071
00072 protected:
00073 SGModelLib();
00074 ~SGModelLib ();
00075 };
00076
00077
00083 class SGModelData : public osg::Referenced {
00084 public:
00085 virtual ~SGModelData() {}
00086 virtual void modelLoaded(const string& path, SGPropertyNode *prop,
00087 osg::Node* branch) = 0;
00088 };
00089
00090 }
00091
00092 #endif // _SG_MODEL_LIB_HXX