From 53152f82c9bb90fbaaf24a4ad8be7857e1cd7cb4 Mon Sep 17 00:00:00 2001 From: Johannes Wolf <519002+johannes-wolf@users.noreply.github.com> Date: Wed, 20 Dec 2023 17:49:52 +0100 Subject: [PATCH] angle: Add Right Angle Function (#415) Adds a `right-angle` function to the angle library that behaves tikz like. Fixes #414. --- src/lib/angle.typ | 95 ++++++++++++++++++++++++++++--- tests/angle/right-angle/ref.png | Bin 0 -> 132812 bytes tests/angle/right-angle/test.typ | 64 +++++++++++++++++++++ 3 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 tests/angle/right-angle/ref.png create mode 100644 tests/angle/right-angle/test.typ diff --git a/src/lib/angle.typ b/src/lib/angle.typ index 3c3e4357d..3384631e2 100644 --- a/src/lib/angle.typ +++ b/src/lib/angle.typ @@ -1,9 +1,9 @@ -#import "../drawable.typ" -#import "../styles.typ" -#import "../vector.typ" -#import "../util.typ" -#import "../coordinate.typ" -#import "../anchor.typ" as anchor_ +#import "/src/drawable.typ" +#import "/src/styles.typ" +#import "/src/vector.typ" +#import "/src/util.typ" +#import "/src/coordinate.typ" +#import "/src/anchor.typ" as anchor_ #import "/src/draw.typ" // Angle default-style @@ -63,7 +63,8 @@ ..style ) = draw.group(name: name, ctx => { let style = styles.resolve(ctx.style, merge: style.named(), base: default-style, root: "angle") - let (ctx, origin, a, b) = coordinate.resolve(ctx, origin, a, b) + let (ctx, origin) = coordinate.resolve(ctx, origin) + let (ctx, a, b) = coordinate.resolve(ctx, a, b, update: false) assert(origin.at(2) == a.at(2) and a.at(2) == b.at(2), message: "Angle z coordinates of all three points must be equal") @@ -132,3 +133,83 @@ draw.content(label-pt, label) } }) + +/// Draw a right angle between `a` and `b` through origin `origin` +/// +/// #example(``` +/// line((0,0), (1,1.5), name: "a") +/// line((0,0), (2,-1), name: "b") +/// +/// // Draw an angle between the two lines +/// cetz.angle.right-angle("a.start", "a.end", "b.end", +/// radius: 1.5) +/// ```) +/// +/// *Style Root:* `angle` +/// +/// *Style Keys:* +/// #show-parameter-block("radius", ("number"), [ +/// The radius of the angles arc. If of type `ratio`, it is relative to the smaller distance of either origin to a or origin to b.], default: .5) +/// #show-parameter-block("label-radius", ("number", "ratio"), [ +/// The radius of the angles label origin. If of type `ratio`, it is relative to the distance between `origin` and the angle corner.], default: 50%) +/// +/// *Anchors* +/// / `"a"`: Point a +/// / `"b"`: Point b +/// / `"origin"`: Origin +/// / `"corner"`: Angle corner +/// / `"label"`: Label center +/// +/// - origin (coordinate): Angle origin +/// - a (coordinate): Coordinate of side `a`, containing an angle between `origin` and `b`. +/// - b (coordinate): Coordinate of side `b`, containing an angle between `origin` and `a`. +/// - label (none,content): Draw a label at the angles "label" anchor. +/// - name (none,string): Element name, used for querying anchors. +/// - ..style (style): Style key-value pairs. +#let right-angle( + origin, + a, + b, + label: "•", + name: none, + ..style +) = draw.group(name: name, ctx => { + let style = styles.resolve(ctx.style, merge: style.named(), base: default-style, root: "angle") + let (ctx, origin) = coordinate.resolve(ctx, origin) + let (ctx, a, b) = coordinate.resolve(ctx, a, b, update: false) + let vo = origin; let va = a; let vb = b + + // Radius can be relative to the min-distance between origin-a and origin-b + if type(style.radius) == ratio { + style.radius = style.radius * calc.min(vector.dist(vo, va), vector.dist(vo, vb)) / 100% + } + let (r, _) = util.resolve-radius(style.radius).map(util.resolve-number.with(ctx)) + + let va = vector.add(vo, vector.scale(vector.norm(vector.sub(va, vo)), r)) + let vb = vector.add(vo, vector.scale(vector.norm(vector.sub(vb, vo)), r)) + let angle-b = vector.angle2(vo, vb) + let vm = vector.add(va, (calc.cos(angle-b) * r, calc.sin(angle-b) * r, 0)) + + // Label radius can be relative to the distance between origin and the + // angle corner + if type(style.label-radius) == ratio { + style.label-radius = style.label-radius * vector.dist(vm, vo) / 100% + } + let (ra, _) = util.resolve-radius(style.label-radius).map(util.resolve-number.with(ctx)) + + if style.fill != none { + draw.line(vo, va, vm, vb, close: true, stroke: none, fill: style.fill) + } + draw.line(va, vm, vb, ..style, fill: none) + + let label-pt = vector.scale(vector.norm(vector.sub(vm, vo)), ra) + if label != none { + draw.content(label-pt, label) + } + + draw.anchor("a", a) + draw.anchor("b", b) + draw.anchor("origin", origin) + draw.anchor("corner", vm) + draw.anchor("label", label-pt) +}) diff --git a/tests/angle/right-angle/ref.png b/tests/angle/right-angle/ref.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5d78ab80a5ae13b0d964a156dd3866bdb343a8 GIT binary patch literal 132812 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 O%z5c|`~Kt4@BTlEr3?)K literal 0 HcmV?d00001 diff --git a/tests/angle/right-angle/test.typ b/tests/angle/right-angle/test.typ new file mode 100644 index 000000000..510052337 --- /dev/null +++ b/tests/angle/right-angle/test.typ @@ -0,0 +1,64 @@ +#set page(width: auto, height: auto) +#import "/src/lib.typ": * +#import "/tests/helper.typ": * + +#test-case({ + import draw: * + import angle: right-angle + + for a in range(0, 360, step: 36) { + a *= 1deg + translate((1.5, 0, 0)) + group({ + let (o, a, b) = ((0,0), (calc.cos(a), calc.sin(a)), (calc.cos(a+90deg), calc.sin(a+90deg))) + line(a, o, b) + right-angle(o, a, b) + }) + } +}) + +#test-case({ + import draw: * + import angle: right-angle + + for a in range(0, 360, step: 36) { + a *= 1deg + translate((1.5, 0, 0)) + group({ + let (o, a, b) = ((0,0), (calc.cos(a), calc.sin(a)), (calc.cos(a+45deg), calc.sin(a+45deg))) + line(a, o, b) + right-angle(o, a, b) + }) + } +}) + +#test-case({ + import draw: * + import angle: right-angle + + for a in range(0, 360, step: 36) { + a *= 1deg + translate((1.5, 0, 0)) + group({ + let (o, a, b) = ((0,0), (calc.cos(a), calc.sin(a)), (calc.cos(a+120deg), calc.sin(a+120deg))) + line(a, o, b) + right-angle(o, a, b) + }) + } +}) + +#test-case({ + import draw: * + import angle: right-angle, angle + + scale(3) + let (o, a, b) = ((0,0), (0,1), (1,0)) + line(a, o, b) + right-angle(o, a, b, name: "angle") + for-each-anchor("angle", n => { + if n in ("a", "b", "origin", "corner", "label") { + circle("angle." + n, stroke: blue, radius: .1) + content("angle." + n, [#n]) + } + }) +})