void MODULE::TransformPadsShapesWithClearanceToPolygon( PCB_LAYER_ID aLayer, SHAPE_POLY_SET& aCornerBuffer, int aInflateValue, int aMaxError, bool aSkipNPTHPadsWihNoCopper ) const { D_PAD* pad = PadsList(); wxSize margin; for( ; pad != NULL; pad = pad->Next() ) { if( aLayer != UNDEFINED_LAYER && !pad->IsOnLayer(aLayer) ) continue; // NPTH pads are not drawn on layers if the shape size and pos is the same // as their hole: if( aSkipNPTHPadsWihNoCopper && pad->GetAttribute() == PAD_ATTRIB_HOLE_NOT_PLATED ) { if( pad->GetDrillSize() == pad->GetSize() && pad->GetOffset() == wxPoint( 0, 0 ) ) { switch( pad->GetShape() ) { case PAD_SHAPE_CIRCLE: if( pad->GetDrillShape() == PAD_DRILL_SHAPE_CIRCLE ) continue; break; case PAD_SHAPE_OVAL: if( pad->GetDrillShape() != PAD_DRILL_SHAPE_CIRCLE ) continue; break; default: break; } } } switch( aLayer ) { case F_Mask: case B_Mask: margin.x = margin.y = pad->GetSolderMaskMargin() + aInflateValue; break; case F_Paste: case B_Paste: margin = pad->GetSolderPasteMargin(); margin.x += aInflateValue; margin.y += aInflateValue; break; default: margin.x = margin.y = aInflateValue; break; } pad->BuildPadShapePolygon( aCornerBuffer, margin ); } }
/** * Make a module with a given list of named pads */ static std::unique_ptr<MODULE> ModuleWithPads( const std::vector<wxString> aNames ) { auto module = std::make_unique<MODULE>( nullptr ); for( const auto& name : aNames ) { auto pad = std::make_unique<D_PAD>( module.get() ); pad->SetName( name ); module->PadsList().PushBack( pad.release() ); } return module; }
void CN_CONNECTIVITY_ALGO::markItemNetAsDirty( const BOARD_ITEM* aItem ) { if( aItem->IsConnected() ) { auto citem = static_cast<const BOARD_CONNECTED_ITEM*>( aItem ); MarkNetAsDirty( citem->GetNetCode() ); } else { if( aItem->Type() == PCB_MODULE_T ) { auto mod = static_cast <const MODULE*>( aItem ); for( D_PAD* pad = mod->PadsList(); pad; pad = pad->Next() ) MarkNetAsDirty( pad->GetNetCode() ); } } }