From 56db994994a891acd491da24b4b36420b4e54a88 Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 9 May 2003 20:40:59 +0000 Subject: [PATCH] Moved src/Model/loader.[ch]xx and src/Model/model.[ch]xx to simgear/scene/model/ --- src/ATC/AIEntity.hxx | 3 +- src/ATC/AIPlane.hxx | 2 +- src/Cockpit/hud_card.cxx | 6 +- src/FDM/UFO.cxx | 2 - src/GUI/dialog.cxx | 2 +- src/Main/main.cxx | 4 +- src/Model/Makefile.am | 2 - src/Model/loader.cxx | 81 ----------- src/Model/loader.hxx | 49 ------- src/Model/model.cxx | 262 ----------------------------------- src/Model/model.hxx | 67 --------- src/Model/model_panel.cxx | 2 +- src/Model/modelmgr.cxx | 2 +- src/MultiPlayer/mpplayer.cxx | 3 +- src/Network/multiplay.hxx | 15 +- src/Objects/newmat.cxx | 2 +- src/Scenery/tilemgr.cxx | 2 +- 17 files changed, 24 insertions(+), 482 deletions(-) delete mode 100644 src/Model/loader.cxx delete mode 100644 src/Model/loader.hxx delete mode 100644 src/Model/model.cxx delete mode 100644 src/Model/model.hxx diff --git a/src/ATC/AIEntity.hxx b/src/ATC/AIEntity.hxx index 3156c4724..2ff757049 100644 --- a/src/ATC/AIEntity.hxx +++ b/src/ATC/AIEntity.hxx @@ -25,10 +25,9 @@ #include #include +#include #include -#include - /***************************************************************** * diff --git a/src/ATC/AIPlane.hxx b/src/ATC/AIPlane.hxx index 34e8544b0..5815570eb 100644 --- a/src/ATC/AIPlane.hxx +++ b/src/ATC/AIPlane.hxx @@ -21,10 +21,10 @@ #ifndef _FG_AI_PLANE_HXX #define _FG_AI_PLANE_HXX -#include #include #include #include +#include #include "AIEntity.hxx" #include "ATC.hxx" diff --git a/src/Cockpit/hud_card.cxx b/src/Cockpit/hud_card.cxx index 303b7ff80..ca153418e 100644 --- a/src/Cockpit/hud_card.cxx +++ b/src/Cockpit/hud_card.cxx @@ -435,7 +435,7 @@ draw( void ) // (HUD_scale * pscale ) i = (int)vmin; // N if(zoom ==1) { - zoomed_scale(vmin,vmax); //suma + zoomed_scale((int)vmin,(int)vmax); //suma } else { for( ; i getChild(q)); char ** entries = make_char_array(value_nodes.size()); - for (int i = 0, j = value_nodes.size() - 1; + for (unsigned int i = 0, j = value_nodes.size() - 1; i < value_nodes.size(); i++, j--) entries[i] = strdup((char *)value_nodes[i]->getName()); diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 8be4d24f5..a42fc242e 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -78,7 +78,9 @@ SG_USING_STD(endl); #include #include #include +#include #include +#include #ifdef FG_USE_CLOUDS_3D # include # include @@ -104,8 +106,6 @@ SG_USING_STD(endl); #include #include #include -#include -#include #include #include #ifdef FG_NETWORK_OLK diff --git a/src/Model/Makefile.am b/src/Model/Makefile.am index b08a8e689..d763d443e 100644 --- a/src/Model/Makefile.am +++ b/src/Model/Makefile.am @@ -2,8 +2,6 @@ noinst_LIBRARIES = libModel.a libModel_a_SOURCES = \ acmodel.cxx acmodel.hxx \ - loader.cxx loader.hxx \ - model.cxx model.hxx \ model_panel.cxx model_panel.hxx \ modelmgr.cxx modelmgr.hxx \ panelnode.cxx panelnode.hxx diff --git a/src/Model/loader.cxx b/src/Model/loader.cxx deleted file mode 100644 index 2dad98b39..000000000 --- a/src/Model/loader.cxx +++ /dev/null @@ -1,81 +0,0 @@ -// loader.cxx - implement SSG model and texture loaders. - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include - -#include "loader.hxx" -#include "model.hxx" - - - -//////////////////////////////////////////////////////////////////////// -// Implementation of FGSSGLoader. -//////////////////////////////////////////////////////////////////////// - -FGSSGLoader::FGSSGLoader () -{ - // no op -} - -FGSSGLoader::~FGSSGLoader () -{ - std::map::iterator it = _table.begin(); - while (it != _table.end()) { - it->second->deRef(); - _table.erase(it); - } -} - -void -FGSSGLoader::flush () -{ - std::map::iterator it = _table.begin(); - while (it != _table.end()) { - ssgBase * item = it->second; - // If there is only one reference, it's - // ours; no one else is using the item. - if (item->getRef() == 1) { - item->deRef(); - _table.erase(it); - } - it++; - } -} - - - -//////////////////////////////////////////////////////////////////////// -// Implementation of FGModelLoader. -//////////////////////////////////////////////////////////////////////// - -FGModelLoader::FGModelLoader () -{ -} - -FGModelLoader::~FGModelLoader () -{ -} - -ssgEntity * -FGModelLoader::load_model( const string &fg_root, - const string &path, - SGPropertyNode *prop_root, - double sim_time_sec ) -{ - // FIXME: normalize path to - // avoid duplicates. - std::map::iterator it = _table.find(path); - if (it == _table.end()) { - _table[path] = fgLoad3DModel( fg_root, path, prop_root, sim_time_sec ); - it = _table.find(path); - it->second->ref(); // add one reference to keep it around - } - return (ssgEntity *)it->second; -} - - -// end of loader.cxx diff --git a/src/Model/loader.hxx b/src/Model/loader.hxx deleted file mode 100644 index af50ff74e..000000000 --- a/src/Model/loader.hxx +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef __MODEL_LOADER_HXX -#define __MODEL_LOADER_HXX 1 - -#ifndef __cplusplus -# error This library requires C++ -#endif - -#include // for SG_USING_STD - -#include -SG_USING_STD(map); - -#include -SG_USING_STD(string); - -#include - - -/** - * Base class for loading and managing SSG things. - */ -class FGSSGLoader -{ -public: - FGSSGLoader (); - virtual ~FGSSGLoader (); - virtual void flush (); -protected: - std::map _table; -}; - - -/** - * Class for loading and managing models with XML wrappers. - */ -class FGModelLoader : public FGSSGLoader -{ -public: - FGModelLoader (); - virtual ~FGModelLoader (); - - virtual ssgEntity * load_model( const string &fg_root, - const string &path, - SGPropertyNode *prop_root, - double sim_time_sec ); -}; - - -#endif diff --git a/src/Model/model.cxx b/src/Model/model.cxx deleted file mode 100644 index cbc8ac89a..000000000 --- a/src/Model/model.cxx +++ /dev/null @@ -1,262 +0,0 @@ -// model.cxx - manage a 3D aircraft model. -// Written by David Megginson, started 2002. -// -// This file is in the Public Domain, and comes with no warranty. - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#include // for strcmp() - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "model.hxx" - -SG_USING_STD(vector); - - - -//////////////////////////////////////////////////////////////////////// -// Static utility functions. -//////////////////////////////////////////////////////////////////////// - -/** - * Callback to update an animation. - */ -static int -animation_callback (ssgEntity * entity, int mask) -{ - ((Animation *)entity->getUserData())->update(); - return true; -} - - -/** - * Locate a named SSG node in a branch. - */ -static ssgEntity * -find_named_node (ssgEntity * node, const char * name) -{ - char * node_name = node->getName(); - if (node_name != 0 && !strcmp(name, node_name)) - return node; - else if (node->isAKindOf(ssgTypeBranch())) { - int nKids = node->getNumKids(); - for (int i = 0; i < nKids; i++) { - ssgEntity * result = - find_named_node(((ssgBranch*)node)->getKid(i), name); - if (result != 0) - return result; - } - } - return 0; -} - -/** - * Splice a branch in between all child nodes and their parents. - */ -static void -splice_branch (ssgBranch * branch, ssgEntity * child) -{ - int nParents = child->getNumParents(); - branch->addKid(child); - for (int i = 0; i < nParents; i++) { - ssgBranch * parent = child->getParent(i); - parent->replaceKid(child, branch); - } -} - -/** - * Make an offset matrix from rotations and position offset. - */ -void -fgMakeOffsetsMatrix( sgMat4 * result, double h_rot, double p_rot, double r_rot, - double x_off, double y_off, double z_off ) -{ - sgMat4 rot_matrix; - sgMat4 pos_matrix; - sgMakeRotMat4(rot_matrix, h_rot, p_rot, r_rot); - sgMakeTransMat4(pos_matrix, x_off, y_off, z_off); - sgMultMat4(*result, pos_matrix, rot_matrix); -} - - -void -fgMakeAnimation( ssgBranch * model, - const char * name, - vector &name_nodes, - SGPropertyNode *prop_root, - SGPropertyNode_ptr node, - double sim_time_sec ) -{ - Animation * animation = 0; - const char * type = node->getStringValue("type", "none"); - if (!strcmp("none", type)) { - animation = new NullAnimation(node); - } else if (!strcmp("range", type)) { - animation = new RangeAnimation(node); - } else if (!strcmp("billboard", type)) { - animation = new BillboardAnimation(node); - } else if (!strcmp("select", type)) { - animation = new SelectAnimation(prop_root, node); - } else if (!strcmp("spin", type)) { - animation = new SpinAnimation(prop_root, node, sim_time_sec ); - } else if (!strcmp("timed", type)) { - animation = new TimedAnimation(node); - } else if (!strcmp("rotate", type)) { - animation = new RotateAnimation(prop_root, node); - } else if (!strcmp("translate", type)) { - animation = new TranslateAnimation(prop_root, node); - } else { - animation = new NullAnimation(node); - SG_LOG(SG_INPUT, SG_WARN, "Unknown animation type " << type); - } - - if (name != 0) - animation->setName((char *)name); - - ssgEntity * object; - if (name_nodes.size() > 0) { - object = find_named_node(model, name_nodes[0]->getStringValue()); - if (object == 0) { - SG_LOG(SG_INPUT, SG_WARN, "Object " << name_nodes[0]->getStringValue() - << " not found"); - delete animation; - animation = 0; - } - } else { - object = model; - } - - ssgBranch * branch = animation->getBranch(); - splice_branch(branch, object); - - for (unsigned int i = 1; i < name_nodes.size(); i++) { - const char * name = name_nodes[i]->getStringValue(); - object = find_named_node(model, name); - if (object == 0) { - SG_LOG(SG_INPUT, SG_WARN, "Object " << name << " not found"); - delete animation; - animation = 0; - } - ssgBranch * oldParent = object->getParent(0); - branch->addKid(object); - oldParent->removeKid(object); - } - - animation->init(); - branch->setUserData(animation); - branch->setTravCallback(SSG_CALLBACK_PRETRAV, animation_callback); -} - - - - -//////////////////////////////////////////////////////////////////////// -// Global functions. -//////////////////////////////////////////////////////////////////////// - -ssgBranch * -fgLoad3DModel( const string &fg_root, const string &path, - SGPropertyNode *prop_root, - double sim_time_sec ) -{ - ssgBranch * model = 0; - SGPropertyNode props; - - // Load the 3D aircraft object itself - SGPath xmlpath; - SGPath modelpath = path; - if ( ulIsAbsolutePathName( path.c_str() ) ) { - xmlpath = modelpath; - } - else { - xmlpath = fg_root; - xmlpath.append(modelpath.str()); - } - - // Check for an XML wrapper - if (xmlpath.str().substr(xmlpath.str().size() - 4, 4) == ".xml") { - readProperties(xmlpath.str(), &props); - if (props.hasValue("/path")) { - modelpath = modelpath.dir(); - modelpath.append(props.getStringValue("/path")); - } else { - if (model == 0) - model = new ssgBranch; - } - } - - // Assume that textures are in - // the same location as the XML file. - if (model == 0) { - ssgTexturePath((char *)xmlpath.dir().c_str()); - model = (ssgBranch *)ssgLoad((char *)modelpath.c_str()); - if (model == 0) - throw sg_exception("Failed to load 3D model"); - } - - // Set up the alignment node - ssgTransform * alignmainmodel = new ssgTransform; - alignmainmodel->addKid(model); - sgMat4 res_matrix; - fgMakeOffsetsMatrix(&res_matrix, - props.getFloatValue("/offsets/heading-deg", 0.0), - props.getFloatValue("/offsets/roll-deg", 0.0), - props.getFloatValue("/offsets/pitch-deg", 0.0), - props.getFloatValue("/offsets/x-m", 0.0), - props.getFloatValue("/offsets/y-m", 0.0), - props.getFloatValue("/offsets/z-m", 0.0)); - alignmainmodel->setTransform(res_matrix); - - unsigned int i; - - // Load animations - vector animation_nodes = props.getChildren("animation"); - for (i = 0; i < animation_nodes.size(); i++) { - const char * name = animation_nodes[i]->getStringValue("name", 0); - vector name_nodes = - animation_nodes[i]->getChildren("object-name"); - fgMakeAnimation( model, name, name_nodes, prop_root, animation_nodes[i], - sim_time_sec); - } - - // Load sub-models - vector model_nodes = props.getChildren("model"); - for (i = 0; i < model_nodes.size(); i++) { - SGPropertyNode_ptr node = model_nodes[i]; - ssgTransform * align = new ssgTransform; - sgMat4 res_matrix; - fgMakeOffsetsMatrix(&res_matrix, - node->getFloatValue("offsets/heading-deg", 0.0), - node->getFloatValue("offsets/roll-deg", 0.0), - node->getFloatValue("offsets/pitch-deg", 0.0), - node->getFloatValue("offsets/x-m", 0.0), - node->getFloatValue("offsets/y-m", 0.0), - node->getFloatValue("offsets/z-m", 0.0)); - align->setTransform(res_matrix); - - ssgBranch * kid = fgLoad3DModel( fg_root, node->getStringValue("path"), - prop_root, sim_time_sec ); - align->addKid(kid); - model->addKid(align); - } - - return alignmainmodel; -} - - -// end of model.cxx diff --git a/src/Model/model.hxx b/src/Model/model.hxx deleted file mode 100644 index 4102460db..000000000 --- a/src/Model/model.hxx +++ /dev/null @@ -1,67 +0,0 @@ -// model.hxx - manage a 3D aircraft model. -// Written by David Megginson, started 2002. -// -// This file is in the Public Domain, and comes with no warranty. - -#ifndef __MODEL_HXX -#define __MODEL_HXX 1 - -#ifndef __cplusplus -# error This library requires C++ -#endif - -#include - -SG_USING_STD(vector); - -#include -#include - -#include - - -// Has anyone done anything *really* stupid, like making min and max macros? -#ifdef min -#undef min -#endif -#ifdef max -#undef max -#endif - - -/** - * Load a 3D model with or without XML wrapper. Note, this version - * Does not know about or load the panel/cockpit information. Use the - * "model_panel.hxx" version if you want to load an aircraft - * (i.e. ownship) with a panel. - * - * If the path ends in ".xml", then it will be used as a property- - * list wrapper to add animations to the model. - * - * Subsystems should not normally invoke this function directly; - * instead, they should use the FGModelLoader declared in loader.hxx. - */ -ssgBranch * fgLoad3DModel( const string& fg_root, const string &path, - SGPropertyNode *prop_root, double sim_time_sec ); - - -/** - * Make an offset matrix from rotations and position offset. - */ -void -fgMakeOffsetsMatrix( sgMat4 * result, double h_rot, double p_rot, double r_rot, - double x_off, double y_off, double z_off ); - -/** - * Make the animation - */ -void -fgMakeAnimation( ssgBranch * model, - const char * name, - vector &name_nodes, - SGPropertyNode *prop_root, - SGPropertyNode_ptr node, - double sim_time_sec ); - - -#endif // __MODEL_HXX diff --git a/src/Model/model_panel.cxx b/src/Model/model_panel.cxx index 3e09b6fff..b06d83c8a 100644 --- a/src/Model/model_panel.cxx +++ b/src/Model/model_panel.cxx @@ -22,10 +22,10 @@ #include #include #include +#include #include "panelnode.hxx" -#include "model.hxx" #include "model_panel.hxx" SG_USING_STD(vector); diff --git a/src/Model/modelmgr.cxx b/src/Model/modelmgr.cxx index f178b26e9..a1d92a962 100644 --- a/src/Model/modelmgr.cxx +++ b/src/Model/modelmgr.cxx @@ -10,11 +10,11 @@ #include #include +#include #include
#include -#include "model.hxx" #include "modelmgr.hxx" diff --git a/src/MultiPlayer/mpplayer.cxx b/src/MultiPlayer/mpplayer.cxx index a89e373a7..a57103f29 100644 --- a/src/MultiPlayer/mpplayer.cxx +++ b/src/MultiPlayer/mpplayer.cxx @@ -52,8 +52,9 @@ #include #include +#include + #include
-#include #include diff --git a/src/Network/multiplay.hxx b/src/Network/multiplay.hxx index 10bea8ae1..c7459e21a 100644 --- a/src/Network/multiplay.hxx +++ b/src/Network/multiplay.hxx @@ -25,18 +25,23 @@ #define FG_MULTIPLAY_HID "$Id$" -#include STL_STRING -SG_USING_STD(string); - -#include "protocol.hxx" #include + +#include STL_STRING + +#include + #include
#include
#include -#include #include #include +#include "protocol.hxx" + +SG_USING_STD(string); + + /**************************************************************** * @version $Id$ * diff --git a/src/Objects/newmat.cxx b/src/Objects/newmat.cxx index c68eec91d..fe9ae938b 100644 --- a/src/Objects/newmat.cxx +++ b/src/Objects/newmat.cxx @@ -40,10 +40,10 @@ SG_USING_STD(map); #include #include #include +#include #include
#include
-#include #include "newmat.hxx" diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx index 6c0d106ef..bc94fc620 100644 --- a/src/Scenery/tilemgr.cxx +++ b/src/Scenery/tilemgr.cxx @@ -34,11 +34,11 @@ #include #include #include +#include #include
#include
#include
-#include #include #include "newcache.hxx"