X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Ftrack.cpp;h=fbe3f0a709ffe1d2030c37fccee15b78ac134095;hb=975ea87cc7be179618b06291cb2506a2523cad1f;hp=6ec3c3bf7cefc78041f3ddb357acdfb1b3fa203a;hpb=2bb6ce8ada216c0b2caa48f4639d03f2c581098e;p=r2c2.git diff --git a/source/libmarklin/track.cpp b/source/libmarklin/track.cpp index 6ec3c3b..fbe3f0a 100644 --- a/source/libmarklin/track.cpp +++ b/source/libmarklin/track.cpp @@ -7,6 +7,7 @@ Distributed under the GPL #include #include "block.h" +#include "catalogue.h" #include "driver.h" #include "layout.h" #include "track.h" @@ -168,11 +169,11 @@ int Track::get_endpoint_by_link(Track &other) const Point Track::get_endpoint_position(unsigned epi) const { - const vector &eps = type.get_endpoints(); + const vector &eps = type.get_endpoints(); if(epi>=eps.size()) - throw InvalidParameterValue("Endpoint index out of range"); + throw InvalidParameterValue("TrackType::Endpoint index out of range"); - const Endpoint &ep = eps[epi]; + const TrackType::Endpoint &ep = eps[epi]; float c = cos(rot); float s = sin(rot); @@ -185,20 +186,27 @@ Point Track::get_endpoint_position(unsigned epi) const float Track::get_endpoint_direction(unsigned epi) const { - const vector &eps = type.get_endpoints(); + const vector &eps = type.get_endpoints(); if(epi>=eps.size()) - throw InvalidParameterValue("Endpoint index out of range"); + throw InvalidParameterValue("TrackType::Endpoint index out of range"); - const Endpoint &ep = eps[epi]; + const TrackType::Endpoint &ep = eps[epi]; return rot+ep.dir; } -bool Track::snap_to(Track &other, bool link) +bool Track::snap_to(Track &other, bool link, float limit) { - 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(); + if(!limit || link) + { + limit = layout.get_catalogue().get_gauge(); + if(link && !flex && !other.get_flex()) + limit /= 10; + } + limit *= limit; + + const vector &eps = type.get_endpoints(); + const vector &other_eps = other.get_type().get_endpoints(); for(unsigned i=0; i &eps = type.get_endpoints(); + const vector &eps = type.get_endpoints(); for(unsigned i=0; i