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:
parent
bc1c7838d1
commit
51b3a11739
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue