Merge branch 'terrastruct:master' into master
This commit is contained in:
commit
2d129437cf
8 changed files with 3177 additions and 0 deletions
|
|
@ -9,3 +9,5 @@
|
||||||
#### Improvements 🧹
|
#### Improvements 🧹
|
||||||
|
|
||||||
#### Bugfixes ⛑️
|
#### Bugfixes ⛑️
|
||||||
|
|
||||||
|
- Fixes groups overlapping in sequence diagrams when they end in a self loop. [#728](https://github.com/terrastruct/d2/pull/728)
|
||||||
|
|
|
||||||
|
|
@ -97,3 +97,12 @@ func (e *Edge) ContainedBy(obj *Object) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Edge) GetGroup() *Object {
|
||||||
|
for _, ref := range e.References {
|
||||||
|
if ref.ScopeObj.IsSequenceDiagramGroup() {
|
||||||
|
return ref.ScopeObj
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -445,6 +445,8 @@ func (sd *sequenceDiagram) placeSpans() {
|
||||||
// routeMessages routes horizontal edges (messages) from Src to Dst lifeline (actor/span center)
|
// routeMessages routes horizontal edges (messages) from Src to Dst lifeline (actor/span center)
|
||||||
// in another step, routes are adjusted to spans borders when necessary
|
// in another step, routes are adjusted to spans borders when necessary
|
||||||
func (sd *sequenceDiagram) routeMessages() error {
|
func (sd *sequenceDiagram) routeMessages() error {
|
||||||
|
var prevIsLoop bool
|
||||||
|
var prevGroup *d2graph.Object
|
||||||
messageOffset := sd.maxActorHeight + sd.yStep
|
messageOffset := sd.maxActorHeight + sd.yStep
|
||||||
for _, message := range sd.messages {
|
for _, message := range sd.messages {
|
||||||
message.ZIndex = MESSAGE_Z_INDEX
|
message.ZIndex = MESSAGE_Z_INDEX
|
||||||
|
|
@ -454,6 +456,14 @@ func (sd *sequenceDiagram) routeMessages() error {
|
||||||
noteOffset += note.Height + sd.yStep
|
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
|
startY := messageOffset + noteOffset
|
||||||
|
|
||||||
var startX, endX float64
|
var startX, endX float64
|
||||||
|
|
@ -490,11 +500,13 @@ func (sd *sequenceDiagram) routeMessages() error {
|
||||||
geo.NewPoint(midX, endY),
|
geo.NewPoint(midX, endY),
|
||||||
geo.NewPoint(endX, endY),
|
geo.NewPoint(endX, endY),
|
||||||
}
|
}
|
||||||
|
prevIsLoop = true
|
||||||
} else {
|
} else {
|
||||||
message.Route = []*geo.Point{
|
message.Route = []*geo.Point{
|
||||||
geo.NewPoint(startX, startY),
|
geo.NewPoint(startX, startY),
|
||||||
geo.NewPoint(endX, startY),
|
geo.NewPoint(endX, startY),
|
||||||
}
|
}
|
||||||
|
prevIsLoop = false
|
||||||
}
|
}
|
||||||
messageOffset += sd.yStep
|
messageOffset += sd.yStep
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -394,6 +394,56 @@ x -> a: {
|
||||||
label: You don't have to know how the computer works,\njust how to work the computer.
|
label: You don't have to know how the computer works,\njust how to work the computer.
|
||||||
style.opacity: 0.4
|
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
|
||||||
|
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/board.exp.json
generated
vendored
Normal file
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/board.exp.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/sketch.exp.svg
vendored
Normal file
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/sketch.exp.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 336 KiB |
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/board.exp.json
generated
vendored
Normal file
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/board.exp.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/sketch.exp.svg
vendored
Normal file
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/sketch.exp.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 336 KiB |
Loading…
Reference in a new issue