Update footprint gen script to better deal with mounting holes
This commit is contained in:
@@ -47,12 +47,16 @@ for item in pcb.GetDrawings():
|
|||||||
continue
|
continue
|
||||||
# Path to substitue footprint
|
# Path to substitue footprint
|
||||||
ref = sp[0]
|
ref = sp[0]
|
||||||
foot_sp = sp[1].split(',')
|
foot_sp = sp[1].split(';')
|
||||||
foot = foot_sp[0].strip()
|
foot = foot_sp[0].strip()
|
||||||
offset = (0,0)
|
offset = (0,0)
|
||||||
# Optional offset tuple
|
# Optional offset tuple
|
||||||
if len(foot_sp) == 2:
|
if len(foot_sp) == 2:
|
||||||
offset = tuple(foot_sp[1])
|
print("Foot sp: ", foot_sp)
|
||||||
|
offset = foot_sp[1].strip(" ()").split(',')
|
||||||
|
print("Offset: ", offset)
|
||||||
|
offset[0] = FromMM(float(offset[0]))
|
||||||
|
offset[1] = FromMM(float(offset[1]))
|
||||||
|
|
||||||
new_foots[ref] = [foot, offset]
|
new_foots[ref] = [foot, offset]
|
||||||
# pins = sp[1]
|
# pins = sp[1]
|
||||||
@@ -118,6 +122,8 @@ for foot in saved:
|
|||||||
# Flip the net assignments of the pads
|
# Flip the net assignments of the pads
|
||||||
pad_map = {}
|
pad_map = {}
|
||||||
for pad in load_foot.Pads():
|
for pad in load_foot.Pads():
|
||||||
|
if len(pad.GetNumber()) == 0:
|
||||||
|
continue
|
||||||
# Check position diff from old
|
# Check position diff from old
|
||||||
# to new
|
# to new
|
||||||
new_cent = pad.GetCenter()
|
new_cent = pad.GetCenter()
|
||||||
@@ -133,6 +139,11 @@ for foot in saved:
|
|||||||
match_pad = pads[i][2:]
|
match_pad = pads[i][2:]
|
||||||
pad.SetNet(match_pad[0])
|
pad.SetNet(match_pad[0])
|
||||||
pad_map[pad.GetNumber()] = match_num
|
pad_map[pad.GetNumber()] = match_num
|
||||||
|
elif "mounting" in str(foot.GetKeywords()).lower():
|
||||||
|
match_num = pads[0][0]
|
||||||
|
match_pad = pads[0][2:]
|
||||||
|
pad.SetNet(match_pad[0])
|
||||||
|
pad_map[pad.GetNumber()] = match_num
|
||||||
|
|
||||||
sorted_foots.append([load_foot, pad_map])
|
sorted_foots.append([load_foot, pad_map])
|
||||||
pcb.Add(load_foot)
|
pcb.Add(load_foot)
|
||||||
@@ -186,8 +197,17 @@ kicad_mod.append(RectLine(start=[-brd_width/2,-brd_height/2], end=[brd_width/2,b
|
|||||||
kicad_mod.append(RectLine(start=[-brd_width/2,-brd_height/2], end=[brd_width/2,brd_height/2], layer='F.CrtYd', width=0.05, offset=0.5))
|
kicad_mod.append(RectLine(start=[-brd_width/2,-brd_height/2], end=[brd_width/2,brd_height/2], layer='F.CrtYd', width=0.05, offset=0.5))
|
||||||
|
|
||||||
# create pads
|
# create pads
|
||||||
|
print(sorted_foots)
|
||||||
pad_cnt = 0
|
pad_cnt = 0
|
||||||
for [foot, pad_map] in sorted_foots:
|
for [foot, pad_map] in sorted_foots:
|
||||||
|
mounting_flag = "mounting" in str(foot.GetKeywords()).lower()
|
||||||
|
custom_paste_flag = False
|
||||||
|
if mounting_flag:
|
||||||
|
for pad in foot.Pads():
|
||||||
|
if pad.IsAperturePad():
|
||||||
|
custom_paste_flag = True
|
||||||
|
|
||||||
|
real_pads = 0
|
||||||
for pad in foot.Pads():
|
for pad in foot.Pads():
|
||||||
cent = ToMM(pad.GetCenter() - brd_cent)
|
cent = ToMM(pad.GetCenter() - brd_cent)
|
||||||
pad_size = ToMM(pad.GetSize())
|
pad_size = ToMM(pad.GetSize())
|
||||||
@@ -200,7 +220,10 @@ for [foot, pad_map] in sorted_foots:
|
|||||||
pad_layers = Pad.LAYERS_THT
|
pad_layers = Pad.LAYERS_THT
|
||||||
if attr_type == pcbnew.PAD_ATTRIB_SMD:
|
if attr_type == pcbnew.PAD_ATTRIB_SMD:
|
||||||
pad_type = Pad.TYPE_SMT
|
pad_type = Pad.TYPE_SMT
|
||||||
pad_layers = Pad.LAYERS_SMT
|
if custom_paste_flag:
|
||||||
|
pad_layers = ["F.Cu", "F.Mask"]
|
||||||
|
else:
|
||||||
|
pad_layers = Pad.LAYERS_SMT
|
||||||
elif attr_type == pcbnew.PAD_ATTRIB_NPTH:
|
elif attr_type == pcbnew.PAD_ATTRIB_NPTH:
|
||||||
pad_type = Pad.TYPE_NPTH
|
pad_type = Pad.TYPE_NPTH
|
||||||
pad_layers = Pad.LAYERS_NPTH
|
pad_layers = Pad.LAYERS_NPTH
|
||||||
@@ -208,6 +231,10 @@ for [foot, pad_map] in sorted_foots:
|
|||||||
pad_type = Pad.TYPE_CONNECT
|
pad_type = Pad.TYPE_CONNECT
|
||||||
pad_layers = Pad.LAYERS_NPTH
|
pad_layers = Pad.LAYERS_NPTH
|
||||||
|
|
||||||
|
if pad.IsAperturePad():
|
||||||
|
pad_layers = ["F.Paste"]
|
||||||
|
|
||||||
|
primitives = []
|
||||||
pad_shape = Pad.SHAPE_RECT
|
pad_shape = Pad.SHAPE_RECT
|
||||||
if shape_type == pcbnew.PAD_SHAPE_CIRCLE:
|
if shape_type == pcbnew.PAD_SHAPE_CIRCLE:
|
||||||
pad_shape = Pad.SHAPE_CIRCLE
|
pad_shape = Pad.SHAPE_CIRCLE
|
||||||
@@ -219,9 +246,21 @@ for [foot, pad_map] in sorted_foots:
|
|||||||
pad_shape = Pad.SHAPE_ROUNDRECT
|
pad_shape = Pad.SHAPE_ROUNDRECT
|
||||||
elif shape_type == pcbnew.PAD_SHAPE_CUSTOM:
|
elif shape_type == pcbnew.PAD_SHAPE_CUSTOM:
|
||||||
pad_shape = Pad.SHAPE_CUSTOM
|
pad_shape = Pad.SHAPE_CUSTOM
|
||||||
|
# print(dir(pad.GetPrimitives()))
|
||||||
kicad_mod.append(Pad(number=pad_cnt + int(pad_map[curr_pad_num]), type=pad_type, shape=pad_shape, at=list(cent), size=list(pad_size), drill=list(drill_size), layers=pad_layers))
|
# for prim in pad.GetPrimitives():
|
||||||
pad_cnt += len(foot.Pads())
|
# shape = prim.GetEffectiveShape()
|
||||||
|
# print("Shape: ", shape)
|
||||||
|
|
||||||
|
pad_number = ""
|
||||||
|
if len(pad.GetNumber()) > 0:
|
||||||
|
pad_number = pad_cnt + int(pad_map[curr_pad_num])
|
||||||
|
|
||||||
|
final_pad = Pad(number=pad_number, type=pad_type, shape=pad_shape, at=list(cent), size=list(pad_size), drill=list(drill_size), layers=pad_layers)
|
||||||
|
for prim in primitives:
|
||||||
|
final_pad.addPrimitive(prim)
|
||||||
|
kicad_mod.append(final_pad)
|
||||||
|
real_pads += len(pad.GetNumber()) > 0
|
||||||
|
pad_cnt += real_pads
|
||||||
|
|
||||||
|
|
||||||
final_model_path = "${KIPRJMOD}/../libs/melon3d/" + foot_path + ".3dshapes/" + foot_name + ".step"
|
final_model_path = "${KIPRJMOD}/../libs/melon3d/" + foot_path + ".3dshapes/" + foot_name + ".step"
|
||||||
|
|||||||
Reference in New Issue
Block a user