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;
60 virtual ~FGModelMgr ();
64 virtual void unbind ();
65 virtual void update (double dt);
67 virtual void add_model (SGPropertyNode * node);
70 * Add an instance of a dynamic model to the manager.
72 * NOTE: pointer ownership is transferred to the model manager!
74 * The caller is responsible for setting up the Instance structure
75 * as required. The model manager will continuously update the
76 * location and orientation of the model based on the current
77 * values of the properties.
79 virtual void add_instance (Instance * instance);
83 * Remove an instance of a dynamic model from the manager.
85 * NOTE: the manager will delete the instance as well.
87 virtual void remove_instance (Instance * instance);
95 * Listener class that adds models at runtime.
97 class Listener : public SGPropertyChangeListener
100 Listener(FGModelMgr *mgr) : _mgr(mgr) {}
101 virtual void childAdded (SGPropertyNode * parent, SGPropertyNode * child);
102 virtual void childRemoved (SGPropertyNode * parent, SGPropertyNode * child);
108 SGPropertyNode_ptr _models;
109 Listener * _listener;
111 vector<Instance *> _instances;
115 #endif // __MODELMGR_HXX