X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Fcatalogue.cpp;h=54341c10c0432e7344d30d35cda86cf3724b2596;hb=d27edb207810f0b4e44be8c3632d421faa5fed80;hp=50f0484542cd1d699f251b4e2585812b90b1bb5a;hpb=47341c72a70e6cf9d8e963705a50197bbc20a87d;p=r2c2.git diff --git a/source/3d/catalogue.cpp b/source/3d/catalogue.cpp index 50f0484..54341c1 100644 --- a/source/3d/catalogue.cpp +++ b/source/3d/catalogue.cpp @@ -14,13 +14,15 @@ using namespace Msp; namespace Marklin { -Catalogue3D::Catalogue3D(const Catalogue &c): +Catalogue3D::Catalogue3D(Catalogue &c): catalogue(c), endpoint_mesh((GL::NORMAL3, GL::VERTEX3)) { + catalogue.signal_track_added.connect(sigc::mem_fun(this, &Catalogue3D::track_added)); + const map &trks = catalogue.get_tracks(); for(map::const_iterator i=trks.begin(); i!=trks.end(); ++i) - tracks[i->second] = new TrackType3D(*this, *i->second); + track_added(*i->second); ballast_material.set_diffuse(GL::Color(0.25, 0.25, 0.25)); rail_material.set_diffuse(GL::Color(0.85, 0.85, 0.85)); @@ -28,6 +30,12 @@ Catalogue3D::Catalogue3D(const Catalogue &c): build_endpoint_mesh(); } +Catalogue3D::~Catalogue3D() +{ + for(map::iterator i=tracks.begin(); i!=tracks.end(); ++i) + delete i->second; +} + const TrackType3D &Catalogue3D::get_track(const TrackType &tt) const { map::const_iterator i = tracks.find(&tt); @@ -37,6 +45,11 @@ const TrackType3D &Catalogue3D::get_track(const TrackType &tt) const return *i->second; } +void Catalogue3D::track_added(const TrackType &track) +{ + tracks[&track] = new TrackType3D(*this, track); +} + void Catalogue3D::build_endpoint_mesh() { const Profile &ballast_profile = catalogue.get_ballast_profile();