]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trackattachment.cpp
Correct TrackAttachment entry endpoint
[r2c2.git] / source / libr2c2 / trackattachment.cpp
index 64704b11b5290bab5e17d24da21e06f61b9eb230..9e3d244056602dd33684daddafe6ff799d21faa2 100644 (file)
@@ -50,7 +50,8 @@ void TrackAttachment::attach_to_closest(float limit)
                        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)
@@ -68,7 +69,7 @@ void TrackAttachment::attach_to_closest(float limit)
                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);
@@ -90,8 +91,8 @@ float TrackAttachment::find_offset(const TrackIter &trk, const Vector &point)
        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;