Merge branch 'terrastruct:master' into master

This commit is contained in:
Alexander Wang 2023-01-27 10:59:57 -08:00 committed by GitHub
commit 2d129437cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 3177 additions and 0 deletions

View file

@ -9,3 +9,5 @@
#### Improvements 🧹
#### Bugfixes ⛑️
- Fixes groups overlapping in sequence diagrams when they end in a self loop. [#728](https://github.com/terrastruct/d2/pull/728)

View file

@ -97,3 +97,12 @@ func (e *Edge) ContainedBy(obj *Object) bool {
}
return false
}
func (e *Edge) GetGroup() *Object {
for _, ref := range e.References {
if ref.ScopeObj.IsSequenceDiagramGroup() {
return ref.ScopeObj
}
}
return nil
}

View file

@ -445,6 +445,8 @@ func (sd *sequenceDiagram) placeSpans() {
// routeMessages routes horizontal edges (messages) from Src to Dst lifeline (actor/span center)
// in another step, routes are adjusted to spans borders when necessary
func (sd *sequenceDiagram) routeMessages() error {
var prevIsLoop bool
var prevGroup *d2graph.Object
messageOffset := sd.maxActorHeight + sd.yStep
for _, message := range sd.messages {
message.ZIndex = MESSAGE_Z_INDEX
@ -454,6 +456,14 @@ func (sd *sequenceDiagram) routeMessages() error {
noteOffset += note.Height + sd.yStep
}
}
// we need extra space if the previous message is a loop in a different group
group := message.GetGroup()
if prevIsLoop && prevGroup != group {
messageOffset += MIN_MESSAGE_DISTANCE
}
prevGroup = group
startY := messageOffset + noteOffset
var startX, endX float64
@ -490,11 +500,13 @@ func (sd *sequenceDiagram) routeMessages() error {
geo.NewPoint(midX, endY),
geo.NewPoint(endX, endY),
}
prevIsLoop = true
} else {
message.Route = []*geo.Point{
geo.NewPoint(startX, startY),
geo.NewPoint(endX, startY),
}
prevIsLoop = false
}
messageOffset += sd.yStep

View file

@ -394,6 +394,56 @@ x -> a: {
label: You don't have to know how the computer works,\njust how to work the computer.
style.opacity: 0.4
}
`,
},
{
name: "sequence_diagram_self_edge_group_overlap",
script: `
shape: sequence_diagram
a: A
b: B
c: C
group 1: {
a -> a
}
group 2: {
a -> b
}
group 3: {
a -> a.a
}
group 4: {
a.a -> b
}
group 5: {
b -> b
b -> b
}
group 6: {
b -> a
}
group 7: {
a -> a
}
group 8: {
a -> a
}
a -> a
group 9: {
a -> a
}
a -> a
b -> c
group 10: {
c -> c
}
b -> c
group 11: {
c -> c
}
b -> c
`,
},
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 336 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 336 KiB