// -*- C++ -*- namespace Katabatic { /*! \class AutoContactTurn * * \brief AutoContact Turn (one H, one V) * * AutoContact to make a turn (one H, one V). */ //! \function AutoContactTurn* AutoContactTurn::create ( GCell* gcell, Net* net, const Layer* layer ); //! \param gcell The GCell into which create the AutoContact. //! \param net The Net to which this AutoContact belongs. //! \param layer The Layer of the AutoContact. //! \return The created AutoContactTurn. //! //! Create a new AutoContactTurn. //! \function void AutoContactTurn::updateTopology (); //! Restore the topology (i.e. connexity) of the contact after one or both //! connected segments has changed layer. //! //! Based on the layer depth delta between the two perpandiculars segments. //! Three case can occurs: //! - The delta is \b zero, then just sets the layer of the contact //! to the common metal layer (turn in same layer). //! - The delta is \b one, then sets the contact layer to VIA connecting //! the two layers. //! - The delta cannot be equal to two, due to the alternatives //! routing directions, it would mean a \e turn connecting two \e horizontals //! (or verticals) in different layers. //! - The delta is \b three, then create a dogleg to restore the connexity. //! The dogleg will be created on the connected segment which as been //! layer invalidated. If both of them have been invalidated, //! the horizontal one is preferred. //! - A delta of more than \b three is an error, and must never occurs. //! //! \image html updateTopologyTurn.png "Update Turn Topology" }