adapted actor shape rendering
This commit is contained in:
@ -1,32 +1,54 @@
|
|||||||
#import "/src/cetz.typ": draw
|
#import "/src/cetz.typ": draw
|
||||||
|
|
||||||
#import "/src/core/utils.typ": normalize-measure
|
#import "/src/core/utils.typ": normalize-measure, normalize-units
|
||||||
#import "/src/consts.typ": *
|
|
||||||
|
|
||||||
#let name = "actor"
|
#let name = "actor"
|
||||||
|
|
||||||
#let render(x, y, p, bottom) = {
|
#let render(x, y, p, bottom) = {
|
||||||
let m = measure(p.display-name)
|
let m = normalize-measure(p.display-name)
|
||||||
let style = p.resolved-style
|
let style = p.resolved-style
|
||||||
let w2 = ACTOR-WIDTH / 2
|
let spacing = normalize-units(style.spacing)
|
||||||
let head-r = ACTOR-WIDTH / 4
|
let width = normalize-units(style.width)
|
||||||
let height = ACTOR-WIDTH * 2
|
let height = width * 2
|
||||||
|
let w2 = width / 2
|
||||||
|
let head-r = width / 4
|
||||||
let arms-y = height * 0.375
|
let arms-y = height * 0.375
|
||||||
|
|
||||||
let y0 = if bottom {
|
let y0 = if bottom {
|
||||||
y - m.height / 1pt - SYM-GAP
|
y - m.height - spacing
|
||||||
} else {
|
} else {
|
||||||
y + m.height / 1pt + height + SYM-GAP
|
y + m.height + height + spacing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Head
|
||||||
draw.circle(
|
draw.circle(
|
||||||
(x, y0 - head-r),
|
(x, y0 - head-r),
|
||||||
radius: head-r,
|
radius: head-r,
|
||||||
fill: style.fill,
|
fill: style.fill,
|
||||||
stroke: style.stroke
|
stroke: style.stroke
|
||||||
)
|
)
|
||||||
draw.line((x, y0 - head-r * 2), (x, y0 - height + w2), stroke: black + .5pt)
|
|
||||||
draw.line((x - w2, y0 - arms-y), (x + w2, y0 - arms-y), stroke: black + .5pt)
|
// Body
|
||||||
draw.line((x - w2, y0 - height), (x, y0 - height + w2), (x + w2, y0 - height), stroke: black + .5pt)
|
draw.line(
|
||||||
|
(x, y0 - head-r * 2),
|
||||||
|
(x, y0 - height + w2),
|
||||||
|
stroke: style.stroke
|
||||||
|
)
|
||||||
|
|
||||||
|
// Arms
|
||||||
|
draw.line(
|
||||||
|
(x - w2, y0 - arms-y),
|
||||||
|
(x + w2, y0 - arms-y),
|
||||||
|
stroke: style.stroke
|
||||||
|
)
|
||||||
|
|
||||||
|
// Legs
|
||||||
|
draw.line(
|
||||||
|
(x - w2, y0 - height),
|
||||||
|
(x, y0 - height + w2),
|
||||||
|
(x + w2, y0 - height),
|
||||||
|
stroke: style.stroke
|
||||||
|
)
|
||||||
draw.content(
|
draw.content(
|
||||||
(x, y),
|
(x, y),
|
||||||
p.display-name,
|
p.display-name,
|
||||||
@ -37,12 +59,17 @@
|
|||||||
#let get-size(par) = {
|
#let get-size(par) = {
|
||||||
let m = normalize-measure(par.display-name)
|
let m = normalize-measure(par.display-name)
|
||||||
|
|
||||||
//ACTOR-WIDTH * 1pt
|
let width = normalize-units(par.resolved-style.width)
|
||||||
//ACTOR-WIDTH * 2pt + SYM-GAP * 1pt + h
|
let height = width * 2
|
||||||
|
let spacing = normalize-units(par.resolved-style.spacing)
|
||||||
|
|
||||||
return m
|
return (
|
||||||
|
width: calc.max(m.width, width),
|
||||||
|
height: height + spacing + m.height
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#let default-style = (
|
#let default-style = (
|
||||||
:
|
width: 20pt,
|
||||||
|
spacing: 5pt
|
||||||
)
|
)
|
@ -1,7 +1,6 @@
|
|||||||
#import "/src/cetz.typ": draw
|
#import "/src/cetz.typ": draw
|
||||||
|
|
||||||
#import "/src/core/utils.typ": normalize-measure, normalize-units
|
#import "/src/core/utils.typ": normalize-measure, normalize-units
|
||||||
#import "/src/consts.typ": *
|
|
||||||
|
|
||||||
#let name = "custom"
|
#let name = "custom"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user