]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/track.cpp
Make snap limit relative to gauge
[r2c2.git] / source / libmarklin / track.cpp
index 9b63d5b2c2050cc9f940231bcd6d96c022940001..fbe3f0a709ffe1d2030c37fccee15b78ac134095 100644 (file)
@@ -7,6 +7,7 @@ Distributed under the GPL
 
 #include <cmath>
 #include "block.h"
+#include "catalogue.h"
 #include "driver.h"
 #include "layout.h"
 #include "track.h"
@@ -194,9 +195,16 @@ float Track::get_endpoint_direction(unsigned epi) const
        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;
+       if(!limit || link)
+       {
+               limit = layout.get_catalogue().get_gauge();
+               if(link && !flex && !other.get_flex())
+                       limit /= 10;
+       }
+       limit *= limit;
+
        const vector<TrackType::Endpoint> &eps = type.get_endpoints();
        const vector<TrackType::Endpoint> &other_eps = other.get_type().get_endpoints();
 
@@ -213,7 +221,7 @@ bool Track::snap_to(Track &other, bool link)
                        float dx = epp2.x-epp.x;
                        float dy = epp2.y-epp.y;
                        float dz = epp2.z-epp.z;
-                       if(dx*dx+dy*dy<limit && dz*dz<4e-4)
+                       if(dx*dx+dy*dy<limit && dz*dz<limit)
                        {
                                if(!link || (!flex && !other.get_flex()))
                                {