only add message offset after loops in another group

This commit is contained in:
Gavin Nishizawa 2023-01-26 17:59:32 -08:00
parent 576c8df2c8
commit 74b0ed2064
No known key found for this signature in database
GPG key ID: AE3B177777CE55CD
2 changed files with 19 additions and 1 deletions

View file

@ -97,3 +97,10 @@ func (e *Edge) ContainedBy(obj *Object) bool {
}
return false
}
func (e *Edge) GetGroup() *Object {
for _, ref := range e.References {
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 lastIsLoop bool
var lastGroup *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 last message was a loop in a different group
group := message.GetGroup()
if lastIsLoop && lastGroup != group {
messageOffset += MIN_MESSAGE_DISTANCE
}
lastGroup = group
startY := messageOffset + noteOffset
var startX, endX float64
@ -490,12 +500,13 @@ func (sd *sequenceDiagram) routeMessages() error {
geo.NewPoint(midX, endY),
geo.NewPoint(endX, endY),
}
messageOffset += MIN_MESSAGE_DISTANCE
lastIsLoop = true
} else {
message.Route = []*geo.Point{
geo.NewPoint(startX, startY),
geo.NewPoint(endX, startY),
}
lastIsLoop = false
}
messageOffset += sd.yStep