With PlantUML I've created a little state chart for my documentation:
@startuml
state Powered {
[*] -d-> Starting
Powered -r-> Starting : Some error
Starting -d-> Operational
}
[*] -d-> Powered : Power On
Powered -u-> [*] : Power Off
Powered -d-> Powered : Reset
@enduml
(btw: PlantUML is a very nice tool to create graphical output from a textual description embedded embedded markup documents like asciidoc or reStructuredText)
This is what the given state diagram is rendered to:
As you can see the chart is drawn a bit sloppy
As the documentation describes you have some influence on the arrow direction by writing -left->
or -l->
for short rather than just -->
.
Is there a way to to influence the way how and where arrows are drawn? I'd really like to have only horizontal or vertical straight lines being drawn.
PlantUML has not been designed to provide nice straight arrows when many directions are imposed. Using default layout provides cleanest and most readable result to me.
Here is an example with the same meaning, but without layout issues:
@startuml
state Powered {
[*] --> Starting
Starting --> Operational
}
[*] --> Powered : Power On
Powered --> [*] : Power Off
Powered --> Powered : Reset
Powered --> Powered : Fatal Error
@enduml
EDIT: I also changed your Powered --> Starting : Fatal Error
transition to : Powered --> Powered : Fatal Error
, which better expresses that from any state within Powered, a Fatal Error event will restart at the Starting substate.
Alternatively the two statements:
Powered --> Powered : Reset
Powered --> Powered : Fatal Error
can be merged in:
Powered --> Powered : Reset, Fatal Error
see OMG UML 2.5 format specification section 14.2.4.9 page 329
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]