Handle edges to/from descendants

This commit is contained in:
Júlio César Batista 2022-12-03 09:38:08 -08:00
parent 9776d856fa
commit e53c97ebec
No known key found for this signature in database
GPG key ID: 10C4B861BF314878
28 changed files with 1849 additions and 341 deletions

View file

@ -37,7 +37,10 @@ func Layout(ctx context.Context, g *d2graph.Graph, layout func(ctx context.Conte
continue continue
} }
sd := layoutSequenceDiagram(g, obj) sd, err := layoutSequenceDiagram(g, obj)
if err != nil {
return err
}
obj.Children = make(map[string]*d2graph.Object) obj.Children = make(map[string]*d2graph.Object)
obj.ChildrenArray = nil obj.ChildrenArray = nil
obj.Box = geo.NewBox(nil, sd.getWidth(), sd.getHeight()) obj.Box = geo.NewBox(nil, sd.getWidth(), sd.getHeight())
@ -73,7 +76,7 @@ func Layout(ctx context.Context, g *d2graph.Graph, layout func(ctx context.Conte
} }
// layoutSequenceDiagram finds the edges inside the sequence diagram and performs the layout on the object descendants // layoutSequenceDiagram finds the edges inside the sequence diagram and performs the layout on the object descendants
func layoutSequenceDiagram(g *d2graph.Graph, obj *d2graph.Object) *sequenceDiagram { func layoutSequenceDiagram(g *d2graph.Graph, obj *d2graph.Object) (*sequenceDiagram, error) {
var edges []*d2graph.Edge var edges []*d2graph.Edge
for _, edge := range g.Edges { for _, edge := range g.Edges {
// both Src and Dst must be inside the sequence diagram // both Src and Dst must be inside the sequence diagram
@ -83,8 +86,8 @@ func layoutSequenceDiagram(g *d2graph.Graph, obj *d2graph.Object) *sequenceDiagr
} }
sd := newSequenceDiagram(obj.ChildrenArray, edges) sd := newSequenceDiagram(obj.ChildrenArray, edges)
sd.layout() err := sd.layout()
return sd return sd, err
} }
func getLayoutEdges(g *d2graph.Graph, toRemove map[*d2graph.Edge]struct{}) ([]*d2graph.Edge, map[string]int) { func getLayoutEdges(g *d2graph.Graph, toRemove map[*d2graph.Edge]struct{}) ([]*d2graph.Edge, map[string]int) {

View file

@ -180,14 +180,17 @@ func TestSpansSequenceDiagram(t *testing.T) {
Shape: d2graph.Scalar{Value: shape.PERSON_TYPE}, Shape: d2graph.Scalar{Value: shape.PERSON_TYPE},
} }
a_t1 := a.EnsureChild([]string{"t1"}) a_t1 := a.EnsureChild([]string{"t1"})
a_t1.Box = geo.NewBox(nil, 100, 100)
a_t1.Attributes = d2graph.Attributes{ a_t1.Attributes = d2graph.Attributes{
Shape: d2graph.Scalar{Value: shape.DIAMOND_TYPE}, Shape: d2graph.Scalar{Value: shape.DIAMOND_TYPE},
Label: d2graph.Scalar{Value: "label"}, Label: d2graph.Scalar{Value: "label"},
} }
a_t2 := a.EnsureChild([]string{"t2"}) a_t2 := a.EnsureChild([]string{"t2"})
a_t2.Box = geo.NewBox(nil, 100, 100)
b := g.Root.EnsureChild([]string{"b"}) b := g.Root.EnsureChild([]string{"b"})
b.Box = geo.NewBox(nil, 30, 30) b.Box = geo.NewBox(nil, 30, 30)
b_t1 := b.EnsureChild([]string{"t1"}) b_t1 := b.EnsureChild([]string{"t1"})
b_t1.Box = geo.NewBox(nil, 100, 100)
g.Edges = []*d2graph.Edge{ g.Edges = []*d2graph.Edge{
{ {
@ -303,9 +306,11 @@ func TestNestedSequenceDiagrams(t *testing.T) {
a.Box = geo.NewBox(nil, 100, 100) a.Box = geo.NewBox(nil, 100, 100)
a.Attributes.Shape = d2graph.Scalar{Value: shape.PERSON_TYPE} a.Attributes.Shape = d2graph.Scalar{Value: shape.PERSON_TYPE}
a_t1 := a.EnsureChild([]string{"t1"}) a_t1 := a.EnsureChild([]string{"t1"})
a_t1.Box = geo.NewBox(nil, 100, 100)
b := container.EnsureChild([]string{"b"}) b := container.EnsureChild([]string{"b"})
b.Box = geo.NewBox(nil, 30, 30) b.Box = geo.NewBox(nil, 30, 30)
b_t1 := b.EnsureChild([]string{"t1"}) b_t1 := b.EnsureChild([]string{"t1"})
b_t1.Box = geo.NewBox(nil, 100, 100)
c := g.Root.EnsureChild([]string{"c"}) c := g.Root.EnsureChild([]string{"c"})
c.Box = geo.NewBox(nil, 100, 100) c.Box = geo.NewBox(nil, 100, 100)
@ -419,3 +424,54 @@ func TestSelfEdges(t *testing.T) {
t.Fatalf("expected route height to be %.f5, got %.5f", MIN_MESSAGE_DISTANCE, route[3].Y-route[0].Y) t.Fatalf("expected route height to be %.f5, got %.5f", MIN_MESSAGE_DISTANCE, route[3].Y-route[0].Y)
} }
} }
func TestSequenceToDescendant(t *testing.T) {
g := d2graph.NewGraph(nil)
g.Root.Attributes.Shape = d2graph.Scalar{Value: d2target.ShapeSequenceDiagram}
a := g.Root.EnsureChild([]string{"a"})
a.Box = geo.NewBox(nil, 100, 100)
a.Attributes = d2graph.Attributes{
Shape: d2graph.Scalar{Value: shape.PERSON_TYPE},
}
a_t1 := a.EnsureChild([]string{"t1"})
a_t1.Box = geo.NewBox(nil, 16, 80)
g.Edges = []*d2graph.Edge{
{
Src: a,
Dst: a_t1,
Index: 0,
}, {
Src: a_t1,
Dst: a,
Index: 0,
},
}
ctx := log.WithTB(context.Background(), t, nil)
Layout(ctx, g, func(ctx context.Context, g *d2graph.Graph) error {
return nil
})
route1 := g.Edges[0].Route
if len(route1) != 4 {
t.Fatal("expected route with 4 points")
}
if route1[0].X != a.Center().X {
t.Fatal("expected route to start at `a` lifeline")
}
if route1[3].X != a_t1.TopLeft.X+a_t1.Width {
t.Fatal("expected route to end at `a.t1` right side")
}
route2 := g.Edges[1].Route
if len(route2) != 4 {
t.Fatal("expected route with 4 points")
}
if route2[0].X != a_t1.TopLeft.X+a_t1.Width {
t.Fatal("expected route to start at `a.t1` right side")
}
if route2[3].X != a.Center().X {
t.Fatal("expected route to end at `a` lifeline")
}
}

View file

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"math" "math"
"sort" "sort"
"strings"
"oss.terrastruct.com/util-go/go2" "oss.terrastruct.com/util-go/go2"
@ -26,9 +27,8 @@ type sequenceDiagram struct {
objectRank map[*d2graph.Object]int objectRank map[*d2graph.Object]int
// keep track of the first and last message of a given actor/span // keep track of the first and last message of a given actor/span
// the message rank is the order in which it appears from top to bottom firstMessage map[*d2graph.Object]*d2graph.Edge
minMessageRank map[*d2graph.Object]int lastMessage map[*d2graph.Object]*d2graph.Edge
maxMessageRank map[*d2graph.Object]int
messageYStep float64 messageYStep float64
actorXStep float64 actorXStep float64
@ -42,8 +42,8 @@ func newSequenceDiagram(actors []*d2graph.Object, messages []*d2graph.Edge) *seq
spans: nil, spans: nil,
lifelines: nil, lifelines: nil,
objectRank: make(map[*d2graph.Object]int), objectRank: make(map[*d2graph.Object]int),
minMessageRank: make(map[*d2graph.Object]int), firstMessage: make(map[*d2graph.Object]*d2graph.Edge),
maxMessageRank: make(map[*d2graph.Object]int), lastMessage: make(map[*d2graph.Object]*d2graph.Edge),
messageYStep: MIN_MESSAGE_DISTANCE, messageYStep: MIN_MESSAGE_DISTANCE,
actorXStep: MIN_ACTOR_DISTANCE, actorXStep: MIN_ACTOR_DISTANCE,
maxActorHeight: 0., maxActorHeight: 0.,
@ -76,17 +76,27 @@ func newSequenceDiagram(actors []*d2graph.Object, messages []*d2graph.Edge) *seq
} }
} }
for rank, message := range sd.messages { for _, message := range sd.messages {
sd.messageYStep = math.Max(sd.messageYStep, float64(message.LabelDimensions.Height)) sd.messageYStep = math.Max(sd.messageYStep, float64(message.LabelDimensions.Height))
sd.setMinMaxMessageRank(message.Src, rank)
sd.setMinMaxMessageRank(message.Dst, rank)
// ensures that long labels, spanning over multiple actors, don't make for large gaps between actors // ensures that long labels, spanning over multiple actors, don't make for large gaps between actors
// by distributing the label length across the actors rank difference // by distributing the label length across the actors rank difference
rankDiff := math.Abs(float64(sd.objectRank[message.Src]) - float64(sd.objectRank[message.Dst])) rankDiff := math.Abs(float64(sd.objectRank[message.Src]) - float64(sd.objectRank[message.Dst]))
distributedLabelWidth := float64(message.LabelDimensions.Width) / rankDiff if rankDiff != 0 {
sd.actorXStep = math.Max(sd.actorXStep, distributedLabelWidth+HORIZONTAL_PAD) // rankDiff = 0 for self edges
distributedLabelWidth := float64(message.LabelDimensions.Width) / rankDiff
sd.actorXStep = math.Max(sd.actorXStep, distributedLabelWidth+HORIZONTAL_PAD)
}
sd.lastMessage[message.Src] = message
if _, exists := sd.firstMessage[message.Src]; !exists {
sd.firstMessage[message.Src] = message
}
sd.lastMessage[message.Dst] = message
if _, exists := sd.firstMessage[message.Dst]; !exists {
sd.firstMessage[message.Dst] = message
}
} }
sd.messageYStep += VERTICAL_PAD sd.messageYStep += VERTICAL_PAD
@ -98,21 +108,15 @@ func newSequenceDiagram(actors []*d2graph.Object, messages []*d2graph.Edge) *seq
return sd return sd
} }
func (sd *sequenceDiagram) setMinMaxMessageRank(actor *d2graph.Object, rank int) { func (sd *sequenceDiagram) layout() error {
if minRank, exists := sd.minMessageRank[actor]; exists {
sd.minMessageRank[actor] = go2.IntMin(minRank, rank)
} else {
sd.minMessageRank[actor] = rank
}
sd.maxMessageRank[actor] = go2.IntMax(sd.maxMessageRank[actor], rank)
}
func (sd *sequenceDiagram) layout() {
sd.placeActors() sd.placeActors()
if err := sd.routeMessages(); err != nil {
return err
}
sd.placeSpans() sd.placeSpans()
sd.routeMessages() sd.adjustRouteEndpoints()
sd.addLifelineEdges() sd.addLifelineEdges()
return nil
} }
// placeActors places actors bottom aligned, side by side // placeActors places actors bottom aligned, side by side
@ -210,12 +214,21 @@ func (sd *sequenceDiagram) placeSpans() {
// finds the position if there are messages to this span // finds the position if there are messages to this span
minMessageY := math.Inf(1) minMessageY := math.Inf(1)
if minRank, exists := sd.minMessageRank[span]; exists { if firstMessage, exists := sd.firstMessage[span]; exists {
minMessageY = sd.getMessageY(minRank) // needs to check Src/Dst because of self-edges or edges to/from descendants
if span == firstMessage.Src {
minMessageY = firstMessage.Route[0].Y
} else {
minMessageY = firstMessage.Route[len(firstMessage.Route)-1].Y
}
} }
maxMessageY := math.Inf(-1) maxMessageY := math.Inf(-1)
if maxRank, exists := sd.maxMessageRank[span]; exists { if lastMessage, exists := sd.lastMessage[span]; exists {
maxMessageY = sd.getMessageY(maxRank) if span == lastMessage.Src {
maxMessageY = lastMessage.Route[0].Y
} else {
maxMessageY = lastMessage.Route[len(lastMessage.Route)-1].Y
}
} }
// if it is the same as the child top left, add some padding // if it is the same as the child top left, add some padding
@ -237,40 +250,36 @@ func (sd *sequenceDiagram) placeSpans() {
} }
} }
// routeMessages routes horizontal edges (messages) from Src to Dst // routeMessages routes horizontal edges (messages) from Src to Dst lifeline (actor/span center)
func (sd *sequenceDiagram) routeMessages() { // in another step, routes are adjusted to spans borders when necessary
for rank, message := range sd.messages { func (sd *sequenceDiagram) routeMessages() error {
startY := sd.maxActorHeight + sd.messageYStep
for _, message := range sd.messages {
message.ZIndex = 2 message.ZIndex = 2
isLeftToRight := message.Src.TopLeft.X < message.Dst.TopLeft.X var startX, endX float64
if startCenter := getCenter(message.Src); startCenter != nil {
startX = startCenter.X
} else {
return fmt.Errorf("could not find center of %s", message.Src.AbsID())
}
if endCenter := getCenter(message.Dst); endCenter != nil {
endX = endCenter.X
} else {
return fmt.Errorf("could not find center of %s", message.Dst.AbsID())
}
isLeftToRight := startX < endX
isToDescendant := strings.HasPrefix(message.Dst.AbsID(), message.Src.AbsID())
isFromDescendant := strings.HasPrefix(message.Src.AbsID(), message.Dst.AbsID())
isSelfMessage := message.Src == message.Dst isSelfMessage := message.Src == message.Dst
// finds the proper anchor point based on the message direction if isSelfMessage || isToDescendant || isFromDescendant {
var startX, endX float64 midX := startX + MIN_MESSAGE_DISTANCE
if sd.isActor(message.Src) { endY := startY + MIN_MESSAGE_DISTANCE
startX = message.Src.Center().X
} else if isLeftToRight {
startX = message.Src.TopLeft.X + message.Src.Width
} else {
startX = message.Src.TopLeft.X
}
if isSelfMessage {
endX = startX
} else if sd.isActor(message.Dst) {
endX = message.Dst.Center().X
} else if isLeftToRight {
endX = message.Dst.TopLeft.X
} else {
endX = message.Dst.TopLeft.X + message.Dst.Width
}
startY := sd.getMessageY(rank)
if isSelfMessage {
message.Route = []*geo.Point{ message.Route = []*geo.Point{
geo.NewPoint(startX, startY), geo.NewPoint(startX, startY),
geo.NewPoint(startX+MIN_MESSAGE_DISTANCE, startY), geo.NewPoint(midX, startY),
geo.NewPoint(startX+MIN_MESSAGE_DISTANCE, startY+MIN_MESSAGE_DISTANCE), geo.NewPoint(midX, endY),
geo.NewPoint(startX, startY+MIN_MESSAGE_DISTANCE), geo.NewPoint(endX, endY),
} }
} else { } else {
message.Route = []*geo.Point{ message.Route = []*geo.Point{
@ -278,9 +287,10 @@ func (sd *sequenceDiagram) routeMessages() {
geo.NewPoint(endX, startY), geo.NewPoint(endX, startY),
} }
} }
startY += sd.messageYStep
if message.Attributes.Label.Value != "" { if message.Attributes.Label.Value != "" {
if isSelfMessage { if isSelfMessage || isFromDescendant || isToDescendant {
message.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter)) message.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter))
} else if isLeftToRight { } else if isLeftToRight {
message.LabelPosition = go2.Pointer(string(label.OutsideTopCenter)) message.LabelPosition = go2.Pointer(string(label.OutsideTopCenter))
@ -290,11 +300,39 @@ func (sd *sequenceDiagram) routeMessages() {
} }
} }
} }
return nil
} }
func (sd *sequenceDiagram) getMessageY(rank int) float64 { func getCenter(obj *d2graph.Object) *geo.Point {
// +1 so that the first message has the top padding for its label if obj == nil {
return ((float64(rank) + 1.) * sd.messageYStep) + sd.maxActorHeight return nil
} else if obj.TopLeft != nil {
return obj.Center()
}
return getCenter(obj.Parent)
}
// adjustRouteEndpoints adjust the first and last points of message routes when they are spans
// routeMessages() will route to the actor lifelife as a reference point and this function
// adjust to span width when necessary
func (sd *sequenceDiagram) adjustRouteEndpoints() {
for _, message := range sd.messages {
route := message.Route
if !sd.isActor(message.Src) {
if sd.objectRank[message.Src] <= sd.objectRank[message.Dst] {
route[0].X += message.Src.Width / 2.
} else {
route[0].X -= message.Src.Width / 2.
}
}
if !sd.isActor(message.Dst) {
if sd.objectRank[message.Src] < sd.objectRank[message.Dst] {
route[len(route)-1].X -= message.Dst.Width / 2.
} else {
route[len(route)-1].X += message.Dst.Width / 2.
}
}
}
} }
func (sd *sequenceDiagram) isActor(obj *d2graph.Object) bool { func (sd *sequenceDiagram) isActor(obj *d2graph.Object) bool {
@ -308,8 +346,7 @@ func (sd *sequenceDiagram) getWidth() float64 {
} }
func (sd *sequenceDiagram) getHeight() float64 { func (sd *sequenceDiagram) getHeight() float64 {
// the layout is always placed starting at 0, so the height is just the last message return sd.lifelines[0].Route[1].Y
return sd.getMessageY(len(sd.messages))
} }
func (sd *sequenceDiagram) shift(tl *geo.Point) { func (sd *sequenceDiagram) shift(tl *geo.Point) {

View file

@ -1325,6 +1325,16 @@ s -> t`,
z -> y z -> y
z -> z: hello z -> z: hello
`, `,
}, {
name: "sequence_diagram_self_edges",
script: `shape: sequence_diagram
a -> a: a self edge here
a -> b: between actors
b -> b.1: to descendant
b.1 -> b.1.2: to deeper descendant
b.1.2 -> b: to parent
b -> a.1.2: actor
a.1 -> b.3`,
}, },
} }

View file

@ -1590,7 +1590,7 @@
}, },
{ {
"x": 76.5, "x": 76.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1629,7 +1629,7 @@
}, },
{ {
"x": 485, "x": 485,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1668,7 +1668,7 @@
}, },
{ {
"x": 937.5, "x": 937.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1707,7 +1707,7 @@
}, },
{ {
"x": 1404.5, "x": 1404.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1746,7 +1746,7 @@
}, },
{ {
"x": 1849, "x": 1849,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1785,7 +1785,7 @@
}, },
{ {
"x": 2279, "x": 2279,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1824,7 +1824,7 @@
}, },
{ {
"x": 2686, "x": 2686,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1863,7 +1863,7 @@
}, },
{ {
"x": 3093, "x": 3093,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1902,7 +1902,7 @@
}, },
{ {
"x": 3516, "x": 3516,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1941,7 +1941,7 @@
}, },
{ {
"x": 3939, "x": 3939,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1980,7 +1980,7 @@
}, },
{ {
"x": 4346, "x": 4346,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2019,7 +2019,7 @@
}, },
{ {
"x": 4753, "x": 4753,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2058,7 +2058,7 @@
}, },
{ {
"x": 5172.5, "x": 5172.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2097,7 +2097,7 @@
}, },
{ {
"x": 5608.5, "x": 5608.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2136,7 +2136,7 @@
}, },
{ {
"x": 6034, "x": 6034,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2175,7 +2175,7 @@
}, },
{ {
"x": 6448.5, "x": 6448.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2214,7 +2214,7 @@
}, },
{ {
"x": 6868.5, "x": 6868.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2253,7 +2253,7 @@
}, },
{ {
"x": 7314.5, "x": 7314.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2292,7 +2292,7 @@
}, },
{ {
"x": 7753, "x": 7753,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2331,7 +2331,7 @@
}, },
{ {
"x": 8190, "x": 8190,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 991 KiB

After

Width:  |  Height:  |  Size: 991 KiB

View file

@ -1590,7 +1590,7 @@
}, },
{ {
"x": 76.5, "x": 76.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1629,7 +1629,7 @@
}, },
{ {
"x": 485, "x": 485,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1668,7 +1668,7 @@
}, },
{ {
"x": 937.5, "x": 937.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1707,7 +1707,7 @@
}, },
{ {
"x": 1404.5, "x": 1404.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1746,7 +1746,7 @@
}, },
{ {
"x": 1849, "x": 1849,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1785,7 +1785,7 @@
}, },
{ {
"x": 2279, "x": 2279,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1824,7 +1824,7 @@
}, },
{ {
"x": 2686, "x": 2686,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1863,7 +1863,7 @@
}, },
{ {
"x": 3093, "x": 3093,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1902,7 +1902,7 @@
}, },
{ {
"x": 3516, "x": 3516,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1941,7 +1941,7 @@
}, },
{ {
"x": 3939, "x": 3939,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -1980,7 +1980,7 @@
}, },
{ {
"x": 4346, "x": 4346,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2019,7 +2019,7 @@
}, },
{ {
"x": 4753, "x": 4753,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2058,7 +2058,7 @@
}, },
{ {
"x": 5172.5, "x": 5172.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2097,7 +2097,7 @@
}, },
{ {
"x": 5608.5, "x": 5608.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2136,7 +2136,7 @@
}, },
{ {
"x": 6034, "x": 6034,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2175,7 +2175,7 @@
}, },
{ {
"x": 6448.5, "x": 6448.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2214,7 +2214,7 @@
}, },
{ {
"x": 6868.5, "x": 6868.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2253,7 +2253,7 @@
}, },
{ {
"x": 7314.5, "x": 7314.5,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2292,7 +2292,7 @@
}, },
{ {
"x": 7753, "x": 7753,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,
@ -2331,7 +2331,7 @@
}, },
{ {
"x": 8190, "x": 8190,
"y": 2834 "y": 2784
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 991 KiB

After

Width:  |  Height:  |  Size: 991 KiB

View file

@ -1265,7 +1265,7 @@
}, },
{ {
"x": 75, "x": 75,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1304,7 +1304,7 @@
}, },
{ {
"x": 500, "x": 500,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1343,7 +1343,7 @@
}, },
{ {
"x": 925, "x": 925,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1382,7 +1382,7 @@
}, },
{ {
"x": 1343, "x": 1343,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1421,7 +1421,7 @@
}, },
{ {
"x": 1766, "x": 1766,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1460,7 +1460,7 @@
}, },
{ {
"x": 2194.5, "x": 2194.5,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 332 KiB

View file

@ -1265,7 +1265,7 @@
}, },
{ {
"x": 75, "x": 75,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1304,7 +1304,7 @@
}, },
{ {
"x": 500, "x": 500,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1343,7 +1343,7 @@
}, },
{ {
"x": 925, "x": 925,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1382,7 +1382,7 @@
}, },
{ {
"x": 1343, "x": 1343,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1421,7 +1421,7 @@
}, },
{ {
"x": 1766, "x": 1766,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,
@ -1460,7 +1460,7 @@
}, },
{ {
"x": 2194.5, "x": 2194.5,
"y": 1490 "y": 1440
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 332 KiB

View file

@ -0,0 +1,658 @@
{
"name": "",
"shapes": [
{
"id": "a",
"type": "",
"pos": {
"x": 0,
"y": 50
},
"width": 150,
"height": 169,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#E3E9FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "a",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 12,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "b",
"type": "",
"pos": {
"x": 400,
"y": 52
},
"width": 150,
"height": 167,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#E3E9FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "b",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "b.1",
"type": "rectangle",
"pos": {
"x": 469,
"y": 673
},
"width": 12,
"height": 228,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#EDF0FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 24,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 15,
"labelHeight": 36,
"zIndex": 1,
"level": 2
},
{
"id": "b.1.2",
"type": "rectangle",
"pos": {
"x": 465,
"y": 803
},
"width": 20,
"height": 82,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"zIndex": 1,
"level": 3
},
{
"id": "a.1",
"type": "rectangle",
"pos": {
"x": 69,
"y": 967
},
"width": 12,
"height": 178,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#EDF0FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 24,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 15,
"labelHeight": 36,
"zIndex": 1,
"level": 2
},
{
"id": "a.1.2",
"type": "rectangle",
"pos": {
"x": 65,
"y": 983
},
"width": 20,
"height": 80,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"zIndex": 1,
"level": 3
},
{
"id": "b.3",
"type": "rectangle",
"pos": {
"x": 469,
"y": 1113
},
"width": 12,
"height": 80,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#EDF0FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"zIndex": 1,
"level": 2
}
],
"connections": [
{
"id": "(a -> a)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "a",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "a self edge here",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 103,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 75,
"y": 349
},
{
"x": 155,
"y": 349
},
{
"x": 155,
"y": 429
},
{
"x": 75,
"y": 429
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(a -> b)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "between actors",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 102,
"labelHeight": 21,
"labelPosition": "OUTSIDE_TOP_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 75,
"y": 479
},
{
"x": 475,
"y": 479
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(b -> b.1)[0]",
"src": "b",
"srcArrow": "none",
"srcLabel": "",
"dst": "b.1",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "to descendant",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 94,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 475,
"y": 609
},
{
"x": 555,
"y": 609
},
{
"x": 555,
"y": 689
},
{
"x": 481,
"y": 689
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "b.(1 -> 1.2)[0]",
"src": "b.1",
"srcArrow": "none",
"srcLabel": "",
"dst": "b.1.2",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "to deeper descendant",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 143,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 481,
"y": 739
},
{
"x": 555,
"y": 739
},
{
"x": 555,
"y": 819
},
{
"x": 485,
"y": 819
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(b.1.2 -> b)[0]",
"src": "b.1.2",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "to parent",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 62,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 485,
"y": 869
},
{
"x": 555,
"y": 869
},
{
"x": 555,
"y": 949
},
{
"x": 475,
"y": 949
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(b -> a.1.2)[0]",
"src": "b",
"srcArrow": "none",
"srcLabel": "",
"dst": "a.1.2",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "actor",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 36,
"labelHeight": 21,
"labelPosition": "OUTSIDE_BOTTOM_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 475,
"y": 999
},
{
"x": 85,
"y": 999
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(a.1 -> b.3)[0]",
"src": "a.1",
"srcArrow": "none",
"srcLabel": "",
"dst": "b.3",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 81,
"y": 1129
},
{
"x": 469,
"y": 1129
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(a -- )[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "a-lifeline-end-2251863791",
"dstArrow": "none",
"dstLabel": "",
"opacity": 1,
"strokeDash": 8,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 75,
"y": 219
},
{
"x": 75,
"y": 1209
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(b -- )[0]",
"src": "b",
"srcArrow": "none",
"srcLabel": "",
"dst": "b-lifeline-end-668380428",
"dstArrow": "none",
"dstLabel": "",
"opacity": 1,
"strokeDash": 8,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 475,
"y": 219
},
{
"x": 475,
"y": 1209
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 472 KiB

View file

@ -0,0 +1,658 @@
{
"name": "",
"shapes": [
{
"id": "a",
"type": "",
"pos": {
"x": 0,
"y": 50
},
"width": 150,
"height": 169,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#E3E9FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "a",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 12,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "b",
"type": "",
"pos": {
"x": 400,
"y": 52
},
"width": 150,
"height": 167,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#E3E9FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "b",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "b.1",
"type": "rectangle",
"pos": {
"x": 469,
"y": 673
},
"width": 12,
"height": 228,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#EDF0FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 24,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 15,
"labelHeight": 36,
"zIndex": 1,
"level": 2
},
{
"id": "b.1.2",
"type": "rectangle",
"pos": {
"x": 465,
"y": 803
},
"width": 20,
"height": 82,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"zIndex": 1,
"level": 3
},
{
"id": "a.1",
"type": "rectangle",
"pos": {
"x": 69,
"y": 967
},
"width": 12,
"height": 178,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#EDF0FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 24,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 15,
"labelHeight": 36,
"zIndex": 1,
"level": 2
},
{
"id": "a.1.2",
"type": "rectangle",
"pos": {
"x": 65,
"y": 983
},
"width": 20,
"height": 80,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#F7F8FE",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"zIndex": 1,
"level": 3
},
{
"id": "b.3",
"type": "rectangle",
"pos": {
"x": 469,
"y": 1113
},
"width": 12,
"height": 80,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "#EDF0FD",
"stroke": "#0D32B2",
"shadow": false,
"3d": false,
"multiple": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#0A0F25",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 13,
"labelHeight": 26,
"zIndex": 1,
"level": 2
}
],
"connections": [
{
"id": "(a -> a)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "a",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "a self edge here",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 103,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 75,
"y": 349
},
{
"x": 155,
"y": 349
},
{
"x": 155,
"y": 429
},
{
"x": 75,
"y": 429
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(a -> b)[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "between actors",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 102,
"labelHeight": 21,
"labelPosition": "OUTSIDE_TOP_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 75,
"y": 479
},
{
"x": 475,
"y": 479
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(b -> b.1)[0]",
"src": "b",
"srcArrow": "none",
"srcLabel": "",
"dst": "b.1",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "to descendant",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 94,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 475,
"y": 609
},
{
"x": 555,
"y": 609
},
{
"x": 555,
"y": 689
},
{
"x": 481,
"y": 689
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "b.(1 -> 1.2)[0]",
"src": "b.1",
"srcArrow": "none",
"srcLabel": "",
"dst": "b.1.2",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "to deeper descendant",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 143,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 481,
"y": 739
},
{
"x": 555,
"y": 739
},
{
"x": 555,
"y": 819
},
{
"x": 485,
"y": 819
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(b.1.2 -> b)[0]",
"src": "b.1.2",
"srcArrow": "none",
"srcLabel": "",
"dst": "b",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "to parent",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 62,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 485,
"y": 869
},
{
"x": 555,
"y": 869
},
{
"x": 555,
"y": 949
},
{
"x": 475,
"y": 949
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(b -> a.1.2)[0]",
"src": "b",
"srcArrow": "none",
"srcLabel": "",
"dst": "a.1.2",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "actor",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 36,
"labelHeight": 21,
"labelPosition": "OUTSIDE_BOTTOM_CENTER",
"labelPercentage": 0,
"route": [
{
"x": 475,
"y": 999
},
{
"x": 85,
"y": 999
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(a.1 -> b.3)[0]",
"src": "a.1",
"srcArrow": "none",
"srcLabel": "",
"dst": "b.3",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 81,
"y": 1129
},
{
"x": 469,
"y": 1129
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 2
},
{
"id": "(a -- )[0]",
"src": "a",
"srcArrow": "none",
"srcLabel": "",
"dst": "a-lifeline-end-2251863791",
"dstArrow": "none",
"dstLabel": "",
"opacity": 1,
"strokeDash": 8,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 75,
"y": 219
},
{
"x": 75,
"y": 1209
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(b -- )[0]",
"src": "b",
"srcArrow": "none",
"srcLabel": "",
"dst": "b-lifeline-end-668380428",
"dstArrow": "none",
"dstLabel": "",
"opacity": 1,
"strokeDash": 8,
"strokeWidth": 2,
"stroke": "#0D32B2",
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "#676C7E",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 475,
"y": 219
},
{
"x": 475,
"y": 1209
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 472 KiB

View file

@ -619,7 +619,7 @@
}, },
{ {
"x": 81.5, "x": 81.5,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -658,7 +658,7 @@
}, },
{ {
"x": 555, "x": 555,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -697,7 +697,7 @@
}, },
{ {
"x": 1022, "x": 1022,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -736,7 +736,7 @@
}, },
{ {
"x": 1489, "x": 1489,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -775,7 +775,7 @@
}, },
{ {
"x": 1982, "x": 1982,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 474 KiB

After

Width:  |  Height:  |  Size: 474 KiB

View file

@ -619,7 +619,7 @@
}, },
{ {
"x": 81.5, "x": 81.5,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -658,7 +658,7 @@
}, },
{ {
"x": 555, "x": 555,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -697,7 +697,7 @@
}, },
{ {
"x": 1022, "x": 1022,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -736,7 +736,7 @@
}, },
{ {
"x": 1489, "x": 1489,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,
@ -775,7 +775,7 @@
}, },
{ {
"x": 1982, "x": 1982,
"y": 1718 "y": 1668
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 474 KiB

After

Width:  |  Height:  |  Size: 474 KiB

View file

@ -1193,7 +1193,7 @@
}, },
{ {
"x": 75, "x": 75,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1232,7 +1232,7 @@
}, },
{ {
"x": 500, "x": 500,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1271,7 +1271,7 @@
}, },
{ {
"x": 925, "x": 925,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1310,7 +1310,7 @@
}, },
{ {
"x": 1343, "x": 1343,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1349,7 +1349,7 @@
}, },
{ {
"x": 1766, "x": 1766,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1388,7 +1388,7 @@
}, },
{ {
"x": 2194.5, "x": 2194.5,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 476 KiB

After

Width:  |  Height:  |  Size: 476 KiB

View file

@ -1193,7 +1193,7 @@
}, },
{ {
"x": 75, "x": 75,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1232,7 +1232,7 @@
}, },
{ {
"x": 500, "x": 500,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1271,7 +1271,7 @@
}, },
{ {
"x": 925, "x": 925,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1310,7 +1310,7 @@
}, },
{ {
"x": 1343, "x": 1343,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1349,7 +1349,7 @@
}, },
{ {
"x": 1766, "x": 1766,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,
@ -1388,7 +1388,7 @@
}, },
{ {
"x": 2194.5, "x": 2194.5,
"y": 2010 "y": 1960
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 476 KiB

After

Width:  |  Height:  |  Size: 476 KiB

View file

@ -48,7 +48,7 @@
"y": 314 "y": 314
}, },
"width": 2293, "width": 2293,
"height": 2046, "height": 1996,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -87,7 +87,7 @@
"y": 264 "y": 264
}, },
"width": 2393, "width": 2393,
"height": 2146, "height": 2096,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -126,7 +126,7 @@
"y": 317 "y": 317
}, },
"width": 2293, "width": 2293,
"height": 2041, "height": 1991,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -162,10 +162,10 @@
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 558, "x": 558,
"y": 2510 "y": 2460
}, },
"width": 2493, "width": 2493,
"height": 1491, "height": 1441,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -201,10 +201,10 @@
"type": "sequence_diagram", "type": "sequence_diagram",
"pos": { "pos": {
"x": 668, "x": 668,
"y": 2560 "y": 2510
}, },
"width": 2293, "width": 2293,
"height": 1391, "height": 1341,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -240,7 +240,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 668, "x": 668,
"y": 2653 "y": 2603
}, },
"width": 150, "width": 150,
"height": 128, "height": 128,
@ -279,7 +279,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 1068, "x": 1068,
"y": 2655 "y": 2605
}, },
"width": 160, "width": 160,
"height": 126, "height": 126,
@ -318,7 +318,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 1478, "x": 1478,
"y": 2655 "y": 2605
}, },
"width": 186, "width": 186,
"height": 126, "height": 126,
@ -357,7 +357,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 1914, "x": 1914,
"y": 2641 "y": 2591
}, },
"width": 150, "width": 150,
"height": 140, "height": 140,
@ -396,7 +396,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 2314, "x": 2314,
"y": 2655 "y": 2605
}, },
"width": 197, "width": 197,
"height": 126, "height": 126,
@ -435,7 +435,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 2761, "x": 2761,
"y": 2655 "y": 2605
}, },
"width": 200, "width": 200,
"height": 126, "height": 126,
@ -1778,7 +1778,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 3612, "x": 3612,
"y": 3193 "y": 3118
}, },
"width": 172, "width": 172,
"height": 126, "height": 126,
@ -1817,7 +1817,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2847, "x": 2847,
"y": 2895 "y": 2845
}, },
"width": 28, "width": 28,
"height": 80, "height": 80,
@ -1855,7 +1855,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1975, "x": 1975,
"y": 2879 "y": 2829
}, },
"width": 28, "width": 28,
"height": 698, "height": 698,
@ -1893,7 +1893,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1971, "x": 1971,
"y": 2895 "y": 2845
}, },
"width": 36, "width": 36,
"height": 162, "height": 162,
@ -1931,7 +1931,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1557, "x": 1557,
"y": 2993 "y": 2943
}, },
"width": 28, "width": 28,
"height": 340, "height": 340,
@ -1969,7 +1969,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1553, "x": 1553,
"y": 3009 "y": 2959
}, },
"width": 36, "width": 36,
"height": 308, "height": 308,
@ -2007,7 +2007,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1549, "x": 1549,
"y": 3025 "y": 2975
}, },
"width": 44, "width": 44,
"height": 162, "height": 162,
@ -2045,7 +2045,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1134, "x": 1134,
"y": 3107 "y": 3057
}, },
"width": 28, "width": 28,
"height": 388, "height": 388,
@ -2083,7 +2083,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1130, "x": 1130,
"y": 3123 "y": 3073
}, },
"width": 36, "width": 36,
"height": 356, "height": 356,
@ -2121,7 +2121,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1126, "x": 1126,
"y": 3139 "y": 3089
}, },
"width": 44, "width": 44,
"height": 324, "height": 324,
@ -2159,7 +2159,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 1122, "x": 1122,
"y": 3155 "y": 3105
}, },
"width": 52, "width": 52,
"height": 292, "height": 292,
@ -2197,7 +2197,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2398, "x": 2398,
"y": 3351 "y": 3301
}, },
"width": 28, "width": 28,
"height": 420, "height": 420,
@ -2235,7 +2235,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2394, "x": 2394,
"y": 3367 "y": 3317
}, },
"width": 36, "width": 36,
"height": 388, "height": 388,
@ -2273,7 +2273,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2390, "x": 2390,
"y": 3383 "y": 3333
}, },
"width": 44, "width": 44,
"height": 356, "height": 356,
@ -2311,7 +2311,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2386, "x": 2386,
"y": 3399 "y": 3349
}, },
"width": 52, "width": 52,
"height": 324, "height": 324,
@ -2349,7 +2349,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2382, "x": 2382,
"y": 3415 "y": 3365
}, },
"width": 60, "width": 60,
"height": 292, "height": 292,
@ -2387,7 +2387,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 729, "x": 729,
"y": 3545 "y": 3495
}, },
"width": 28, "width": 28,
"height": 80, "height": 80,
@ -2425,7 +2425,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2847, "x": 2847,
"y": 3805 "y": 3755
}, },
"width": 28, "width": 28,
"height": 80, "height": 80,
@ -3597,7 +3597,19 @@
"route": [ "route": [
{ {
"x": 3697.5, "x": 3697.5,
"y": 2360 "y": 2310
},
{
"x": 3697.5,
"y": 2350
},
{
"x": 3697.5,
"y": 2370
},
{
"x": 3697.5,
"y": 2385
}, },
{ {
"x": 3697.5, "x": 3697.5,
@ -3605,23 +3617,11 @@
}, },
{ {
"x": 3697.5, "x": 3697.5,
"y": 2420 "y": 2591.5
}, },
{ {
"x": 3697.5, "x": 3697.5,
"y": 2435 "y": 3117.5
},
{
"x": 3697.5,
"y": 2450
},
{
"x": 3697.5,
"y": 2646.5
},
{
"x": 3697.5,
"y": 3192.5
} }
], ],
"isCurve": true, "isCurve": true,
@ -3657,31 +3657,31 @@
"route": [ "route": [
{ {
"x": 1196.5, "x": 1196.5,
"y": 2358.5 "y": 2308.5
}, },
{ {
"x": 1196.5, "x": 1196.5,
"y": 2399.7 "y": 2349.7
}, },
{ {
"x": 1196.5, "x": 1196.5,
"y": 2420 "y": 2370
}, },
{ {
"x": 1196.5, "x": 1196.5,
"y": 2435 "y": 2385
}, },
{ {
"x": 1196.5, "x": 1196.5,
"y": 2450 "y": 2400
}, },
{ {
"x": 1204.7, "x": 1205.1,
"y": 2520 "y": 2470
}, },
{ {
"x": 1237.5, "x": 1239.5,
"y": 2560 "y": 2510
} }
], ],
"isCurve": true, "isCurve": true,
@ -3737,35 +3737,35 @@
}, },
{ {
"x": 2433, "x": 2433,
"y": 478.6 "y": 473.6
}, },
{ {
"x": 2433, "x": 2433,
"y": 800.5 "y": 788
}, },
{ {
"x": 2433, "x": 2433,
"y": 1122.4 "y": 1102.4
}, },
{ {
"x": 2433, "x": 2433,
"y": 1551.6 "y": 1521.6
}, },
{ {
"x": 2433, "x": 2433,
"y": 1873.5 "y": 1836
}, },
{ {
"x": 2433, "x": 2433,
"y": 2195.4 "y": 2150.4
}, },
{ {
"x": 2433, "x": 2433,
"y": 2470 "y": 2420
}, },
{ {
"x": 2433, "x": 2433,
"y": 2510 "y": 2460
} }
], ],
"isCurve": true, "isCurve": true,
@ -3801,11 +3801,11 @@
"route": [ "route": [
{ {
"x": 2847, "x": 2847,
"y": 2911 "y": 2861
}, },
{ {
"x": 2007, "x": 2007,
"y": 2911 "y": 2861
} }
], ],
"animated": false, "animated": false,
@ -3840,11 +3840,11 @@
"route": [ "route": [
{ {
"x": 1971, "x": 1971,
"y": 3041 "y": 2991
}, },
{ {
"x": 1593, "x": 1593,
"y": 3041 "y": 2991
} }
], ],
"animated": false, "animated": false,
@ -3879,11 +3879,11 @@
"route": [ "route": [
{ {
"x": 1549, "x": 1549,
"y": 3171 "y": 3121
}, },
{ {
"x": 1174, "x": 1174,
"y": 3171 "y": 3121
} }
], ],
"animated": false, "animated": false,
@ -3918,11 +3918,11 @@
"route": [ "route": [
{ {
"x": 1975, "x": 1975,
"y": 3301 "y": 3251
}, },
{ {
"x": 1589, "x": 1589,
"y": 3301 "y": 3251
} }
], ],
"animated": false, "animated": false,
@ -3957,11 +3957,11 @@
"route": [ "route": [
{ {
"x": 1174, "x": 1174,
"y": 3431 "y": 3381
}, },
{ {
"x": 2382.5, "x": 2382.5,
"y": 3431 "y": 3381
} }
], ],
"animated": false, "animated": false,
@ -3996,11 +3996,11 @@
"route": [ "route": [
{ {
"x": 757, "x": 757,
"y": 3561 "y": 3511
}, },
{ {
"x": 1975, "x": 1975,
"y": 3561 "y": 3511
} }
], ],
"animated": false, "animated": false,
@ -4035,11 +4035,11 @@
"route": [ "route": [
{ {
"x": 2382.5, "x": 2382.5,
"y": 3691 "y": 3641
}, },
{ {
"x": 743, "x": 743,
"y": 3691 "y": 3641
} }
], ],
"animated": false, "animated": false,
@ -4074,11 +4074,11 @@
"route": [ "route": [
{ {
"x": 743, "x": 743,
"y": 3821 "y": 3771
}, },
{ {
"x": 2847, "x": 2847,
"y": 3821 "y": 3771
} }
], ],
"animated": false, "animated": false,
@ -4117,7 +4117,7 @@
}, },
{ {
"x": 2626, "x": 2626,
"y": 2360 "y": 2310
} }
], ],
"animated": false, "animated": false,
@ -4156,7 +4156,7 @@
}, },
{ {
"x": 3051, "x": 3051,
"y": 2360 "y": 2310
} }
], ],
"animated": false, "animated": false,
@ -4195,7 +4195,7 @@
}, },
{ {
"x": 3476, "x": 3476,
"y": 2360 "y": 2310
} }
], ],
"animated": false, "animated": false,
@ -4234,7 +4234,7 @@
}, },
{ {
"x": 3894, "x": 3894,
"y": 2360 "y": 2310
} }
], ],
"animated": false, "animated": false,
@ -4273,7 +4273,7 @@
}, },
{ {
"x": 4317, "x": 4317,
"y": 2360 "y": 2310
} }
], ],
"animated": false, "animated": false,
@ -4312,7 +4312,7 @@
}, },
{ {
"x": 4745.5, "x": 4745.5,
"y": 2360 "y": 2310
} }
], ],
"animated": false, "animated": false,
@ -4351,7 +4351,7 @@
}, },
{ {
"x": 125, "x": 125,
"y": 2358 "y": 2308
} }
], ],
"animated": false, "animated": false,
@ -4390,7 +4390,7 @@
}, },
{ {
"x": 550, "x": 550,
"y": 2358 "y": 2308
} }
], ],
"animated": false, "animated": false,
@ -4429,7 +4429,7 @@
}, },
{ {
"x": 975, "x": 975,
"y": 2358 "y": 2308
} }
], ],
"animated": false, "animated": false,
@ -4468,7 +4468,7 @@
}, },
{ {
"x": 1393, "x": 1393,
"y": 2358 "y": 2308
} }
], ],
"animated": false, "animated": false,
@ -4507,7 +4507,7 @@
}, },
{ {
"x": 1816, "x": 1816,
"y": 2358 "y": 2308
} }
], ],
"animated": false, "animated": false,
@ -4546,7 +4546,7 @@
}, },
{ {
"x": 2244.5, "x": 2244.5,
"y": 2358 "y": 2308
} }
], ],
"animated": false, "animated": false,
@ -4581,11 +4581,11 @@
"route": [ "route": [
{ {
"x": 743, "x": 743,
"y": 2781 "y": 2731
}, },
{ {
"x": 743, "x": 743,
"y": 3951 "y": 3851
} }
], ],
"animated": false, "animated": false,
@ -4620,11 +4620,11 @@
"route": [ "route": [
{ {
"x": 1148, "x": 1148,
"y": 2781 "y": 2731
}, },
{ {
"x": 1148, "x": 1148,
"y": 3951 "y": 3851
} }
], ],
"animated": false, "animated": false,
@ -4659,11 +4659,11 @@
"route": [ "route": [
{ {
"x": 1571, "x": 1571,
"y": 2781 "y": 2731
}, },
{ {
"x": 1571, "x": 1571,
"y": 3951 "y": 3851
} }
], ],
"animated": false, "animated": false,
@ -4698,11 +4698,11 @@
"route": [ "route": [
{ {
"x": 1989, "x": 1989,
"y": 2781 "y": 2731
}, },
{ {
"x": 1989, "x": 1989,
"y": 3951 "y": 3851
} }
], ],
"animated": false, "animated": false,
@ -4737,11 +4737,11 @@
"route": [ "route": [
{ {
"x": 2412.5, "x": 2412.5,
"y": 2781 "y": 2731
}, },
{ {
"x": 2412.5, "x": 2412.5,
"y": 3951 "y": 3851
} }
], ],
"animated": false, "animated": false,
@ -4776,11 +4776,11 @@
"route": [ "route": [
{ {
"x": 2861, "x": 2861,
"y": 2781 "y": 2731
}, },
{ {
"x": 2861, "x": 2861,
"y": 3951 "y": 3851
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 498 KiB

View file

@ -48,7 +48,7 @@
"y": 364 "y": 364
}, },
"width": 2293, "width": 2293,
"height": 2046, "height": 1996,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -87,7 +87,7 @@
"y": 291 "y": 291
}, },
"width": 2443, "width": 2443,
"height": 2191, "height": 2141,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -126,7 +126,7 @@
"y": 366 "y": 366
}, },
"width": 2293, "width": 2293,
"height": 2041, "height": 1991,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -162,10 +162,10 @@
"type": "queue", "type": "queue",
"pos": { "pos": {
"x": 2325, "x": 2325,
"y": 2592 "y": 2542
}, },
"width": 2443, "width": 2443,
"height": 1541, "height": 1491,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -201,10 +201,10 @@
"type": "sequence_diagram", "type": "sequence_diagram",
"pos": { "pos": {
"x": 2400, "x": 2400,
"y": 2667 "y": 2617
}, },
"width": 2293, "width": 2293,
"height": 1391, "height": 1341,
"opacity": 1, "opacity": 1,
"strokeDash": 0, "strokeDash": 0,
"strokeWidth": 2, "strokeWidth": 2,
@ -240,7 +240,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 2400, "x": 2400,
"y": 2760 "y": 2710
}, },
"width": 150, "width": 150,
"height": 128, "height": 128,
@ -279,7 +279,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 2800, "x": 2800,
"y": 2762 "y": 2712
}, },
"width": 160, "width": 160,
"height": 126, "height": 126,
@ -318,7 +318,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 3210, "x": 3210,
"y": 2762 "y": 2712
}, },
"width": 186, "width": 186,
"height": 126, "height": 126,
@ -357,7 +357,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 3646, "x": 3646,
"y": 2748 "y": 2698
}, },
"width": 150, "width": 150,
"height": 140, "height": 140,
@ -396,7 +396,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 4046, "x": 4046,
"y": 2762 "y": 2712
}, },
"width": 197, "width": 197,
"height": 126, "height": 126,
@ -435,7 +435,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 4493, "x": 4493,
"y": 2762 "y": 2712
}, },
"width": 200, "width": 200,
"height": 126, "height": 126,
@ -1778,7 +1778,7 @@
"type": "", "type": "",
"pos": { "pos": {
"x": 1073, "x": 1073,
"y": 2592 "y": 2542
}, },
"width": 172, "width": 172,
"height": 126, "height": 126,
@ -1817,7 +1817,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4579, "x": 4579,
"y": 3002 "y": 2952
}, },
"width": 28, "width": 28,
"height": 80, "height": 80,
@ -1855,7 +1855,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 3707, "x": 3707,
"y": 2986 "y": 2936
}, },
"width": 28, "width": 28,
"height": 698, "height": 698,
@ -1893,7 +1893,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 3703, "x": 3703,
"y": 3002 "y": 2952
}, },
"width": 36, "width": 36,
"height": 162, "height": 162,
@ -1931,7 +1931,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 3289, "x": 3289,
"y": 3100 "y": 3050
}, },
"width": 28, "width": 28,
"height": 340, "height": 340,
@ -1969,7 +1969,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 3285, "x": 3285,
"y": 3116 "y": 3066
}, },
"width": 36, "width": 36,
"height": 308, "height": 308,
@ -2007,7 +2007,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 3281, "x": 3281,
"y": 3132 "y": 3082
}, },
"width": 44, "width": 44,
"height": 162, "height": 162,
@ -2045,7 +2045,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2866, "x": 2866,
"y": 3214 "y": 3164
}, },
"width": 28, "width": 28,
"height": 388, "height": 388,
@ -2083,7 +2083,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2862, "x": 2862,
"y": 3230 "y": 3180
}, },
"width": 36, "width": 36,
"height": 356, "height": 356,
@ -2121,7 +2121,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2858, "x": 2858,
"y": 3246 "y": 3196
}, },
"width": 44, "width": 44,
"height": 324, "height": 324,
@ -2159,7 +2159,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2854, "x": 2854,
"y": 3262 "y": 3212
}, },
"width": 52, "width": 52,
"height": 292, "height": 292,
@ -2197,7 +2197,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4130, "x": 4130,
"y": 3458 "y": 3408
}, },
"width": 28, "width": 28,
"height": 420, "height": 420,
@ -2235,7 +2235,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4126, "x": 4126,
"y": 3474 "y": 3424
}, },
"width": 36, "width": 36,
"height": 388, "height": 388,
@ -2273,7 +2273,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4122, "x": 4122,
"y": 3490 "y": 3440
}, },
"width": 44, "width": 44,
"height": 356, "height": 356,
@ -2311,7 +2311,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4118, "x": 4118,
"y": 3506 "y": 3456
}, },
"width": 52, "width": 52,
"height": 324, "height": 324,
@ -2349,7 +2349,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4114, "x": 4114,
"y": 3522 "y": 3472
}, },
"width": 60, "width": 60,
"height": 292, "height": 292,
@ -2387,7 +2387,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 2461, "x": 2461,
"y": 3652 "y": 3602
}, },
"width": 28, "width": 28,
"height": 80, "height": 80,
@ -2425,7 +2425,7 @@
"type": "rectangle", "type": "rectangle",
"pos": { "pos": {
"x": 4579, "x": 4579,
"y": 3912 "y": 3862
}, },
"width": 28, "width": 28,
"height": 80, "height": 80,
@ -3587,11 +3587,11 @@
"route": [ "route": [
{ {
"x": 1158.5, "x": 1158.5,
"y": 2409.5 "y": 2359.5
}, },
{ {
"x": 1158.5, "x": 1158.5,
"y": 2592 "y": 2542
} }
], ],
"animated": false, "animated": false,
@ -3626,11 +3626,11 @@
"route": [ "route": [
{ {
"x": 3546.5, "x": 3546.5,
"y": 2407 "y": 2357
}, },
{ {
"x": 3546.5, "x": 3546.5,
"y": 2667 "y": 2617
} }
], ],
"animated": false, "animated": false,
@ -3677,15 +3677,15 @@
}, },
{ {
"x": 4778, "x": 4778,
"y": 2537 "y": 2487
}, },
{ {
"x": 3556.5, "x": 3556.5,
"y": 2537 "y": 2487
}, },
{ {
"x": 3556.5, "x": 3556.5,
"y": 2592 "y": 2542
} }
], ],
"animated": false, "animated": false,
@ -3720,11 +3720,11 @@
"route": [ "route": [
{ {
"x": 4579, "x": 4579,
"y": 3018 "y": 2968
}, },
{ {
"x": 3739, "x": 3739,
"y": 3018 "y": 2968
} }
], ],
"animated": false, "animated": false,
@ -3759,11 +3759,11 @@
"route": [ "route": [
{ {
"x": 3703, "x": 3703,
"y": 3148 "y": 3098
}, },
{ {
"x": 3325, "x": 3325,
"y": 3148 "y": 3098
} }
], ],
"animated": false, "animated": false,
@ -3798,11 +3798,11 @@
"route": [ "route": [
{ {
"x": 3281, "x": 3281,
"y": 3278 "y": 3228
}, },
{ {
"x": 2906, "x": 2906,
"y": 3278 "y": 3228
} }
], ],
"animated": false, "animated": false,
@ -3837,11 +3837,11 @@
"route": [ "route": [
{ {
"x": 3707, "x": 3707,
"y": 3408 "y": 3358
}, },
{ {
"x": 3321, "x": 3321,
"y": 3408 "y": 3358
} }
], ],
"animated": false, "animated": false,
@ -3876,11 +3876,11 @@
"route": [ "route": [
{ {
"x": 2906, "x": 2906,
"y": 3538 "y": 3488
}, },
{ {
"x": 4114.5, "x": 4114.5,
"y": 3538 "y": 3488
} }
], ],
"animated": false, "animated": false,
@ -3915,11 +3915,11 @@
"route": [ "route": [
{ {
"x": 2489, "x": 2489,
"y": 3668 "y": 3618
}, },
{ {
"x": 3707, "x": 3707,
"y": 3668 "y": 3618
} }
], ],
"animated": false, "animated": false,
@ -3954,11 +3954,11 @@
"route": [ "route": [
{ {
"x": 4114.5, "x": 4114.5,
"y": 3798 "y": 3748
}, },
{ {
"x": 2475, "x": 2475,
"y": 3798 "y": 3748
} }
], ],
"animated": false, "animated": false,
@ -3993,11 +3993,11 @@
"route": [ "route": [
{ {
"x": 2475, "x": 2475,
"y": 3928 "y": 3878
}, },
{ {
"x": 4579, "x": 4579,
"y": 3928 "y": 3878
} }
], ],
"animated": false, "animated": false,
@ -4036,7 +4036,7 @@
}, },
{ {
"x": 87, "x": 87,
"y": 2410 "y": 2360
} }
], ],
"animated": false, "animated": false,
@ -4075,7 +4075,7 @@
}, },
{ {
"x": 512, "x": 512,
"y": 2410 "y": 2360
} }
], ],
"animated": false, "animated": false,
@ -4114,7 +4114,7 @@
}, },
{ {
"x": 937, "x": 937,
"y": 2410 "y": 2360
} }
], ],
"animated": false, "animated": false,
@ -4153,7 +4153,7 @@
}, },
{ {
"x": 1355, "x": 1355,
"y": 2410 "y": 2360
} }
], ],
"animated": false, "animated": false,
@ -4192,7 +4192,7 @@
}, },
{ {
"x": 1778, "x": 1778,
"y": 2410 "y": 2360
} }
], ],
"animated": false, "animated": false,
@ -4231,7 +4231,7 @@
}, },
{ {
"x": 2206.5, "x": 2206.5,
"y": 2410 "y": 2360
} }
], ],
"animated": false, "animated": false,
@ -4270,7 +4270,7 @@
}, },
{ {
"x": 2475, "x": 2475,
"y": 2407 "y": 2357
} }
], ],
"animated": false, "animated": false,
@ -4309,7 +4309,7 @@
}, },
{ {
"x": 2900, "x": 2900,
"y": 2407 "y": 2357
} }
], ],
"animated": false, "animated": false,
@ -4348,7 +4348,7 @@
}, },
{ {
"x": 3325, "x": 3325,
"y": 2407 "y": 2357
} }
], ],
"animated": false, "animated": false,
@ -4387,7 +4387,7 @@
}, },
{ {
"x": 3743, "x": 3743,
"y": 2407 "y": 2357
} }
], ],
"animated": false, "animated": false,
@ -4426,7 +4426,7 @@
}, },
{ {
"x": 4166, "x": 4166,
"y": 2407 "y": 2357
} }
], ],
"animated": false, "animated": false,
@ -4465,7 +4465,7 @@
}, },
{ {
"x": 4594.5, "x": 4594.5,
"y": 2407 "y": 2357
} }
], ],
"animated": false, "animated": false,
@ -4500,11 +4500,11 @@
"route": [ "route": [
{ {
"x": 2475, "x": 2475,
"y": 2888 "y": 2838
}, },
{ {
"x": 2475, "x": 2475,
"y": 4058 "y": 3958
} }
], ],
"animated": false, "animated": false,
@ -4539,11 +4539,11 @@
"route": [ "route": [
{ {
"x": 2880, "x": 2880,
"y": 2888 "y": 2838
}, },
{ {
"x": 2880, "x": 2880,
"y": 4058 "y": 3958
} }
], ],
"animated": false, "animated": false,
@ -4578,11 +4578,11 @@
"route": [ "route": [
{ {
"x": 3303, "x": 3303,
"y": 2888 "y": 2838
}, },
{ {
"x": 3303, "x": 3303,
"y": 4058 "y": 3958
} }
], ],
"animated": false, "animated": false,
@ -4617,11 +4617,11 @@
"route": [ "route": [
{ {
"x": 3721, "x": 3721,
"y": 2888 "y": 2838
}, },
{ {
"x": 3721, "x": 3721,
"y": 4058 "y": 3958
} }
], ],
"animated": false, "animated": false,
@ -4656,11 +4656,11 @@
"route": [ "route": [
{ {
"x": 4144.5, "x": 4144.5,
"y": 2888 "y": 2838
}, },
{ {
"x": 4144.5, "x": 4144.5,
"y": 4058 "y": 3958
} }
], ],
"animated": false, "animated": false,
@ -4695,11 +4695,11 @@
"route": [ "route": [
{ {
"x": 4593, "x": 4593,
"y": 2888 "y": 2838
}, },
{ {
"x": 4593, "x": 4593,
"y": 4058 "y": 3958
} }
], ],
"animated": false, "animated": false,

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 498 KiB