+ list<Train3D *>::iterator i = find(trains.begin(), trains.end(), &t);
+ if(i!=trains.end())
+ trains.erase(i);
+}
+
+Train3D &Layout3D::get_train(const Train &t) const
+{
+ for(list<Train3D *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
+ if(&(*i)->get_train()==&t)
+ return **i;
+
+ throw KeyError("Unknown train");
+}
+
+void Layout3D::track_added(Track &t)
+{
+ new Track3D(*this, t);
+}
+
+void Layout3D::track_removed(Track &t)
+{
+ for(list<Track3D *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
+ if(&(*i)->get_track()==&t)