bool PNS_LINE_PLACER::handleViaPlacement( PNS_LINE& aHead ) { if( !m_placingVia ) return true; PNS_VIA v ( makeVia ( aHead.CPoint( -1 ) ) ); v.SetNet ( aHead.Net() ); VECTOR2I force; VECTOR2I lead = aHead.CPoint( -1 ) - aHead.CPoint( 0 ); bool solidsOnly = ( m_currentMode != RM_Walkaround ); if( v.PushoutForce( m_currentNode, lead, force, solidsOnly, 40 ) ) { SHAPE_LINE_CHAIN line = m_direction.BuildInitialTrace( aHead.CPoint( 0 ), aHead.CPoint( -1 ) + force ); aHead = PNS_LINE( aHead, line ); v.SetPos( v.Pos() + force ); return true; } return false; }