+
+string Designer::tooltip(int x, int y)
+{
+ if(Track3D *t3d = pick_track(x, y))
+ {
+ const Track &track = t3d->get_track();
+ const TrackType &ttype = track.get_type();
+ string info = format("%d %s", ttype.get_article_number(), ttype.get_description());
+ if(mode!=CATALOGUE && abs(track.get_slope())>1e-4)
+ info += format(" (slope %.1f%%)", abs(track.get_slope()/ttype.get_total_length()*100));
+ if(track.get_turnout_id())
+ info += format(" (turnout %d)", track.get_turnout_id());
+ else if(track.get_sensor_id())
+ info += format(" (sensor %d)", track.get_sensor_id());
+
+ return info;
+ }
+
+ return string();
+}
+
+void Designer::show_route(const Route *route)
+{
+ const set<Track *> <racks = layout->get_tracks();
+ for(set<Track *>::iterator i=ltracks.begin(); i!=ltracks.end(); ++i)
+ {
+ Track3D &t3d = layout_3d->get_track(**i);
+ if(route && route->has_track(**i))
+ {
+ t3d.get_path().set_color(GL::Color(0.5, 0.8, 1.0));
+ if((*i)->get_type().is_turnout())
+ {
+ unsigned tid = (*i)->get_turnout_id();
+ int path = (tid ? route->get_turnout(tid) : -1);
+ if(path>=0)
+ t3d.get_path().set_path(path);
+ else
+ t3d.get_path().set_mask((*i)->get_type().get_paths());
+ }
+ else
+ t3d.get_path().set_path(0);
+ }
+ else
+ t3d.get_path().set_mask(0);
+ }
+}