State Diagram

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.

Simple State

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>

Composite state

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>

Long name

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]

Concurrent state

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]

Arrow direction

You can use → for horizontal arrows. It is possible to force arrow's direction using the following syntax:

  • -down→ (default arrow)
  • -right→ or →
  • -left→
  • -up→

<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.

Note

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>

More in notes

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>

Skinparam

You can use the skinparam command to change colors and fonts for the drawing. You can use this command :

  • In the diagram definition, like any other commands,
  • In an included_file,
  • In a configuration file, provided in the command_line or the ANT_task.

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>

plantuml/state.txt · Last modified: 2014/12/03 00:51 (external edit)
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0