fixed and completed arrow tips
This commit is contained in:
parent
77a65a3199
commit
cbba14ed04
2
TODO.md
2
TODO.md
@ -12,7 +12,7 @@
|
|||||||
- [x] Notes
|
- [x] Notes
|
||||||
- [x] Synchronized arrows
|
- [x] Synchronized arrows
|
||||||
- [x] Slanted arrows
|
- [x] Slanted arrows
|
||||||
- [ ] Different types of arrow tips (WIP)
|
- [x] Different types of arrow tips
|
||||||
- [ ] Fix column spacing with notes over multiple columns
|
- [ ] Fix column spacing with notes over multiple columns
|
||||||
- [ ] Fix notes with arrows from start / to end / small arrows
|
- [ ] Fix notes with arrows from start / to end / small arrows
|
||||||
- [ ] Fix group size with self arrows + notes
|
- [ ] Fix group size with self arrows + notes
|
||||||
|
Binary file not shown.
@ -65,11 +65,11 @@ chronos.diagram({
|
|||||||
_seq("a", "b", end-tip: "x", comment: `->x`)
|
_seq("a", "b", end-tip: "x", comment: `->x`)
|
||||||
_seq("a", "b", start-tip: "x", comment: `x->`)
|
_seq("a", "b", start-tip: "x", comment: `x->`)
|
||||||
_seq("a", "b", start-tip: "o", comment: `o->`)
|
_seq("a", "b", start-tip: "o", comment: `o->`)
|
||||||
_seq("a", "b", end-tip: "o", comment: `->o`)
|
_seq("a", "b", end-tip: ("o", ">"), comment: `->o`)
|
||||||
_seq("a", "b", start-tip: "o", end-tip: "o", comment: `o->o`)
|
_seq("a", "b", start-tip: "o", end-tip: ("o", ">"), comment: `o->o`)
|
||||||
_seq("a", "b", start-tip: ">", end-tip: ">", comment: `<->`)
|
_seq("a", "b", start-tip: ">", end-tip: ">", comment: `<->`)
|
||||||
_seq("a", "b", start-tip: ("o", ">"), end-tip: ("o", ">"), comment: `o<->o`)
|
_seq("a", "b", start-tip: ("o", ">"), end-tip: ("o", ">"), comment: `o<->o`)
|
||||||
_seq("a", "b", start-tip: ("x", ">"), end-tip: ("x", ">"), comment: `x<->x`)
|
_seq("a", "b", start-tip: "x", end-tip: "x", comment: `x<->x`)
|
||||||
_seq("a", "b", end-tip: ("o", ">>"), comment: `->>o`)
|
_seq("a", "b", end-tip: ("o", ">>"), comment: `->>o`)
|
||||||
_seq("a", "b", end-tip: ("o", "\\"), comment: `-\o`)
|
_seq("a", "b", end-tip: ("o", "\\"), comment: `-\o`)
|
||||||
_seq("a", "b", end-tip: ("o", "\\\\"), comment: `-\\o`)
|
_seq("a", "b", end-tip: ("o", "\\\\"), comment: `-\\o`)
|
||||||
@ -78,6 +78,34 @@ chronos.diagram({
|
|||||||
_seq("a", "b", start-tip: "x", end-tip: ("o", ">"), comment: `x->o`)
|
_seq("a", "b", start-tip: "x", end-tip: ("o", ">"), comment: `x->o`)
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
chronos.diagram({
|
||||||
|
import chronos: *
|
||||||
|
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
_seq("b", "a", end-tip: ">", comment: `->`)
|
||||||
|
_seq("b", "a", end-tip: ">>", comment: `->>`)
|
||||||
|
_seq("b", "a", end-tip: "\\", comment: `-\`)
|
||||||
|
_seq("b", "a", end-tip: "\\\\", comment: `-\\`)
|
||||||
|
_seq("b", "a", end-tip: "/", comment: `-/`)
|
||||||
|
_seq("b", "a", end-tip: "//", comment: `-//`)
|
||||||
|
_seq("b", "a", end-tip: "x", comment: `->x`)
|
||||||
|
_seq("b", "a", start-tip: "x", comment: `x->`)
|
||||||
|
_seq("b", "a", start-tip: "o", comment: `o->`)
|
||||||
|
_seq("b", "a", end-tip: ("o", ">"), comment: `->o`)
|
||||||
|
_seq("b", "a", start-tip: "o", end-tip: ("o", ">"), comment: `o->o`)
|
||||||
|
_seq("b", "a", start-tip: ">", end-tip: ">", comment: `<->`)
|
||||||
|
_seq("b", "a", start-tip: ("o", ">"), end-tip: ("o", ">"), comment: `o<->o`)
|
||||||
|
_seq("b", "a", start-tip: "x", end-tip: "x", comment: `x<->x`)
|
||||||
|
_seq("b", "a", end-tip: ("o", ">>"), comment: `->>o`)
|
||||||
|
_seq("b", "a", end-tip: ("o", "\\"), comment: `-\o`)
|
||||||
|
_seq("b", "a", end-tip: ("o", "\\\\"), comment: `-\\o`)
|
||||||
|
_seq("b", "a", end-tip: ("o", "/"), comment: `-/o`)
|
||||||
|
_seq("b", "a", end-tip: ("o", "//"), comment: `-//o`)
|
||||||
|
_seq("b", "a", start-tip: "x", end-tip: ("o", ">"), comment: `x->o`)
|
||||||
|
}),
|
||||||
|
|
||||||
chronos.diagram({
|
chronos.diagram({
|
||||||
import chronos: *
|
import chronos: *
|
||||||
|
|
||||||
@ -93,11 +121,11 @@ chronos.diagram({
|
|||||||
_seq("a", "a", end-tip: "x", comment: `->x`)
|
_seq("a", "a", end-tip: "x", comment: `->x`)
|
||||||
_seq("a", "a", start-tip: "x", comment: `x->`)
|
_seq("a", "a", start-tip: "x", comment: `x->`)
|
||||||
_seq("a", "a", start-tip: "o", comment: `o->`)
|
_seq("a", "a", start-tip: "o", comment: `o->`)
|
||||||
_seq("a", "a", end-tip: "o", comment: `->o`)
|
_seq("a", "a", end-tip: ("o", ">"), comment: `->o`)
|
||||||
_seq("a", "a", start-tip: "o", end-tip: "o", comment: `o->o`)
|
_seq("a", "a", start-tip: "o", end-tip: ("o", ">"), comment: `o->o`)
|
||||||
_seq("a", "a", start-tip: ">", end-tip: ">", comment: `<->`)
|
_seq("a", "a", start-tip: ">", end-tip: ">", comment: `<->`)
|
||||||
_seq("a", "a", start-tip: ("o", ">"), end-tip: ("o", ">"), comment: `o<->o`)
|
_seq("a", "a", start-tip: ("o", ">"), end-tip: ("o", ">"), comment: `o<->o`)
|
||||||
_seq("a", "a", start-tip: ("x", ">"), end-tip: ("x", ">"), comment: `x<->x`)
|
_seq("a", "a", start-tip: "x", end-tip: "x", comment: `x<->x`)
|
||||||
_seq("a", "a", end-tip: ("o", ">>"), comment: `->>o`)
|
_seq("a", "a", end-tip: ("o", ">>"), comment: `->>o`)
|
||||||
_seq("a", "a", end-tip: ("o", "\\"), comment: `-\o`)
|
_seq("a", "a", end-tip: ("o", "\\"), comment: `-\o`)
|
||||||
_seq("a", "a", end-tip: ("o", "\\\\"), comment: `-\\o`)
|
_seq("a", "a", end-tip: ("o", "\\\\"), comment: `-\\o`)
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#let LIFELINE-W = 10
|
#let LIFELINE-W = 10
|
||||||
#let CREATE-OFFSET = 15
|
#let CREATE-OFFSET = 15
|
||||||
#let DEFAULT-SLANT = 10
|
#let DEFAULT-SLANT = 10
|
||||||
|
#let CROSS-TIP-SIZE = 4
|
||||||
|
#let CIRCLE-TIP-RADIUS = 3
|
||||||
|
|
||||||
#let SYM-GAP = 5
|
#let SYM-GAP = 5
|
||||||
#let PAR-PAD = (5pt, 3pt)
|
#let PAR-PAD = (5pt, 3pt)
|
||||||
|
@ -16,10 +16,34 @@
|
|||||||
"/": (symbol: ">", fill: color, harpoon: true),
|
"/": (symbol: ">", fill: color, harpoon: true),
|
||||||
"//": (symbol: "straight", harpoon: true),
|
"//": (symbol: "straight", harpoon: true),
|
||||||
"x": none,
|
"x": none,
|
||||||
"o": (symbol: "o"),
|
"o": none,
|
||||||
).at(sym)
|
).at(sym)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#let reverse-arrow-mark(mark) = {
|
||||||
|
if type(mark) == array {
|
||||||
|
return mark.map(m => reverse-arrow-mark(m))
|
||||||
|
}
|
||||||
|
let mark2 = mark
|
||||||
|
if type(mark) == dictionary and mark.at("harpoon", default: false) {
|
||||||
|
let flipped = mark.at("flip", default: false)
|
||||||
|
mark2.insert("flip", not flipped)
|
||||||
|
}
|
||||||
|
return mark2
|
||||||
|
}
|
||||||
|
|
||||||
|
#let is-tip-of-type(type_, tip) = {
|
||||||
|
if type(tip) == str and tip == type_ {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if type(tip) == array and tip.contains(type_) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
#let is-circle-tip = is-tip-of-type.with("o")
|
||||||
|
#let is-cross-tip = is-tip-of-type.with("x")
|
||||||
|
|
||||||
#let _seq(
|
#let _seq(
|
||||||
p1,
|
p1,
|
||||||
p2,
|
p2,
|
||||||
@ -175,6 +199,15 @@
|
|||||||
shapes += shps
|
shapes += shps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let flip-mark = end-info.i <= start-info.i
|
||||||
|
if elmt.flip {
|
||||||
|
flip-mark = not flip-mark
|
||||||
|
}
|
||||||
|
if flip-mark {
|
||||||
|
style.mark.end = reverse-arrow-mark(style.mark.end)
|
||||||
|
}
|
||||||
|
|
||||||
|
let pts
|
||||||
if elmt.p1 == elmt.p2 {
|
if elmt.p1 == elmt.p2 {
|
||||||
if elmt.flip {
|
if elmt.flip {
|
||||||
x1 = start-info.lx
|
x1 = start-info.lx
|
||||||
@ -197,12 +230,11 @@
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
shapes += draw.line(
|
pts = (
|
||||||
(x1, start-info.y),
|
(x1, start-info.y),
|
||||||
(x-mid, start-info.y),
|
(x-mid, start-info.y),
|
||||||
(x-mid, end-info.y),
|
(x-mid, end-info.y),
|
||||||
(x2, end-info.y),
|
(x2, end-info.y)
|
||||||
..style
|
|
||||||
)
|
)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -219,12 +251,58 @@
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
shapes += draw.line(
|
pts = (
|
||||||
(x1, start-info.y),
|
(x1, start-info.y),
|
||||||
(x2, end-info.y),
|
(x2, end-info.y)
|
||||||
..style
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start circle tip
|
||||||
|
if is-circle-tip(elmt.start-tip) {
|
||||||
|
shapes += draw.circle(pts.first(), radius: CIRCLE-TIP-RADIUS, stroke: elmt.color, fill: none, name: "_circle-start-tip")
|
||||||
|
pts.at(0) = "_circle-start-tip"
|
||||||
|
|
||||||
|
// Start cross tip
|
||||||
|
} else if is-cross-tip(elmt.start-tip) {
|
||||||
|
let size = CROSS-TIP-SIZE
|
||||||
|
let cross-pt = (pts.first(), size * 2, pts.at(1))
|
||||||
|
shapes += draw.line(
|
||||||
|
(rel: (-size, -size), to: cross-pt),
|
||||||
|
(rel: (size, size), to: cross-pt),
|
||||||
|
stroke: elmt.color + 1.5pt
|
||||||
|
)
|
||||||
|
shapes += draw.line(
|
||||||
|
(rel: (-size, size), to: cross-pt),
|
||||||
|
(rel: (size, -size), to: cross-pt),
|
||||||
|
stroke: elmt.color + 1.5pt
|
||||||
|
)
|
||||||
|
pts.at(0) = cross-pt
|
||||||
|
}
|
||||||
|
|
||||||
|
// End circle tip
|
||||||
|
if is-circle-tip(elmt.end-tip) {
|
||||||
|
shapes += draw.circle(pts.last(), radius: 3, stroke: elmt.color, fill: none, name: "_circle-end-tip")
|
||||||
|
pts.at(pts.len() - 1) = "_circle-end-tip"
|
||||||
|
|
||||||
|
// End cross tip
|
||||||
|
} else if is-cross-tip(elmt.end-tip) {
|
||||||
|
let size = CROSS-TIP-SIZE
|
||||||
|
let cross-pt = (pts.last(), size * 2, pts.at(pts.len() - 2))
|
||||||
|
shapes += draw.line(
|
||||||
|
(rel: (-size, -size), to: cross-pt),
|
||||||
|
(rel: (size, size), to: cross-pt),
|
||||||
|
stroke: elmt.color + 1.5pt
|
||||||
|
)
|
||||||
|
shapes += draw.line(
|
||||||
|
(rel: (-size, size), to: cross-pt),
|
||||||
|
(rel: (size, -size), to: cross-pt),
|
||||||
|
stroke: elmt.color + 1.5pt
|
||||||
|
)
|
||||||
|
pts.at(pts.len() - 1) = cross-pt
|
||||||
|
}
|
||||||
|
|
||||||
|
shapes += draw.line(..pts, ..style)
|
||||||
|
|
||||||
if elmt.enable-dst {
|
if elmt.enable-dst {
|
||||||
let dst-line = lifelines.at(i2)
|
let dst-line = lifelines.at(i2)
|
||||||
dst-line.lines.push(("enable", end-info.y, elmt.lifeline-style))
|
dst-line.lines.push(("enable", end-info.y, elmt.lifeline-style))
|
||||||
|
Loading…
Reference in New Issue
Block a user