From 4733f69b514da9099240f9f95ba243e4a21dcc06 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Sat, 19 Apr 2025 16:49:46 +0200 Subject: [PATCH] adapted extender + improved bound anchors --- gallery/target_api.pdf | Bin 7854 -> 9051 bytes gallery/target_api.typ | 5 +- src/elements/element.typ | 19 +++++- src/elements/extender.typ | 108 +++++++++++------------------------ src/elements/multiplexer.typ | 23 ++------ src/elements/ports.typ | 2 +- 6 files changed, 61 insertions(+), 96 deletions(-) diff --git a/gallery/target_api.pdf b/gallery/target_api.pdf index cf3490ac66b81ebdea0790f0a848a40e92d8abc5..5f2b55be11ca885cd344c42b4479fc2761af2a29 100644 GIT binary patch delta 5398 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 delta 4194 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 {h - h * (h-ratio / 200%)}, - "out": (h) => {h - h * (out-pct / 100%)} + let out-pct = if align-out {l-ratio / 2} else {50%} + let ports-pos = ( + "east": (l, i) => {l - l * (out-pct / 100%)} ) - element.elmt( - draw-shape: draw-shape.with(h-ratio: h-ratio, align-out: align-out), - x: x, - y: y, - w: w, - h: h, - name: name, - name-anchor: name-anchor, + return element.elmt( + cls: "extender", + draw-shape: draw-shape, ports: ports, - auto-ports: false, - ports-y: ports-y, - fill: fill, - stroke: stroke, - id: id, - debug: debug + ports-pos: ports-pos, + extra: ( + l-ratio: l-ratio, + align-out: align-out + ), + ..args ) - - let in-pos = (rel: (0, h * (h-ratio / 200%)), to: id+".south-west") - let out-pos = (id+".south-east", out-pct, id+".north-east") - add-port(id, "west", ports.west.first(), in-pos) - add-port(id, "east", ports.east.first(), out-pos) } \ No newline at end of file diff --git a/src/elements/multiplexer.typ b/src/elements/multiplexer.typ index 1e4832a..fa0a20a 100644 --- a/src/elements/multiplexer.typ +++ b/src/elements/multiplexer.typ @@ -13,23 +13,12 @@ tr: tr2, br: br2, )) - let f = { - draw.merge-path( - inset: 0.5em, - fill: elmt.fill, - stroke: elmt.stroke, - close: true, - draw.line(bounds2.tl, bounds2.tr, bounds2.br, bounds2.bl) - ) - draw.anchor("north", bounds2.t) - draw.anchor("south", bounds2.b) - draw.anchor("west", bounds2.l) - draw.anchor("east", bounds2.r) - draw.anchor("north-west", bounds2.tl) - draw.anchor("north-east", bounds2.tr) - draw.anchor("south-east", bounds2.br) - draw.anchor("south-west", bounds2.bl) - } + let f = draw.line( + bounds2.tl, bounds2.tr, bounds2.br, bounds2.bl, + close: true, + fill: elmt.fill, + stroke: elmt.stroke + ) return (f, bounds2) } diff --git a/src/elements/ports.typ b/src/elements/ports.typ index f6bde71..52743c9 100644 --- a/src/elements/ports.typ +++ b/src/elements/ports.typ @@ -125,7 +125,7 @@ elmt, bounds ) = { - let debug = elmt.debug.ports + let debug = elmt.debug.at("ports", default: false) if type(elmt.ports) != dictionary { return