PlantUML: управление формой и направлением стрелки

С помощью PlantUML я создал небольшую диаграмму состояний для своей документации:

@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

(кстати: PlantUML — это очень хороший инструмент для создания графического вывода из текстового описания, встроенного встроенного документа разметки, такого как asciidoc или reStructuredText)

Вот как отображается данная диаграмма состояний: введите здесь описание изображения

Как видите, схема нарисована немного небрежно.

  • стрелка перехода «Выключение питания» не прямая
  • Начальное/Конечное состояние меняются местами
  • стрелка от «Powered» к «Starting» выглядит так, как будто она каким-то образом связана с переходом «Power Off»
  • Состояние «Запуск» и «Работа» не совпадают

Как описано в документации, вы имеете некоторое влияние на направление стрелки, писать -left-> или -l-> для краткости, а не просто -->.

Есть ли способ повлиять на то, как как и где рисуются стрелки? Мне бы очень хотелось, чтобы рисовались только горизонтальные или вертикальные прямые линии.


person frans    schedule 08.06.2016    source источник


Ответы (2)


PlantUML не был разработан для предоставления хороших прямых стрелок, когда наложено много направлений. Использование макета по умолчанию дает мне самый чистый и читаемый результат.

Вот пример с тем же смыслом, но без проблем с версткой:

@startuml

state Powered {
  [*] --> Starting
  Starting --> Operational
}
[*] --> Powered : Power On
Powered --> [*] : Power Off
Powered --> Powered : Reset
Powered --> Powered : Fatal Error

@enduml

введите здесь описание изображения

РЕДАКТИРОВАТЬ: я также изменил ваш переход Powered --> Starting : Fatal Error на: Powered --> Powered : Fatal Error, что лучше выражает то, что из любого состояния в Powered событие Fatal Error перезапустится в подсостоянии Starting.

В качестве альтернативы два утверждения:

Powered --> Powered : Reset
Powered --> Powered : Fatal Error

можно объединить в:

Powered --> Powered : Reset, Fatal Error

см. спецификацию формата OMG UML 2.5, раздел 14.2.4.9, стр. 329.

[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
person PaulH    schedule 21.06.2016
comment
Может быть, я просто еще не видел смысла, но мне кажется, что вы просто упрощаете модель, чтобы избежать описанной проблемы. В моем случае мне нужен переход Powered --> Starting, потому что он говорит мне, что из любого состояния, содержащегося в Powered, я могу снова войти в Starting (например, из-за ошибки). Так что +1 за рабочий пример, но я сомневаюсь, что этот подход работает для более сложных моделей. - person frans; 22.06.2016
comment
@frans Я адаптировал свой ответ, включив в него обработку Fatal Error. - person PaulH; 22.06.2016
comment
Вы можете рассмотреть возможность использования Umple. См. этот пример: cruise.eecs.uottawa.ca/umpleonline/? пример=руководствопримеры/ - person PaulH; 22.06.2016

Чтобы ответить на исходный вопрос для будущих читателей:

Чтобы рисовать только горизонтальные или вертикальные прямые линии, вы можете использовать skinparam linetype ortho.

Чтобы сделать все линии прямыми (но не обязательно горизонтальными или вертикальными), вы можете использовать skinparam linetype polyline.

(источник)

person gebi    schedule 15.11.2019