Foot gen: support ignoring corners if part overlaps them

This commit is contained in:
andrewc
2024-03-15 18:25:52 +10:00
parent cc806b7c88
commit e55641095c

View File

@@ -359,44 +359,49 @@ for i in range(len(corners)):
j = i+1
start = deepcopy(corners[i])
end = deepcopy(start)
x_dir = True
y_dir = False
if corners[i][0] == corners[j][0]:
x_dir = False
y_dir = True
sign = -1
if corners[j][not x_dir] > corners[i][not x_dir]:
if corners[j][y_dir] > corners[i][y_dir]:
sign = 1
# Find intersections with keepouts
intersects = []
if x_dir:
for k in keepouts:
if abs(start[1] - k[0][1]) < k[1][1]/2:
intersects.append(k)
intersects.sort(key=lambda k: abs(start[0] - k[0][0]))
else:
for k in keepouts:
if abs(start[0] - k[0][0]) < k[1][0]/2:
intersects.append(k)
intersects.sort(key=lambda k: abs(start[1] - k[0][1]))
for k in keepouts:
if abs(start[not y_dir] - k[0][not y_dir]) < k[1][not y_dir]/2:
intersects.append(k)
intersects.sort(key=lambda k: abs(start[y_dir] - k[0][y_dir]))
print("Start: ", start)
print("end: ", corners[j])
print("Flag: ", x_dir)
print("Flag: ", y_dir)
print("intersects: ", intersects)
for intersect in intersects:
if x_dir:
end[0] = intersect[0][0] - sign * intersect[1][0]/2
else:
end[1] = intersect[0][1] - sign * intersect[1][1]/2
if len(intersects):
intersect = intersects[0]
skip_flag = abs(start[y_dir]) < abs(intersect[0][y_dir] - sign * intersect[1][y_dir]/2)
for intersect in intersects:
end[y_dir] = intersect[0][y_dir] - sign * intersect[1][y_dir]/2
# if y_dir:
# end[0] = intersect[0][0] - sign * intersect[1][0]/2
# else:
# end[1] = intersect[0][1] - sign * intersect[1][1]/2
print("Silk: ", start, end)
kicad_mod.append(Line(start=start, end=end, layer='F.SilkS', width=0.1))
if x_dir:
start[0] = intersect[0][0] + sign * intersect[1][0]/2
else:
start[1] = intersect[0][1] + sign * intersect[1][1]/2
if not skip_flag:
print("Silk: ", start, end)
kicad_mod.append(Line(start=start, end=end, layer='F.SilkS', width=0.1))
skip_flag = False
start[y_dir] = intersect[0][y_dir] + sign * intersect[1][y_dir]/2
# if y_dir:
# start[0] = intersect[0][0] + sign * intersect[1][0]/2
# else:
# start[1] = intersect[0][1] + sign * intersect[1][1]/2
kicad_mod.append(Line(start=start, end=corners[j], layer='F.SilkS', width=0.1))
if abs(start[y_dir]) < (corners[j][y_dir]):
print("End Fake: ", start, end)
print("End: ", start, corners[j])
kicad_mod.append(Line(start=start, end=corners[j], layer='F.SilkS', width=0.1))
# kicad_mod.append(RectLine(start=[-brd_width/2,-brd_height/2], end=[brd_width/2,brd_height/2], layer='F.SilkS', width=0.15))