Snap sn;
sn.position = position;
sn.rotation = rotation;
- if((*i)->snap(sn, limit, SNAP_SEGMENT))
+ float gauge = (*i)->get_type().get_gauge();
+ if((*i)->snap(sn, gauge*limit, SNAP_SEGMENT))
{
float d = distance(position, sn.position);
if(d<dist || dist<0)
for(unsigned i=0; i<nsn; ++i)
{
Snap sn = trk->get_snap_node(i);
- Angle adiff = abs(wrap_balanced(sn.rotation-rotation));
+ Angle adiff = abs(wrap_balanced(sn.rotation+Angle::half_turn()-rotation));
if(adiff<Angle::quarter_turn())
{
TrackIter iter(trk, i);
float offs = min(dist, trk->get_type().get_path_length(0));
while(1)
{
- TrackPoint tp = trk->get_point(trk.entry(), offs);
- float diff = dist-distance(epp, tp.pos);
+ OrientedPoint p = trk->get_point(trk.entry(), offs);
+ float diff = dist-distance(epp, p.position);
if(abs(diff)<margin)
break;
offs += diff;