X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Fvehicletype.cpp;h=620e6d807a8332d2f02493a0105139b83cf953c2;hb=621c5c938d70ba0d155e0eda91a708db0a52c0dc;hp=b283eddebe896b1307881fef7b96098117dd64b1;hpb=30df355287abd0bfe1189e616056335505287e9a;p=r2c2.git diff --git a/source/3d/vehicletype.cpp b/source/3d/vehicletype.cpp index b283edd..620e6d8 100644 --- a/source/3d/vehicletype.cpp +++ b/source/3d/vehicletype.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of the MSP Märklin suite -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #include #include #include @@ -29,9 +22,9 @@ T get(const map ¶ms, const string &key, T def = T()) } -namespace Marklin { +namespace R2C2 { -VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t): +VehicleType3D::VehicleType3D(Catalogue3D &c, const VehicleType &t): catalogue(c), type(t), body_object(0), @@ -39,7 +32,7 @@ VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t): { body_object = get_object(type.get_object()); - const vector &axles = type.get_axles(); + const vector &axles = type.get_fixed_axles(); for(vector::const_iterator i=axles.begin(); i!=axles.end(); ++i) axle_objects[0].push_back(get_object(i->object)); @@ -51,6 +44,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() @@ -59,29 +56,36 @@ VehicleType3D::~VehicleType3D() delete i->second; } -const GL::Object *VehicleType3D::get_axle_object(unsigned i) const +const GL::Object *VehicleType3D::get_fixed_axle_object(unsigned i) const { if(i>=axle_objects[0].size()) - throw InvalidParameterValue("Axle index out of range"); + throw out_of_range("VehicleType3D::get_fixed_axle_object"); return axle_objects[0][i]; } const GL::Object *VehicleType3D::get_bogie_object(unsigned i) const { if(i>=bogie_objects.size()) - throw InvalidParameterValue("Bogie index out of range"); + throw out_of_range("VehicleType3D::get_bogie_object"); return bogie_objects[i]; } const GL::Object *VehicleType3D::get_bogie_axle_object(unsigned i, unsigned j) const { if(i>=bogie_objects.size()) - throw InvalidParameterValue("Bogie index out of range"); + throw out_of_range("VehicleType3D::get_bogie_axle_object"); if(j>=axle_objects[i+1].size()) - throw InvalidParameterValue("Axle index out of range"); + throw out_of_range("VehicleType3D::get_bogie_axle_object"); return axle_objects[i+1][j]; } +const GL::Object *VehicleType3D::get_rod_object(unsigned i) const +{ + if(i>=rod_objects.size()) + throw out_of_range("VehicleType3D::get_rod_object"); + return rod_objects[i]; +} + GL::Object *VehicleType3D::get_object(const string &name) { if(name.empty()) @@ -133,10 +137,7 @@ GL::Object *VehicleType3D::get_object(const string &name) } } else - { - ptr = new GL::Object; - DataFile::load(*ptr, name); - } + return catalogue.get(name); } return ptr; } @@ -154,7 +155,7 @@ GL::Technique *VehicleType3D::create_technique(const map ¶ms mat->set_diffuse(GL::Color(1)); pass.set_material(mat); GL::Texture2D *tex = new GL::Texture2D; - tex->storage(GL::RGB, 2, 1, 0); + tex->storage(GL::RGB, 2, 1); tex->set_min_filter(GL::NEAREST); tex->set_mag_filter(GL::NEAREST); unsigned char data[6] = { color>>16, color>>8, color, color2>>16, color2>>8, color2 }; @@ -342,4 +343,4 @@ GL::Mesh *VehicleType3D::create_flat_wagon(const map ¶ms) return mesh; } -} // namespace Marklin +} // namespace R2C2