Skip to content

Commit 755df34

Browse files
committed
polar: Suppor arc projections
1 parent 3fb42dd commit 755df34

File tree

1 file changed

+28
-6
lines changed

1 file changed

+28
-6
lines changed

src/spine.typ

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -309,25 +309,47 @@
309309
let angular = proj.axes.at(0)
310310
let distal = proj.axes.at(1)
311311

312-
let (origin, outer) = (proj.transform)((0, distal.min), (0, distal.max))
313-
let radius = vector.dist(origin, outer)
312+
let (origin, start, mid, stop) = (proj.transform)(
313+
(angular.min, distal.min),
314+
(angular.min, distal.max),
315+
((angular.min + angular.max) / 2, distal.max),
316+
(angular.max, distal.max),
317+
)
318+
start = start.map(calc.round.with(digits: 6))
319+
stop = stop.map(calc.round.with(digits: 6))
320+
321+
let radius = vector.dist(origin, start)
314322

315323
let style = _prepare-style(ptx, cetz.styles.resolve(ptx.cetz-ctx.style,
316324
root: "axes", merge: style.named(), base: default-style))
317325
let angular-style = _get-axis-style(ptx, style, "angular")
318326
let distal-style = _get-axis-style(ptx, style, "distal")
319327

328+
let r-padding = angular-style.padding.first()
320329
let r-start = origin
321330
let r-end = vector.add(origin, (0, radius))
322-
draw.line(r-start, r-end, stroke: distal-style.stroke)
331+
draw.line(r-start, (rel: (0, radius + r-padding)), stroke: distal-style.stroke)
323332
if "computed-ticks" in distal {
333+
// TODO
324334
//ticks.draw-cartesian-grid(min-y, max-y, 1, y, y.computed-ticks, min-x, max-x, y-style)
325335
ticks.draw-cartesian(r-start, r-end, distal.computed-ticks, distal-style)
326336
}
327337

328-
let padding = angular-style.padding.first()
329-
draw.circle(origin, radius: radius + padding,
330-
stroke: angular-style.stroke)
338+
if start == stop {
339+
draw.circle(origin, radius: radius + r-padding,
340+
stroke: angular-style.stroke,
341+
fill: angular-style.fill)
342+
} else {
343+
// Apply padding to all three points
344+
(start, mid, stop) = (start, mid, stop).map(pt => {
345+
vector.add(pt, vector.scale(vector.norm(vector.sub(pt, origin)), r-padding))
346+
})
347+
348+
draw.arc-through(start, mid, stop,
349+
stroke: angular-style.stroke,
350+
fill: angular-style.fill,
351+
mode: "PIE")
352+
}
331353
if "computed-ticks" in angular {
332354
// TODO
333355
}

0 commit comments

Comments
 (0)