3 This file is part of R²C²
4 Copyright © 2006-2011 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
17 Layout3D::Layout3D(Layout &l):
19 catalogue(layout.get_catalogue())
21 layout.signal_track_added.connect(sigc::mem_fun(this, &Layout3D::track_added));
22 layout.signal_track_removed.connect(sigc::mem_fun(this, &Layout3D::track_removed));
23 layout.signal_vehicle_added.connect(sigc::mem_fun(this, &Layout3D::vehicle_added));
24 layout.signal_vehicle_removed.connect(sigc::mem_fun(this, &Layout3D::vehicle_removed));
26 const set<Track *> <racks = layout.get_tracks();
27 for(set<Track *>::iterator i=ltracks.begin(); i!=ltracks.end(); ++i)
33 while(!tracks.empty())
34 delete tracks.begin()->second;
35 while(!vehicles.empty())
36 delete vehicles.begin()->second;
39 void Layout3D::add_track(Track3D &t)
41 if(tracks.count(&t.get_track()))
42 throw KeyError("Duplicate track");
44 tracks[&t.get_track()] = &t;
47 void Layout3D::remove_track(Track3D &t)
49 tracks.erase(&t.get_track());
52 Track3D &Layout3D::get_track(Track &t) const
54 TrackMap::const_iterator i = tracks.find(&t);
56 throw KeyError("Unknown track");
61 void Layout3D::add_vehicle(Vehicle3D &v)
63 if(vehicles.count(&v.get_vehicle()))
64 throw KeyError("Duplicate vehicle");
66 vehicles[&v.get_vehicle()] = &v;
69 void Layout3D::remove_vehicle(Vehicle3D &v)
71 vehicles.erase(&v.get_vehicle());
74 Vehicle3D &Layout3D::get_vehicle(Vehicle &v) const
76 VehicleMap::const_iterator i = vehicles.find(&v);
78 throw KeyError("Unknown vehicle");
83 void Layout3D::track_added(Track &t)
85 new Track3D(*this, t);
88 void Layout3D::track_removed(Track &t)
90 TrackMap::iterator i = tracks.find(&t);
95 void Layout3D::vehicle_added(Vehicle &v)
97 new Vehicle3D(*this, v);
100 void Layout3D::vehicle_removed(Vehicle &v)
102 VehicleMap::iterator i = vehicles.find(&v);
103 if(i!=vehicles.end())