X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Fvehicletype.cpp;h=27fb883a985241ef12b66ea8a4e56d5cff9f91b3;hb=dbaa67c30705a9993d2626cec588c7320f1eef17;hp=93601f75e12d56993df015f8f5de7417e493f5bc;hpb=735a3d70f1bbfa34d4a2709f2e24b70acd9d7ee7;p=r2c2.git diff --git a/source/3d/vehicletype.cpp b/source/3d/vehicletype.cpp index 93601f7..27fb883 100644 --- a/source/3d/vehicletype.cpp +++ b/source/3d/vehicletype.cpp @@ -31,7 +31,7 @@ T get(const map ¶ms, const string &key, T def = T()) namespace R2C2 { -VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t): +VehicleType3D::VehicleType3D(Catalogue3D &c, const VehicleType &t): catalogue(c), type(t), body_object(0), @@ -51,6 +51,10 @@ VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t): for(vector::const_iterator j=i->axles.begin(); j!=i->axles.end(); ++j) axle_objects.back().push_back(get_object(j->object)); } + + const vector &rods = type.get_rods(); + for(vector::const_iterator i=rods.begin(); i!=rods.end(); ++i) + rod_objects.push_back(get_object(i->object)); } VehicleType3D::~VehicleType3D() @@ -82,6 +86,13 @@ const GL::Object *VehicleType3D::get_bogie_axle_object(unsigned i, unsigned j) c return axle_objects[i+1][j]; } +const GL::Object *VehicleType3D::get_rod_object(unsigned i) const +{ + if(i>=rod_objects.size()) + throw InvalidParameterValue("Rod index out of range"); + return rod_objects[i]; +} + GL::Object *VehicleType3D::get_object(const string &name) { if(name.empty()) @@ -133,10 +144,7 @@ GL::Object *VehicleType3D::get_object(const string &name) } } else - { - ptr = new GL::Object; - DataFile::load(*ptr, name); - } + return catalogue.get(name); } return ptr; }