1 // model-mgr.hxx - manage user-specified 3D models.
2 // Written by David Megginson, started 2002.
4 // This file is in the Public Domain, and comes with no warranty.
7 #define __MODELMGR_HXX 1
10 # error This library requires C++
15 #include <simgear/compiler.h> // for SG_USING_STD
16 #include <simgear/structure/subsystem_mgr.hxx>
20 // Don't pull in headers, since we don't need them here.
22 class SGModelPlacement;
26 * Manage a list of user-specified models.
28 class FGModelMgr : public SGSubsystem
33 * A dynamically-placed model using properties.
35 * The model manager uses the property nodes to update the model's
36 * position and orientation; any of the property node pointers may
37 * be set to zero to avoid update. Normally, a caller should
38 * load the model by instantiating SGModelPlacement with the path
39 * to the model or its XML wrapper, then assign any relevant
40 * property node pointers.
42 * @see SGModelPlacement
43 * @see FGModelMgr#add_instance
49 SGModelPlacement * model;
50 SGPropertyNode_ptr node;
51 SGPropertyNode_ptr lon_deg_node;
52 SGPropertyNode_ptr lat_deg_node;
53 SGPropertyNode_ptr elev_ft_node;
54 SGPropertyNode_ptr roll_deg_node;
55 SGPropertyNode_ptr pitch_deg_node;
56 SGPropertyNode_ptr heading_deg_node;
61 virtual ~FGModelMgr ();
65 virtual void unbind ();
66 virtual void update (double dt);
68 virtual void add_model (SGPropertyNode * node);
71 * Add an instance of a dynamic model to the manager.
73 * NOTE: pointer ownership is transferred to the model manager!
75 * The caller is responsible for setting up the Instance structure
76 * as required. The model manager will continuously update the
77 * location and orientation of the model based on the current
78 * values of the properties.
80 virtual void add_instance (Instance * instance);
84 * Remove an instance of a dynamic model from the manager.
86 * NOTE: the manager will delete the instance as well.
88 virtual void remove_instance (Instance * instance);
96 * Listener class that adds models at runtime.
98 class Listener : public SGPropertyChangeListener
101 Listener(FGModelMgr *mgr) : _mgr(mgr) {}
102 virtual void childAdded (SGPropertyNode * parent, SGPropertyNode * child);
103 virtual void childRemoved (SGPropertyNode * parent, SGPropertyNode * child);
109 SGPropertyNode_ptr _models;
110 Listener * _listener;
112 vector<Instance *> _instances;
116 #endif // __MODELMGR_HXX