+ if(Track *t = dynamic_cast<Track *>(&o))
+ new Track3D(*this, *t);
+ else if(Signal *s = dynamic_cast<Signal *>(&o))
+ new Signal3D(*this, *s);
+ else if(Vehicle *v = dynamic_cast<Vehicle *>(&o))
+ new Vehicle3D(*this, *v);
+ else if(BeamGate *g = dynamic_cast<BeamGate *>(&o))
+ new BeamGate3D(*this, *g);