Overlap length can include a rectangle overlap.

This commit is contained in:
mrg 2022-05-16 14:57:32 -07:00
parent bd4dd326a6
commit 4be075e586
2 changed files with 13 additions and 8 deletions

View File

@ -517,6 +517,13 @@ class pin_layout:
if len(intersections) == 2: if len(intersections) == 2:
(p1, p2) = intersections (p1, p2) = intersections
return math.sqrt(pow(p1[0]-p2[0], 2) + pow(p1[1]-p2[1], 2)) return math.sqrt(pow(p1[0]-p2[0], 2) + pow(p1[1]-p2[1], 2))
# If we have a rectangular overlap region
elif len(intersections) == 4:
points = intersections
ll = vector(min(p.x for p in points), min(p.y for p in points))
ur = vector(max(p.x for p in points), max(p.y for p in points))
new_shape = pin_layout("", [ll, ur], self.lpp)
return max(new_shape.height(), new_shape.width())
else: else:
# This is where we had a corner intersection or none # This is where we had a corner intersection or none
return 0 return 0

View File

@ -574,20 +574,18 @@ class router(router_tech):
debug.info(3, "Converting pin [ {0} , {1} ]".format(ll, ur)) debug.info(3, "Converting pin [ {0} , {1} ]".format(ll, ur))
# scale the size bigger to include neaby tracks # scale the size bigger to include neaby tracks
ll = ll.scale(self.track_factor).floor() ll_scaled = ll.scale(self.track_factor).floor()
ur = ur.scale(self.track_factor).ceil() ur_scaled = ur.scale(self.track_factor).ceil()
# Keep tabs on tracks with sufficient and insufficient overlap # Keep tabs on tracks with sufficient and insufficient overlap
sufficient_list = set() sufficient_list = set()
insufficient_list = set() insufficient_list = set()
zindex = self.get_zindex(pin.lpp) zindex = self.get_zindex(pin.lpp)
for x in range(int(ll[0]) - expansion, int(ur[0]) + 1 + expansion): for x in range(int(ll_scaled[0]) - expansion, int(ur_scaled[0]) + 1 + expansion):
for y in range(int(ll[1] - expansion), int(ur[1]) + 1 + expansion): for y in range(int(ll_scaled[1] - expansion), int(ur_scaled[1]) + 1 + expansion):
(full_overlap, partial_overlap) = self.convert_pin_coord_to_tracks(pin, cur_grid = vector3d(x, y, zindex)
vector3d(x, (full_overlap, partial_overlap) = self.convert_pin_coord_to_tracks(pin, cur_grid)
y,
zindex))
if full_overlap: if full_overlap:
sufficient_list.update([full_overlap]) sufficient_list.update([full_overlap])
if partial_overlap: if partial_overlap: