+ typedef osg::Node *(*panel_func)(SGPropertyNode *);
+
+ static void init(const std::string &root_dir, SGPropertyNode* root);
+
+ static void resetPropertyRoot();
+
+ static void setPanelFunc(panel_func pf);
+
+ // Load a 3D model (any format)
+ // data->modelLoaded() will be called after the model is loaded
+ static osg::Node* loadModel(const std::string &path,
+ SGPropertyNode *prop_root = NULL,
+ SGModelData *data=0, bool load2DPanels=false);
+
+ // Load a 3D model (any format) through the DatabasePager.
+ // 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::Options* opts = NULL,
+ SGPath currentDir = SGPath());
+protected:
+ SGModelLib();
+ ~SGModelLib ();
+
+private:
+ static SGPropertyNode_ptr static_propRoot;
+ static panel_func static_panelFunc;
+};