[Pather/RenderPather/PortPather] Rework pathing verbs *BREAKING CHANGE*
This commit is contained in:
parent
16875e9cd6
commit
babbe78daa
5 changed files with 468 additions and 416 deletions
|
|
@ -24,7 +24,7 @@ def pather_setup() -> tuple[Pather, PathTool, Library]:
|
|||
def test_pather_straight(pather_setup: tuple[Pather, PathTool, Library]) -> None:
|
||||
p, tool, lib = pather_setup
|
||||
# Route 10um "forward"
|
||||
p.path("start", ccw=None, length=10)
|
||||
p.straight("start", 10)
|
||||
|
||||
# port rot pi/2 (North). Travel +pi relative to port -> South.
|
||||
assert_allclose(p.ports["start"].offset, [0, -10], atol=1e-10)
|
||||
|
|
@ -37,7 +37,7 @@ def test_pather_bend(pather_setup: tuple[Pather, PathTool, Library]) -> None:
|
|||
# Start (0,0) rot pi/2 (North).
|
||||
# Path 10um "forward" (South), then turn Clockwise (ccw=False).
|
||||
# Facing South, turn Right -> West.
|
||||
p.path("start", ccw=False, length=10)
|
||||
p.cw("start", 10)
|
||||
|
||||
# PathTool.planL(ccw=False, length=10) returns out_port at (10, -1) relative to (0,0) rot 0.
|
||||
# Transformed by port rot pi/2 (North) + pi (to move "forward" away from device):
|
||||
|
|
@ -55,7 +55,7 @@ def test_pather_path_to(pather_setup: tuple[Pather, PathTool, Library]) -> None:
|
|||
p, tool, lib = pather_setup
|
||||
# start at (0,0) rot pi/2 (North)
|
||||
# path "forward" (South) to y=-50
|
||||
p.path_to("start", ccw=None, y=-50)
|
||||
p.straight("start", y=-50)
|
||||
assert_equal(p.ports["start"].offset, [0, -50])
|
||||
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ def test_pather_mpath(pather_setup: tuple[Pather, PathTool, Library]) -> None:
|
|||
p.ports["B"] = Port((10, 0), pi / 2, ptype="wire")
|
||||
|
||||
# Path both "forward" (South) to y=-20
|
||||
p.mpath(["A", "B"], ccw=None, ymin=-20)
|
||||
p.straight(["A", "B"], ymin=-20)
|
||||
assert_equal(p.ports["A"].offset, [0, -20])
|
||||
assert_equal(p.ports["B"].offset, [10, -20])
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ def test_pather_mpath(pather_setup: tuple[Pather, PathTool, Library]) -> None:
|
|||
def test_pather_at_chaining(pather_setup: tuple[Pather, PathTool, Library]) -> None:
|
||||
p, tool, lib = pather_setup
|
||||
# Fluent API test
|
||||
p.at("start").path(ccw=None, length=10).path(ccw=True, length=10)
|
||||
p.at("start").straight(10).ccw(10)
|
||||
# 10um South -> (0, -10) rot pi/2
|
||||
# then 10um South and turn CCW (Facing South, CCW is East)
|
||||
# PathTool.planL(ccw=True, length=10) -> out_port=(10, 1) rot -pi/2 relative to rot 0
|
||||
|
|
@ -93,14 +93,14 @@ def test_pather_dead_ports() -> None:
|
|||
p.set_dead()
|
||||
|
||||
# Path with negative length (impossible for PathTool, would normally raise BuildError)
|
||||
p.path("in", None, -10)
|
||||
p.straight("in", -10)
|
||||
|
||||
# Port 'in' should be updated by dummy extension despite tool failure
|
||||
# port_rot=0, forward is -x. path(-10) means moving -10 in -x direction -> +10 in x.
|
||||
assert_allclose(p.ports["in"].offset, [10, 0], atol=1e-10)
|
||||
|
||||
# Downstream path should work correctly using the dummy port location
|
||||
p.path("in", None, 20)
|
||||
p.straight("in", 20)
|
||||
# 10 + (-20) = -10
|
||||
assert_allclose(p.ports["in"].offset, [-10, 0], atol=1e-10)
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ def rpather_setup() -> tuple[RenderPather, PathTool, Library]:
|
|||
def test_renderpather_basic(rpather_setup: tuple[RenderPather, PathTool, Library]) -> None:
|
||||
rp, tool, lib = rpather_setup
|
||||
# Plan two segments
|
||||
rp.at("start").path(ccw=None, length=10).path(ccw=None, length=10)
|
||||
rp.at("start").straight(10).straight(10)
|
||||
|
||||
# Before rendering, no shapes in pattern
|
||||
assert not rp.pattern.has_shapes()
|
||||
|
|
@ -49,7 +49,7 @@ def test_renderpather_basic(rpather_setup: tuple[RenderPather, PathTool, Library
|
|||
def test_renderpather_bend(rpather_setup: tuple[RenderPather, PathTool, Library]) -> None:
|
||||
rp, tool, lib = rpather_setup
|
||||
# Plan straight then bend
|
||||
rp.at("start").path(ccw=None, length=10).path(ccw=False, length=10)
|
||||
rp.at("start").straight(10).cw(10)
|
||||
|
||||
rp.render()
|
||||
path_shape = cast("Path", rp.pattern.shapes[(1, 0)][0])
|
||||
|
|
@ -69,9 +69,9 @@ def test_renderpather_retool(rpather_setup: tuple[RenderPather, PathTool, Librar
|
|||
rp, tool1, lib = rpather_setup
|
||||
tool2 = PathTool(layer=(2, 0), width=4, ptype="wire")
|
||||
|
||||
rp.at("start").path(ccw=None, length=10)
|
||||
rp.at("start").straight(10)
|
||||
rp.retool(tool2, keys=["start"])
|
||||
rp.at("start").path(ccw=None, length=10)
|
||||
rp.at("start").straight(10)
|
||||
|
||||
rp.render()
|
||||
# Different tools should cause different batches/shapes
|
||||
|
|
@ -86,7 +86,7 @@ def test_renderpather_dead_ports() -> None:
|
|||
rp.set_dead()
|
||||
|
||||
# Impossible path
|
||||
rp.path("in", None, -10)
|
||||
rp.straight("in", -10)
|
||||
|
||||
# port_rot=0, forward is -x. path(-10) means moving -10 in -x direction -> +10 in x.
|
||||
assert_allclose(rp.ports["in"].offset, [10, 0], atol=1e-10)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue