improved wire arguments

This commit is contained in:
2025-04-19 15:56:20 +02:00
parent 4930b53c84
commit 3e9272255c
7 changed files with 90 additions and 50 deletions

View File

@ -116,22 +116,29 @@
return coord
}
#let make-bounds(elmt, x, y, w, h) = {
let w2 = w / 2
let h2 = h / 2
let bounds = (
bl: (x, y),
tl: (x, y + h),
tr: (x + w, y + h),
br: (x + w, y),
center: (x + w2, y + h2),
b: (x + w2, y),
t: (x + w2, y + h),
l: (x, y + h2),
r: (x + w, y + h2),
)
#let complete-bounds(elmt, bounds) = {
let b = bounds
bounds += (
center: (
(b.br.at(0) + b.tl.at(0))/2,
(b.br.at(1) + b.tl.at(1))/2
),
b: (
(b.br.at(0) + b.bl.at(0))/2,
(b.br.at(1) + b.bl.at(1))/2
),
t: (
(b.tr.at(0) + b.tl.at(0))/2,
(b.tr.at(1) + b.tl.at(1))/2
),
l: (
(b.bl.at(0) + b.tl.at(0))/2,
(b.bl.at(1) + b.tl.at(1))/2
),
r: (
(b.br.at(0) + b.tr.at(0))/2,
(b.br.at(1) + b.tr.at(1))/2
),
sides: (
north: (bounds.tl, bounds.tr),
south: (bounds.bl, bounds.br),
@ -160,6 +167,19 @@
return bounds
}
#let make-bounds(elmt, x, y, w, h) = {
let w2 = w / 2
let h2 = h / 2
let bounds = (
bl: (x, y),
tl: (x, y + h),
tr: (x + w, y + h),
br: (x + w, y),
)
return complete-bounds(elmt, bounds)
}
#let render(draw-shape, elmt) = draw.group(name: elmt.id, ctx => {
let width = elmt.size.first()
let height = elmt.size.last()

View File

@ -5,27 +5,33 @@
#let draw-shape(elmt, bounds) = {
let margin = (100% - elmt.l-ratio) / 2
let tr2 = (bounds.tr, margin, bounds.br)
let br2 = (bounds.br, margin, bounds.tr)
let f = draw.group(name: elmt.id, {
let tr2 = util.lerp(bounds.tr, margin, bounds.br)
let br2 = util.lerp(bounds.br, margin, bounds.tr)
let bounds2 = element.complete-bounds(elmt, (
tl: bounds.tl,
bl: bounds.bl,
tr: tr2,
br: br2,
))
let f = {
draw.merge-path(
inset: 0.5em,
fill: elmt.fill,
stroke: elmt.stroke,
close: true,
draw.line(bounds.tl, tr2, br2, bounds.bl)
draw.line(bounds2.tl, bounds2.tr, bounds2.br, bounds2.bl)
)
draw.anchor("north", (bounds.tl, 50%, tr2))
draw.anchor("south", (bounds.bl, 50%, br2))
draw.anchor("west", (bounds.tl, 50%, bounds.bl))
draw.anchor("east", (tr2, 50%, br2))
draw.anchor("north-west", bounds.tl)
draw.anchor("north-east", tr2)
draw.anchor("south-east", br2)
draw.anchor("south-west", bounds.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)
}
return (f, bounds)
return (f, bounds2)
}
/// Draws a multiplexer

View File

@ -9,7 +9,7 @@
}
}
}
panic("Unknown port " + port + " on element " + element.id)
panic("Unknown port " + port + " on element " + elmt.id)
}
#let get-port-idx(elmt, port, side: auto) = {