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
|
||||
# Path to substitue footprint
|
||||
ref = sp[0]
|
||||
foot_sp = sp[1].split(',')
|
||||
foot_sp = sp[1].split(';')
|
||||
foot = foot_sp[0].strip()
|
||||
offset = (0,0)
|
||||
# Optional offset tuple
|
||||
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]
|
||||
# pins = sp[1]
|
||||
@@ -118,6 +122,8 @@ for foot in saved:
|
||||
# Flip the net assignments of the pads
|
||||
pad_map = {}
|
||||
for pad in load_foot.Pads():
|
||||
if len(pad.GetNumber()) == 0:
|
||||
continue
|
||||
# Check position diff from old
|
||||
# to new
|
||||
new_cent = pad.GetCenter()
|
||||
@@ -133,6 +139,11 @@ for foot in saved:
|
||||
match_pad = pads[i][2:]
|
||||
pad.SetNet(match_pad[0])
|
||||
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])
|
||||
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))
|
||||
|
||||
# create pads
|
||||
print(sorted_foots)
|
||||
pad_cnt = 0
|
||||
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():
|
||||
cent = ToMM(pad.GetCenter() - brd_cent)
|
||||
pad_size = ToMM(pad.GetSize())
|
||||
@@ -200,7 +220,10 @@ for [foot, pad_map] in sorted_foots:
|
||||
pad_layers = Pad.LAYERS_THT
|
||||
if attr_type == pcbnew.PAD_ATTRIB_SMD:
|
||||
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:
|
||||
pad_type = Pad.TYPE_NPTH
|
||||
pad_layers = Pad.LAYERS_NPTH
|
||||
@@ -208,6 +231,10 @@ for [foot, pad_map] in sorted_foots:
|
||||
pad_type = Pad.TYPE_CONNECT
|
||||
pad_layers = Pad.LAYERS_NPTH
|
||||
|
||||
if pad.IsAperturePad():
|
||||
pad_layers = ["F.Paste"]
|
||||
|
||||
primitives = []
|
||||
pad_shape = Pad.SHAPE_RECT
|
||||
if shape_type == pcbnew.PAD_SHAPE_CIRCLE:
|
||||
pad_shape = Pad.SHAPE_CIRCLE
|
||||
@@ -219,9 +246,21 @@ for [foot, pad_map] in sorted_foots:
|
||||
pad_shape = Pad.SHAPE_ROUNDRECT
|
||||
elif shape_type == pcbnew.PAD_SHAPE_CUSTOM:
|
||||
pad_shape = Pad.SHAPE_CUSTOM
|
||||
|
||||
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))
|
||||
pad_cnt += len(foot.Pads())
|
||||
# print(dir(pad.GetPrimitives()))
|
||||
# for prim in pad.GetPrimitives():
|
||||
# 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"
|
||||
|
||||
Reference in New Issue
Block a user