mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
Allow soldermask bridging between nettie items
Previously we only allowed graphical items but within the net-tie we need to allow bridging for connected items as well Fixes https://gitlab.com/kicad/code/kicad/-/issues/19288
This commit is contained in:
parent
54085c4e50
commit
8faf1b4d0e
@ -432,14 +432,27 @@ bool DRC_TEST_PROVIDER_SOLDER_MASK::checkItemMask( BOARD_ITEM* aMaskItem, int aT
|
||||
if( fp->AllowSolderMaskBridges() )
|
||||
return false;
|
||||
|
||||
// Graphic items are used to implement net-ties between pads of a group within a net-tie
|
||||
// footprint. They must be allowed to intrude into their pad's mask aperture.
|
||||
if( aTestNet < 0 && aMaskItem->Type() == PCB_PAD_T && fp->IsNetTie() )
|
||||
// Items belonging to a net-tie may share the mask aperture of pads in the same group.
|
||||
if( aMaskItem->Type() == PCB_PAD_T && fp->IsNetTie() )
|
||||
{
|
||||
PAD* pad = static_cast<PAD*>( aMaskItem );
|
||||
std::map<wxString, int> padNumberToGroupIdxMap = fp->MapPadNumbersToNetTieGroups();
|
||||
int groupIdx = padNumberToGroupIdxMap[ pad->GetNumber() ];
|
||||
|
||||
if( padNumberToGroupIdxMap[ static_cast<PAD*>( aMaskItem )->GetNumber() ] >= 0 )
|
||||
return false;
|
||||
if( groupIdx >= 0 )
|
||||
{
|
||||
if( aTestNet < 0 )
|
||||
return false;
|
||||
|
||||
if( pad->GetNetCode() == aTestNet )
|
||||
return false;
|
||||
|
||||
for( PAD* other : fp->GetNetTiePads( pad ) )
|
||||
{
|
||||
if( other->GetNetCode() == aTestNet )
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -498,6 +511,22 @@ void DRC_TEST_PROVIDER_SOLDER_MASK::testItemAgainstItems( BOARD_ITEM* aItem, con
|
||||
return false;
|
||||
}
|
||||
|
||||
if( itemFP && itemFP->IsNetTie() )
|
||||
{
|
||||
const std::set<int>& nets = itemFP->GetNetTieCache( aItem );
|
||||
|
||||
if( otherNet < 0 || nets.count( otherNet ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( FOOTPRINT* otherFP = other->GetParentFootprint(); otherFP && otherFP->IsNetTie() )
|
||||
{
|
||||
const std::set<int>& nets = otherFP->GetNetTieCache( other );
|
||||
|
||||
if( itemNet < 0 || nets.count( itemNet ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
BOARD_ITEM* a = aItem;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
|
525
qa/data/pcbnew/net_tie_drc.kicad_pcb
Normal file
525
qa/data/pcbnew/net_tie_drc.kicad_pcb
Normal file
@ -0,0 +1,525 @@
|
||||
(kicad_pcb
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(general
|
||||
(thickness 1.6)
|
||||
(legacy_teardrops no)
|
||||
)
|
||||
(paper "A4")
|
||||
(layers
|
||||
(0 "F.Cu" signal)
|
||||
(31 "B.Cu" signal)
|
||||
(32 "B.Adhes" user "B.Adhesive")
|
||||
(33 "F.Adhes" user "F.Adhesive")
|
||||
(34 "B.Paste" user)
|
||||
(35 "F.Paste" user)
|
||||
(36 "B.SilkS" user "B.Silkscreen")
|
||||
(37 "F.SilkS" user "F.Silkscreen")
|
||||
(38 "B.Mask" user)
|
||||
(39 "F.Mask" user)
|
||||
(40 "Dwgs.User" user "User.Drawings")
|
||||
(41 "Cmts.User" user "User.Comments")
|
||||
(42 "Eco1.User" user "User.Eco1")
|
||||
(43 "Eco2.User" user "User.Eco2")
|
||||
(44 "Edge.Cuts" user)
|
||||
(45 "Margin" user)
|
||||
(46 "B.CrtYd" user "B.Courtyard")
|
||||
(47 "F.CrtYd" user "F.Courtyard")
|
||||
(48 "B.Fab" user)
|
||||
(49 "F.Fab" user)
|
||||
(50 "User.1" user)
|
||||
(51 "User.2" user)
|
||||
(52 "User.3" user)
|
||||
(53 "User.4" user)
|
||||
(54 "User.5" user)
|
||||
(55 "User.6" user)
|
||||
(56 "User.7" user)
|
||||
(57 "User.8" user)
|
||||
(58 "User.9" user)
|
||||
)
|
||||
(setup
|
||||
(pad_to_mask_clearance 0)
|
||||
(allow_soldermask_bridges_in_footprints no)
|
||||
(pcbplotparams
|
||||
(layerselection 0x00010fc_ffffffff)
|
||||
(plot_on_all_layers_selection 0x0000000_00000000)
|
||||
(disableapertmacros no)
|
||||
(usegerberextensions no)
|
||||
(usegerberattributes yes)
|
||||
(usegerberadvancedattributes yes)
|
||||
(creategerberjobfile yes)
|
||||
(dashed_line_dash_ratio 12.000000)
|
||||
(dashed_line_gap_ratio 3.000000)
|
||||
(svgprecision 4)
|
||||
(plotframeref no)
|
||||
(viasonmask no)
|
||||
(mode 1)
|
||||
(useauxorigin no)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15.000000)
|
||||
(pdf_front_fp_property_popups yes)
|
||||
(pdf_back_fp_property_popups yes)
|
||||
(dxfpolygonmode yes)
|
||||
(dxfimperialunits yes)
|
||||
(dxfusepcbnewfont yes)
|
||||
(psnegative no)
|
||||
(psa4output no)
|
||||
(plotreference yes)
|
||||
(plotvalue yes)
|
||||
(plotfptext yes)
|
||||
(plotinvisibletext no)
|
||||
(sketchpadsonfab no)
|
||||
(subtractmaskfromsilk no)
|
||||
(outputformat 1)
|
||||
(mirror no)
|
||||
(drillshape 1)
|
||||
(scaleselection 1)
|
||||
(outputdirectory "")
|
||||
)
|
||||
)
|
||||
(net 0 "")
|
||||
(net 1 "A")
|
||||
(net 2 "B")
|
||||
(footprint "Resistor_SMD:R_0603_1608Metric"
|
||||
(layer "F.Cu")
|
||||
(uuid "d9b59bb9-ea66-4968-a8ed-9e8861d1f85f")
|
||||
(at 144.5 95.9 90)
|
||||
(descr "Resistor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
|
||||
(tags "resistor")
|
||||
(property "Reference" "R1705"
|
||||
(at 0 -1.43 -90)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "208427d9-9695-4703-b884-8631727932ab")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "3.32k"
|
||||
(at 0 1.43 -90)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "a073d624-ac2a-4fcf-bb28-b1dce589b938")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Resistor_SMD:R_0603_1608Metric"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "823aaa7f-6c9b-4288-888c-47aab4ebeb4a")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "1f94f8f1-543d-4534-9b0e-6353b46b8f31")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" "RES SMD 3.32KOHM 0.1% 1/10W 0603"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "e6681fc6-9a85-409d-a2bf-f8b901f4a7ba")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Manufacturer" "Yageo"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "4a241eb4-e7df-4a3e-b62a-fd0ecdcfd19b")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "MPN" "RT0603BRD073K32L"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "0b92285d-e617-41f2-ba68-1efb51c29d2e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "PartNumber" "102264"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "775c309c-dc76-459e-a2d7-8ff2d65c7a82")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Resistance" "3.32k"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "3b95c72c-b1fc-4318-9af8-8877b2440a1a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Tolerance" "0.1%"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "b514c82e-7c8d-41e1-9b01-5b0a4f6ed154")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Power Rating" "100 mW"
|
||||
(at 0 0 90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "c5f46fd5-e505-41e5-9a46-5fb0a1226d8e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr smd)
|
||||
(fp_line
|
||||
(start -0.237258 -0.5225)
|
||||
(end 0.237258 -0.5225)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1d60ba04-5eb1-45ed-96d0-52d57a6a5586")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.237258 0.5225)
|
||||
(end 0.237258 0.5225)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "40e82a61-2220-44ec-af2f-7eba8f8e9c96")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.48 -0.73)
|
||||
(end 1.48 0.73)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "b9fde486-22eb-4477-997b-23708d25ae7c")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.48 -0.73)
|
||||
(end 1.48 -0.73)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "6692e1c6-2938-4398-a504-4f0024db0c86")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.48 0.73)
|
||||
(end -1.48 0.73)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "f8672a91-f813-44fd-b8d9-a53842e81f52")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.48 0.73)
|
||||
(end -1.48 -0.73)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "fcbff2e9-fc0d-4f95-969a-0ca80522edbc")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.8 -0.4125)
|
||||
(end 0.8 0.4125)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "44624371-e972-45b7-8e0f-28ac68ac4707")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.8 -0.4125)
|
||||
(end 0.8 -0.4125)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "ff9baace-fdef-441a-8aa6-42800c31fef3")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.8 0.4125)
|
||||
(end -0.8 0.4125)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "30d41fa8-cd79-48fc-b70f-19104d58a20b")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.8 0.4125)
|
||||
(end -0.8 -0.4125)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "501cf06a-593d-472f-801e-072e0ac2aa43")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 -0.9 -90)
|
||||
(layer "F.Fab")
|
||||
(uuid "94fea0c4-fec9-4142-8c52-727a72709f39")
|
||||
(effects
|
||||
(font
|
||||
(size 0.4 0.4)
|
||||
(thickness 0.06)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" smd roundrect
|
||||
(at -0.825 0 90)
|
||||
(size 0.8 0.95)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(roundrect_rratio 0.25)
|
||||
(pintype "passive")
|
||||
(uuid "74956c22-2ba0-4390-84e3-0add0309ea64")
|
||||
)
|
||||
(pad "2" smd roundrect
|
||||
(at 0.825 0 90)
|
||||
(size 0.8 0.95)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(roundrect_rratio 0.25)
|
||||
(net 1 "A")
|
||||
(pintype "passive")
|
||||
(uuid "e028ffbe-bfb8-419b-ba9e-27d8006b3c43")
|
||||
)
|
||||
(model "${KICAD8_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0603_1608Metric.wrl"
|
||||
(offset
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(footprint "NetTie:NetTie-2_SMD_Pad0.5mm"
|
||||
(layer "F.Cu")
|
||||
(uuid "f039e421-b476-4481-b42f-733b0b81bb4b")
|
||||
(at 144.5 94.5 -90)
|
||||
(descr "Net tie, 2 pin, 0.5mm square SMD pads")
|
||||
(tags "net tie")
|
||||
(property "Reference" "NT1701"
|
||||
(at 0 -1.2 90)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "8f9eeb6e-e6a9-43c1-9e6c-cb717d66b719")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "NetTie_2"
|
||||
(at 0 1.2 90)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "380516d9-443e-4cbf-88a6-023342bcc06f")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "NetTie:NetTie-2_SMD_Pad0.5mm"
|
||||
(at 0 0 -90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "a48dcfff-1929-4557-a687-f609525f01a3")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 -90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "ac076432-ade5-4f7d-9eea-0befbf91a423")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" "Net tie, 2 pins"
|
||||
(at 0 0 -90)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "5fdb3e89-0980-40b4-8667-2c2d6e6fec09")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr exclude_from_pos_files exclude_from_bom allow_missing_courtyard allow_soldermask_bridges)
|
||||
(net_tie_pad_groups "1, 2")
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.5 -0.25) (xy 0.5 -0.25) (xy 0.5 0.25) (xy -0.5 0.25)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type solid)
|
||||
)
|
||||
(fill solid)
|
||||
(layer "F.Cu")
|
||||
(uuid "9a9e2914-1292-48cc-aa1d-2d4292da6e54")
|
||||
)
|
||||
(pad "1" smd circle
|
||||
(at -0.5 0 270)
|
||||
(size 0.5 0.5)
|
||||
(layers "F.Cu")
|
||||
(net 2 "B")
|
||||
(pinfunction "1")
|
||||
(pintype "passive")
|
||||
(uuid "16ee3534-48c0-44b3-b649-f8b24a84f4ed")
|
||||
)
|
||||
(pad "2" smd circle
|
||||
(at 0.5 0 270)
|
||||
(size 0.5 0.5)
|
||||
(layers "F.Cu")
|
||||
(net 1 "A")
|
||||
(pinfunction "2")
|
||||
(pintype "passive")
|
||||
(uuid "d3c8b6d3-a993-413b-909d-c43940be048b")
|
||||
)
|
||||
)
|
||||
(gr_rect
|
||||
(start 137.5 90)
|
||||
(end 152 104.5)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "Edge.Cuts")
|
||||
(uuid "bead2996-4868-48a3-919e-3743e6296f6b")
|
||||
)
|
||||
(via
|
||||
(at 144.5 94)
|
||||
(size 0.5)
|
||||
(drill 0.3)
|
||||
(layers "F.Cu" "B.Cu")
|
||||
(free yes)
|
||||
(net 2)
|
||||
(uuid "4b8d3731-6cd8-4f67-a659-7cbd9fcf0604")
|
||||
)
|
||||
(zone
|
||||
(net 2)
|
||||
(net_name "B")
|
||||
(layer "B.Cu")
|
||||
(uuid "0a20124f-74b0-4055-a6e6-e87b035a7722")
|
||||
(hatch edge 0.5)
|
||||
(connect_pads
|
||||
(clearance 0.5)
|
||||
)
|
||||
(min_thickness 0.25)
|
||||
(filled_areas_thickness no)
|
||||
(fill yes
|
||||
(thermal_gap 0.5)
|
||||
(thermal_bridge_width 0.5)
|
||||
)
|
||||
(polygon
|
||||
(pts
|
||||
(xy 152 90) (xy 137.5 90) (xy 137.5 104.5) (xy 152 104.5)
|
||||
)
|
||||
)
|
||||
(filled_polygon
|
||||
(layer "B.Cu")
|
||||
(pts
|
||||
(xy 151.442539 90.520185) (xy 151.488294 90.572989) (xy 151.4995 90.6245) (xy 151.4995 103.8755)
|
||||
(xy 151.479815 103.942539) (xy 151.427011 103.988294) (xy 151.3755 103.9995) (xy 138.1245 103.9995)
|
||||
(xy 138.057461 103.979815) (xy 138.011706 103.927011) (xy 138.0005 103.8755) (xy 138.0005 90.6245)
|
||||
(xy 138.020185 90.557461) (xy 138.072989 90.511706) (xy 138.1245 90.5005) (xy 151.3755 90.5005)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
@ -68,6 +68,7 @@ BOOST_FIXTURE_TEST_CASE( DRCFalsePositiveRegressions, DRC_REGRESSION_TEST_FIXTUR
|
||||
"issue17967/issue17967", // Arc dp coupling
|
||||
"issue18203", // DRC error due to colliding arc and circle
|
||||
"unconnected-netnames/unconnected-netnames", // Raised false schematic partity error
|
||||
"net_tie_drc" // Net tie bridging soldermask DRC test
|
||||
};
|
||||
|
||||
for( const wxString& relPath : tests )
|
||||
|
Loading…
x
Reference in New Issue
Block a user