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.
23 class SGModelPlacement;
27 * Manage a list of user-specified models.
29 class FGModelMgr : public SGSubsystem
34 * A dynamically-placed model using properties.
36 * The model manager uses the property nodes to update the model's
37 * position and orientation; any of the property node pointers may
38 * be set to zero to avoid update. Normally, a caller should
39 * load the model by instantiating SGModelPlacement with the path
40 * to the model or its XML wrapper, then assign any relevant
41 * property node pointers.
43 * @see SGModelPlacement
44 * @see FGModelMgr#add_instance
50 SGModelPlacement * model;
51 SGPropertyNode * lon_deg_node;
52 SGPropertyNode * lat_deg_node;
53 SGPropertyNode * elev_ft_node;
54 SGPropertyNode * roll_deg_node;
55 SGPropertyNode * pitch_deg_node;
56 SGPropertyNode * heading_deg_node;
60 virtual ~FGModelMgr ();
64 virtual void unbind ();
65 virtual void update (double dt);
68 * Add an instance of a dynamic model to the manager.
70 * NOTE: pointer ownership is transferred to the model manager!
72 * The caller is responsible for setting up the Instance structure
73 * as required. The model manager will continuously update the
74 * location and orientation of the model based on the current
75 * values of the properties.
77 virtual void add_instance (Instance * instance);
81 * Remove an instance of a dynamic model from the manager.
83 * NOTE: the manager will delete the instance as well.
85 virtual void remove_instance (Instance * instance);
91 vector<Instance *> _instances;
93 ssgSelector * _selector;
97 #endif // __MODELMGR_HXX