Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

plantUML: swimlanes and overlapping connectors

Tags:

plantuml

I'm using plantUML swimlanes to visualize internal processes but unfortunately encounter overlapping lines when I want to display processes that are executed and detach.

I'm using this:

@startuml

title something

|#dee4e8|p1|
|#c4c9cd|p2|
|#daf0fe|Backend|

|Backend|
start
    :something;
    if (open) then (yes)
        :generate open data;
        split
            #3f3:Mail to p1\nMAIL ID: **3010**|
            |p1|
            :Receive Mail **3010**;
            detach
        split again
            |Backend|
            #3f3:Mail to p2\nMAIL ID: **3006**|
            |p2|
            :Receive Mail **3006**;
            detach
        end split
    endif
    |Backend|
    #HotPink:something else>

stop

@enduml

and get: enter image description here

I would like to have a non overlapping connection to the receive mail activity that i more looks like if I add an empty activity before sending the second mail:

enter image description here

It's also possible to do this in a sequence but I don't have a clue how I can detach the receive Mail activities and connect the "Mail to p1 / p2" with each other without making it an if statement.

like image 860
Meiko Watu Avatar asked Jun 25 '18 09:06

Meiko Watu


1 Answers

You can use the same trick that you used to get the "else" part of the if to appear below the other steps.

Note that you are not actually using the correct else semantics (which would position the else branch to the side), but your "something else" is actually the continuation after the endif, just there are no links from the email actions due to the detach.

You can use the same trick to make p2 appear below p1. i.e. rather than have p2 as part of the split, move it after the end split. This will make it appear below the p1 part, but there will be no connector from p1 due to the detach.

@startuml

title something

|#dee4e8|p1|
|#c4c9cd|p2|
|#daf0fe|Backend|

|Backend|
start
    :something;
    if (open) then (yes)
        :generate open data;
        split
            #3f3:Mail to p1\nMAIL ID: **3010**|
            |p1|
            :Receive Mail **3010**;
            detach
        split again
            |Backend|
            #3f3:Mail to p2\nMAIL ID: **3006**|
        end split
        |p2|
        :Receive Mail **3006**;
        detach
    endif
    |Backend|
    #HotPink:something else>
stop
@enduml

enter image description here

like image 92
Sly Gryphon Avatar answered Sep 20 '22 10:09

Sly Gryphon