bool PNS_DIFF_PAIR_PLACER::propagateDpHeadForces ( const VECTOR2I& aP, VECTOR2I& aNewP ) { PNS_VIA virtHead = makeVia( aP, -1 ); if( m_placingVia ) virtHead.SetDiameter( viaGap() + 2 * virtHead.Diameter() ); else { virtHead.SetLayer( m_currentLayer ); virtHead.SetDiameter( m_sizes.DiffPairGap() + 2 * m_sizes.TrackWidth() ); } VECTOR2I lead( 0, 0 );// = aP - m_currentStart ; VECTOR2I force; bool solidsOnly = true; if( m_currentMode == RM_MarkObstacles ) { aNewP = aP; return true; } else if( m_currentMode == RM_Walkaround ) { solidsOnly = false; } // fixme: I'm too lazy to do it well. Circular approximaton will do for the moment. if( virtHead.PushoutForce( m_currentNode, lead, force, solidsOnly, 40 ) ) { aNewP = aP + force; return true; } return false; }