#include <cmath>
#include "block.h"
+#include "catalogue.h"
#include "driver.h"
#include "layout.h"
#include "track.h"
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();
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()))
{