From 355365c0dc20533a432b518d79b068fddc359281 Mon Sep 17 00:00:00 2001 From: jan Date: Thu, 20 Nov 2025 13:00:57 -0800 Subject: [PATCH] [Pather / RenderPather] Fix handling of jog polarity --- masque/builder/pather.py | 9 +++++---- masque/builder/pather_mixin.py | 2 +- masque/builder/renderpather.py | 11 ++++++----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/masque/builder/pather.py b/masque/builder/pather.py index 3a0dee4..9af473d 100644 --- a/masque/builder/pather.py +++ b/masque/builder/pather.py @@ -352,16 +352,17 @@ class Pather(Builder, PatherMixin): except NotImplementedError: # Fall back to drawing two L-bends ccw0 = jog > 0 - kwargs_no_out = (kwargs | {'out_ptype': None}) + kwargs_no_out = kwargs | {'out_ptype': None} t_tree0 = tool.path( ccw0, length / 2, port_names=tool_port_names, in_ptype=in_ptype, **kwargs_no_out) t_pat0 = t_tree0.top_pattern() (_, jog0), _ = t_pat0[tool_port_names[0]].measure_travel(t_pat0[tool_port_names[1]]) - t_tree1 = tool.path(not ccw0, jog - jog0, port_names=tool_port_names, in_ptype=t_pat0[tool_port_names[1]].ptype, **kwargs) + t_tree1 = tool.path(not ccw0, abs(jog - jog0), port_names=tool_port_names, in_ptype=t_pat0[tool_port_names[1]].ptype, **kwargs) t_pat1 = t_tree1.top_pattern() (_, jog1), _ = t_pat1[tool_port_names[0]].measure_travel(t_pat1[tool_port_names[1]]) - self.path(portspec, ccw0, length - jog1, **kwargs_no_out) - self.path(portspec, not ccw0, jog - jog0, **kwargs) + kwargs_plug = kwargs | {'plug_into': plug_into} + self.path(portspec, ccw0, length - abs(jog1), **kwargs_no_out) + self.path(portspec, not ccw0, abs(jog - jog0), **kwargs_plug) return self tname = self.library << tree diff --git a/masque/builder/pather_mixin.py b/masque/builder/pather_mixin.py index bcf9d5e..6acd7c6 100644 --- a/masque/builder/pather_mixin.py +++ b/masque/builder/pather_mixin.py @@ -321,7 +321,7 @@ class PatherMixin(PortList, metaclass=ABCMeta): else: # S-bend, delegate to implementations (travel, jog), _ = port_src.measure_travel(port_dst) - self.pathS(portspec_src, -travel, jog, **dst_args) + self.pathS(portspec_src, -travel, -jog, **dst_args) elif numpy.isclose(angle, 0): raise BuildError('Don\'t know how to route a U-bend yet (TODO)!') else: diff --git a/masque/builder/renderpather.py b/masque/builder/renderpather.py index 747a098..303a59d 100644 --- a/masque/builder/renderpather.py +++ b/masque/builder/renderpather.py @@ -488,12 +488,13 @@ class RenderPather(PatherMixin): ccw0 = jog > 0 kwargs_no_out = (kwargs | {'out_ptype': None}) t_port0, _ = tool.planL( ccw0, length / 2, in_ptype=in_ptype, **kwargs_no_out) - (_, jog0), _ = Port((0, 0), 0).measure_travel(t_port0) - t_port1, _ = tool.planL(not ccw0, jog - jog0, in_ptype=t_port0.ptype, **kwargs) - (_, jog1), _ = Port((0, 0), 0).measure_travel(t_port1) + jog0 = Port((0, 0), 0).measure_travel(t_port0)[0][1] + t_port1, _ = tool.planL(not ccw0, abs(jog - jog0), in_ptype=t_port0.ptype, **kwargs) + jog1 = Port((0, 0), 0).measure_travel(t_port1)[0][1] - self.path(portspec, ccw0, length - jog1, **kwargs_no_out) - self.path(portspec, not ccw0, jog - jog0, **kwargs) + kwargs_plug = kwargs | {'plug_into': plug_into} + self.path(portspec, ccw0, length - abs(jog1), **kwargs_no_out) + self.path(portspec, not ccw0, abs(jog - jog0), **kwargs_plug) return self out_port.rotate_around((0, 0), pi + port_rot)