+ vehicles.erase(&v.get_vehicle());
+}
+
+Vehicle3D &Layout3D::get_vehicle(Vehicle &v) const
+{
+ VehicleMap::const_iterator i = vehicles.find(&v);
+ if(i==vehicles.end())
+ throw KeyError("Unknown vehicle");
+
+ return *i->second;
+}
+
+void Layout3D::track_added(Track &t)
+{
+ new Track3D(*this, t);
+}
+
+void Layout3D::track_removed(Track &t)
+{
+ TrackMap::iterator i = tracks.find(&t);
+ if(i!=tracks.end())
+ delete i->second;
+}
+
+void Layout3D::vehicle_added(Vehicle &v)
+{
+ new Vehicle3D(*this, v);
+}
+
+void Layout3D::vehicle_removed(Vehicle &v)
+{
+ VehicleMap::iterator i = vehicles.find(&v);
+ if(i!=vehicles.end())
+ delete i->second;