74 return x->
GetReference().CmpNoCase( y->GetReference() ) < 0;
77 auto footprints = std::set<FOOTPRINT*, decltype( compare )>( compare );
85 auto ins = footprints.insert( footprint );
87 if( !ins.second && !( footprint->GetAttributes() &
FP_BOARD_ONLY ) )
90 drcItem->SetItems( footprint, *ins.first );
97 for(
unsigned ii = 0; ii < aNetlist.
GetCount(); ii++ )
102 if( footprint ==
nullptr )
107 msg.Printf(
_(
"Missing footprint %s (%s)" ),
113 drcItem->SetErrorMessage( msg );
123 msg.Printf(
_(
"Value (%s) doesn't match symbol value (%s)" ),
128 drcItem->SetErrorMessage( msg );
129 drcItem->SetItems( footprint );
137 msg.Printf(
_(
"%s doesn't match footprint given by symbol (%s)" ),
142 drcItem->SetErrorMessage( msg );
143 drcItem->SetItems( footprint );
152 bool found = ( 0 == filtercount );
154 for(
size_t jj = 0; jj < filtercount && !found; jj++ )
158 if( filterLower.Find(
':' ) == wxNOT_FOUND )
159 found = fpNameLower.Matches( filterLower );
161 found = libIdLower.Matches( filterLower );
167 msg.Printf(
_(
"%s doesn't match symbol's footprint filters (%s)" ),
172 drcItem->SetErrorMessage( msg );
173 drcItem->SetItems( footprint );
183 msg.Printf(
_(
"'%s' settings differ" ),
_(
"Do not populate" ) );
186 drcItem->SetErrorMessage( drcItem->GetErrorMessage() + wxS(
": " ) + msg );
187 drcItem->SetItems( footprint );
191 if( ( component->
GetProperties().count(
"exclude_from_bom" ) > 0 )
196 msg.Printf(
_(
"'%s' settings differ" ),
_(
"Exclude from bill of materials" ) );
199 drcItem->SetErrorMessage( drcItem->GetErrorMessage() + wxS(
": " ) + msg );
200 drcItem->SetItems( footprint );
209 if( !
pad->CanHaveNumber() )
213 const wxString& pcb_netname =
pad->GetNetname();
215 if( !pcb_netname.IsEmpty() && sch_net.
GetPinName().IsEmpty() )
218 msg.Printf(
_(
"No corresponding pin found in schematic" ) );
221 drcItem->SetErrorMessage( msg );
222 drcItem->SetItems(
pad );
225 else if( pcb_netname.IsEmpty() && !sch_net.
GetNetName().IsEmpty() )
228 msg.Printf(
_(
"Pad missing net given by schematic (%s)" ),
232 drcItem->SetErrorMessage( msg );
233 drcItem->SetItems(
pad );
237 && !( pcb_netname.starts_with(
238 wxT(
"unconnected-" ) )
239 && pcb_netname.starts_with( sch_net.
GetNetName() ) ) )
242 msg.Printf(
_(
"Pad net (%s) doesn't match net given by schematic (%s)" ),
247 drcItem->SetErrorMessage( msg );
248 drcItem->SetItems(
pad );
253 for(
unsigned jj = 0; jj < component->
GetNetCount(); ++jj )
264 if( sch_net.
GetNetName().StartsWith( wxT(
"unconnected-" ) ) )
270 msg = wxString::Format( wxT(
"%s (%s)" ),
275 msg.Printf(
_(
"No pad found for pin %s in schematic" ), msg );
278 drcItem->SetErrorMessage( msg );
279 drcItem->SetItems( footprint );
299 drcItem->SetItems( footprint );