In Kite & Katana, segments may have been moved outside terminals.

* Bug: In Kite::NegociateWidow and Katana::NegociateWindow, when creating
    the TrackSegment from the AutoSegment, we put it on the nearest track
    from its current position. But it may happens that the nearest track
    is outside the terminal constraint interval (in the case of "nsxlib").
    Add the terminal constraint interval check.
      This was not affecting the routing result because the segment was
    put inside the right interval afterwards. It was only generating
    disgraceful transient error messages...
This commit is contained in:
Jean-Paul Chaput 2017-11-17 11:17:21 +01:00
parent bc1c7838d1
commit 51b3a11739
2 changed files with 8 additions and 0 deletions

View File

@ -316,6 +316,10 @@ namespace Katana {
Track* track = plane->getTrackByPosition ( autoSegment->getAxis() );
Interval uside = autoSegment->getAutoSource()->getGCell()->getSide( perpandicularTo(autoSegment->getDirection()) );
Interval constraints;
autoSegment->getConstraints( constraints );
uside.intersection( constraints );
cdebug_log(159,0) << "* Nearest " << track << endl;
if (track->getAxis() > uside.getVMax()) track = track->getPreviousTrack();

View File

@ -283,6 +283,10 @@ namespace Kite {
Track* track = plane->getTrackByPosition ( autoSegment->getAxis() );
Interval uside = autoSegment->getAutoSource()->getGCell()->getSide( perpandicularTo(autoSegment->getDirection()) );
Interval constraints;
autoSegment->getConstraints( constraints );
uside.intersection( constraints );
if (track->getAxis() > uside.getVMax()) track = track->getPreviousTrack();
if (track->getAxis() < uside.getVMin()) track = track->getNextTrack();