X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Ftrack.cpp;h=c940e1cd93d15e517f1501506e228172362aba6c;hb=25c26706d400228110e14a4a9a9765cb1298372d;hp=05f9f2f717c1044b47446b73aeab0ac01f68b73b;hpb=e990eb02d42cc4b9ff679b947a6911f79472f8f5;p=r2c2.git diff --git a/source/libmarklin/track.cpp b/source/libmarklin/track.cpp index 05f9f2f..c940e1c 100644 --- a/source/libmarklin/track.cpp +++ b/source/libmarklin/track.cpp @@ -22,9 +22,9 @@ Track::Track(Layout &l, const TrackType &t): rot(0), slope(0), flex(false), - turnout_id(0), + turnout_id(type.is_turnout() ? layout.allocate_turnout_id(type.is_double_address()) : 0), sensor_id(0), - links(t.get_endpoints().size()), + links(type.get_endpoints().size()), active_path(0) { layout.add_track(*this); @@ -103,6 +103,7 @@ void Track::set_turnout_id(unsigned i) turnout_id = i; layout.create_blocks(*this); + layout.update_routes(); if(layout.has_driver() && turnout_id) { layout.get_driver().add_turnout(turnout_id); @@ -175,7 +176,7 @@ float Track::get_endpoint_direction(unsigned epi) const bool Track::snap_to(Track &other, bool link) { - float limit = (link && !flex) ? 1e-6 : 1e-4; + float limit = (link && !flex && !other.get_flex()) ? 1e-6 : 1e-4; const vector &eps = type.get_endpoints(); const vector &other_eps = other.get_type().get_endpoints(); @@ -193,13 +194,16 @@ bool Track::snap_to(Track &other, bool link) float dy = epp2.y-epp.y; if(dx*dx+dy*dy