Skip to content

Commit

Permalink
decoration: Allow specifying amplitudes as lengths (#767)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jollywatt authored Dec 6, 2024
1 parent ae0ebfb commit 3ed021f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 9 deletions.
19 changes: 10 additions & 9 deletions src/lib/decorations/path.typ
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,16 @@
factor: 50%,
)

#let resolve-amplitude(amplitude, segment, num-segments) = {
#let resolve-amplitude(ctx, amplitude, segment, num-segments) = {
segment = calc.max(0, calc.min(segment, num-segments))
return if type(amplitude) == function {
let amp = if type(amplitude) == function {
(amplitude)(segment / num-segments * 100%)
} else if type(amplitude) == array {
amplitude.at(calc.rem(int(2*segment), amplitude.len()), default: 0)
} else {
amplitude
}
return util.resolve-number(ctx, amp)
}

#let resolve-style(ctx, segments, style) = {
Expand Down Expand Up @@ -245,8 +246,8 @@
let ab = vector.sub(b, a)
let f = .25 - (50% - style.factor) / 50% * .25
let q-dir = vector.scale(ab, f)
let up = vector.scale(norm, resolve-amplitude(style.amplitude, i + .25, num-segments) / 2)
let down = vector.scale(norm, -resolve-amplitude(style.amplitude, i + .75, num-segments) / 2)
let up = vector.scale(norm, resolve-amplitude(ctx, style.amplitude, i + .25, num-segments) / 2)
let down = vector.scale(norm, -resolve-amplitude(ctx, style.amplitude, i + .75, num-segments) / 2)

let m1 = vector.add(vector.add(a, q-dir), up)
let m2 = vector.add(vector.sub(b, q-dir), down)
Expand Down Expand Up @@ -322,7 +323,7 @@
//
let fn(i, a, b, norm) = {
let ab = vector.sub(b, a)
let amplitude = resolve-amplitude(style.amplitude, i, num-segments)
let amplitude = resolve-amplitude(ctx, style.amplitude, i, num-segments)
let up = vector.scale(norm, amplitude / 2)
let dist = vector.dist(a, b)

Expand Down Expand Up @@ -403,8 +404,8 @@
//
let fn(i, a, b, norm) = {
let ab = vector.sub(b, a)
let up = vector.scale(norm, +resolve-amplitude(style.amplitude, i + .25, num-segments) / 2)
let down = vector.scale(norm, -resolve-amplitude(style.amplitude, i + .75, num-segments) / 2)
let up = vector.scale(norm, +resolve-amplitude(ctx, style.amplitude, i + .25, num-segments) / 2)
let down = vector.scale(norm, -resolve-amplitude(ctx, style.amplitude, i + .75, num-segments) / 2)

let ma = vector.add(vector.add(a, vector.scale(ab, .25)), up)
let m = vector.add(a, vector.scale(ab, .50))
Expand Down Expand Up @@ -467,8 +468,8 @@
//
let fn(i, a, b, norm) = {
let ab = vector.sub(b, a)
let up = vector.scale(norm, +resolve-amplitude(style.amplitude, i + .25, num-segments) / 2)
let down = vector.scale(norm, -resolve-amplitude(style.amplitude, i + .75, num-segments) / 2)
let up = vector.scale(norm, +resolve-amplitude(ctx, style.amplitude, i + .25, num-segments) / 2)
let down = vector.scale(norm, -resolve-amplitude(ctx, style.amplitude, i + .75, num-segments) / 2)
let m = vector.add(a, vector.scale(ab, factor))

if not close {
Expand Down
Binary file modified tests/decorations/path/ref/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions tests/decorations/path/test.typ
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,13 @@
segment-length: .22, amplitude: .8)
}
})

#test-case(fn => {
import draw: *

// Amplitudes of type length
fn(line((0,0), (4,0)), amplitude: 0.25)
fn(line((0,1), (4,1)), amplitude: 2.5mm)
fn(line((0,2), (4,2)), amplitude: t => 1em*calc.sin(float(t)*calc.pi))
fn(line((0,3), (4,3)), amplitude: (5mm, 0, 2mm, 0))
}, args: all-fns)

0 comments on commit 3ed021f

Please sign in to comment.