To be able to generate those diagram, you must have Graphviz_software installed on your machine in the default directory c:\Program Files\GraphvizX.XX or /usr/ bin/dot. You can have_a_look_here_if_you_have_installed_Graphviz_somewhere_else.
You can use [*] for the starting point and ending point of the state diagram. Use --> for arrows. <uml t=“state”>
[*] –> State1 State1 –> [*] State1 : this is a string State1 : this is another string
State1 → State2 State2 –> [*]
</uml>
A state can also be composite. You have to define it using the state keywords and brackets. <uml t=“state_001”> scale 350 width [*] –> NotShooting
state NotShooting {
[*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig
}
state Configuring {
[*] --> NewValueSelection NewValueSelection --> NewValuePreview : EvNewValue NewValuePreview --> NewValueSelection : EvNewValueRejected NewValuePreview --> NewValueSelection : EvNewValueSaved
state NewValuePreview {
State1 -> State2
}
} </uml>
You can also use the state keyword to use long description for states. <uml t=“long name”> scale 600 width
[*] → State1 State1 –> State2 : Succeeded State1 –> [*] : Aborted State2 –> State3 : Succeeded State2 –> [*] : Aborted state State3 {
state "Accumulate Enough Data\nLong State Name" as long1 long1 : Just a test [*] --> long1 long1 --> long1 : New Data long1 --> ProcessData : Enough Data
} State3 –> State3 : Failed State3 –> [*] : Succeeded / Save Result State3 –> [*] : Aborted
</uml> [imgp/state_002.png]
You can define concurrent state into a composite state using the – symbol as separator. <uml t=“concurrent state”> scale 800 width
[*] –> Active
state Active {
[*] -> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] -> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] -> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
</uml> [imgp/state_003.png]
You can use → for horizontal arrows. It is possible to force arrow's direction using the following syntax:
<uml t=“state_004”>
[*] -up→ First First -right→ Second Second –> Third Third -left→ Last
</uml> You can shorten the arrow by using only the first character of the direction (for example, -d- instead of -down-) or the two first characters (-do-). Please note that you should not abuse this functionality : Graphviz gives usually good results without tweaking.
You can also define notes using note left of, note right of, note top of, note bottom of keywords. You can also define notes on several lines. <uml t=“note”>
[*] –> Active Active –> Inactive
note left of Active : this is a short\nnote
note right of Inactive
A note can also be defined on several lines
end note
</uml> [imgp/state_005.png] You can also have floating notes. <uml t=“state_006”>
state foo note “This is a floating note” as N1
</uml>
You can put notes on composite states. <uml t=“state_007”>
[*] –> NotShooting
state “Not Shooting State” as NotShooting {
state "Idle mode" as Idle state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig
}
note right of NotShooting : This is a note on a composite state
</uml>
You can use the skinparam command to change colors and fonts for the drawing. You can use this command :
You can define specific color and fonts for stereotyped states. <uml t=“state_008”> skinparam backgroundColor LightYellow skinparam state {
StartColor MediumBlue EndColor Red BackgroundColor Peru BackgroundColor<<Warning>> Olive BorderColor Gray FontName Impact
}
[*] –> NotShooting
state “Not Shooting State” as NotShooting {
state "Idle mode" as Idle <<Warning>> state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig
}
NotShooting –> [*] </uml>