Snap node vectors to grid to prevent precision errors

This commit is contained in:
Eren Dogan 2023-07-19 18:32:22 -07:00
parent e8c3cf0a94
commit 5ce193c2dd
1 changed files with 7 additions and 7 deletions

View File

@ -57,12 +57,11 @@ class graph:
# Probe is blocked if the shape isn't routable # Probe is blocked if the shape isn't routable
if not self.is_routable(blockage): if not self.is_routable(blockage):
return True return True
elif blockage.inflated_from is None: if blockage.inflated_from is not None:
blockage = blockage.inflated_from
if blockage.overlaps(probe_shape):
continue continue
elif blockage.inflated_from.overlaps(probe_shape): return True
continue
else:
return True
return False return False
@ -90,7 +89,7 @@ class graph:
offset = self.router.offset offset = self.router.offset
p = node.center p = node.center
lengths = [blockage.width(), blockage.height()] lengths = [blockage.width(), blockage.height()]
centers = blockage.center() centers = blockage.center().snap_to_grid()
ll, ur = blockage.rect ll, ur = blockage.rect
safe = [True, True] safe = [True, True]
for i in range(2): for i in range(2):
@ -114,7 +113,7 @@ class graph:
for via in self.graph_vias: for via in self.graph_vias:
ll, ur = via.rect ll, ur = via.rect
center = via.center() center = via.center().snap_to_grid()
if via.on_segment(ll, point, ur) and \ if via.on_segment(ll, point, ur) and \
(center.x != point.x or center.y != point.y): (center.x != point.x or center.y != point.y):
return True return True
@ -191,6 +190,7 @@ class graph:
else: # Square-like pin else: # Square-like pin
points = [shape.center()] points = [shape.center()]
for p in points: for p in points:
p.snap_to_grid()
x_values.add(p.x) x_values.add(p.x)
y_values.add(p.y) y_values.add(p.y)