+#ifndef R2C2_3D_TYPEMAP_H_
+#define R2C2_3D_TYPEMAP_H_
+
+#include <msp/core/meta.h>
+#include "signal.h"
+#include "track.h"
+#include "vehicle.h"
+
+namespace R2C2 {
+
+template<typename T>
+struct TypeMap3D;
+
+template<typename T>
+struct TypeMap3D<const T>: TypeMap3D<T>
+{ };
+
+template<> struct TypeMap3D<Signal> { typedef Signal3D Type3D; };
+template<> struct TypeMap3D<Track> { typedef Track3D Type3D; };
+template<> struct TypeMap3D<Vehicle> { typedef Vehicle3D Type3D; };
+
+} // namespace R2C2
+
+#endif