const SHAPE_LINE_CHAIN PNS_SOLID::Hull( int aClearance, int aWalkaroundThickness ) const { int cl = aClearance + aWalkaroundThickness / 2; switch( m_shape->Type() ) { case SH_RECT: { SHAPE_RECT* rect = static_cast<SHAPE_RECT*>( m_shape ); return OctagonalHull( rect->GetPosition(), rect->GetSize(), cl + 1, 0.2 * cl ); } case SH_CIRCLE: { SHAPE_CIRCLE* circle = static_cast<SHAPE_CIRCLE*>( m_shape ); int r = circle->GetRadius(); return OctagonalHull( circle->GetCenter() - VECTOR2I( r, r ), VECTOR2I( 2 * r, 2 * r ), cl + 1, 0.52 * ( r + cl ) ); } case SH_SEGMENT: { SHAPE_SEGMENT* seg = static_cast<SHAPE_SEGMENT*> ( m_shape ); return SegmentHull( *seg, aClearance, aWalkaroundThickness ); } default: break; } return SHAPE_LINE_CHAIN(); }
const SHAPE_LINE_CHAIN PNS_VIA::Hull( int aClearance, int aWalkaroundThickness ) const { return OctagonalHull( m_pos - VECTOR2I( m_diameter / 2, m_diameter / 2 ), VECTOR2I( m_diameter, m_diameter ), aClearance + 1, (2 * aClearance + m_diameter) * 0.26 ); }