* New: In Anabatic & Katana, add the new "drag" feature.
With VH gauges used by real technologies (M1-H, M2-V, M3-H) a new
routing configuration that was not efficiently handled did appear.
While the preferred routing direction for metal1 is officially
horizontal, due to the way the standard cell must be designed,
their metal1 terminals are still verticals (or punctuals).
Thus, when connecting to them, we face the case where the metal1
terminal (RoutingPad) is vertical *and* the metal2 wire is also
vertical. With that setup, the position of the AutoContactTerminal
via12 cannot be deduced, it may range all the way over the
metal1 RoutingPad. What may define it's position is the metal3 the
metal2 finally connects to. That, is, when we have one horizontal
(the metal3) and one vertical (the metal1 RoutingPad).
The intermediate wire of metal2 can be kept to a minimum size
by "dragging" the via12 close to the via23 when the metal3 wire is
moved.
* New: In Anabatic & Katana, problem of closely vertically aligneds
RoutingPads in metal1 is managed first in PreProcess by restricting
the span of the connecteds metal3 and in _makeDogleg also by restricting
the span even more tightly (to the RoutingPad itself).
* New: In Anabatic::AutoContactTerminal, add the "drag" support.
Automatically check if the connecting segment is in the same
direction as the RoutingPad, if so, sets the "SegDrag" flag.
The dragging state can be known with the "::canDrag()" predicate.
* New: In Anabatic::AutoHorizontal, add the "drag" support.
The drag state can be known with the "::isDrag()" predicate.
In "::_makeDogleg()", when making a dogleg on a dragable segment
pass the drag state correctly and restrict the perpandicular span
of the perpandicular to the RoutingPad (though segment user constraints).
If we make a dogleg on the metal2 is it likely than we cannot go
straigth out vertically from the RoutingPad, so the new perpandicular
*is* restricted to the RoutingPad span.
Idem for AutoVertical.
* New: In Katana::Manipulator, add method "::dragMinimize()" which find a
hole where to minimize a draggable segment. We finally did not use it,
but keep it for potential further use.
* New: In Katana::PreProcess, adds a "protectAlignedaccesses()" local
function to check for vertically aligned metal1 RoutingPads, in that
case setup user constraints on the metal3 segments so they cannot
completly cover the other RoutingPad with metal2.
We also keep a "metal2protect()" function that create a fixed segment
to lock/protect a RoutingPad. Not used for now.
* New: In Katana::Session, add a RoutingPad locking event mechanism.
This allows us to request the creation of a locking (fixed segment)
over a draggable segment. Not used for now.
Lock events are processeds before all others as they create new
TrackElements.
* New: In Katana::Track, "::getNextFree()" and "::getPreviousFree()"
method to find the nearest free interval in a Track after/before a
position.
* Bug: In Anabatic::AutoHorizontal::getConstraints(), merge with user
constraints *only* if it's not an empty interval (as we use min/max
functions). Idem for AutoVertical.
* Bug: In AutoSegments_OnContacts::Locator::isValid(), the boolean test
must be inverted. Seems it never worked, but we never used it until
now...