Диаграмма активности

Старый синтаксис диаграммы активности имеет несколько ограничений и недостатков (например, её сложно поддерживать).

На замену этому старому синтаксису здесь представлен новый синтаксис. Хотя старый синтаксис будет по прежнему поддерживаться, чтобы обеспечивать обратную совместимость, для новых проектов пользователям рекомендуется переходить на этот новый синтаксис.

Здесь можно ознакомиться с полезными дополнениями, которые можно использовать в любой из поддерживаемых диаграмм:

Простая активность

Описания активностей начинаются с : и заканчиваются ;. Само описание может содержать в себе несколько строчек.

Как уже упоминалось выше, дополнительно форматировать текст описания активности возможно, используя синтаксис creole.

Активности автоматически связаются по порядку их определения.

🎉 Copied!
@startuml

:Привет мир!;

:Эта активность описывается
несколькими **строчками** текста;

:|= Еще один    |= быстрый пример  |
| использования | creole разметки  |;

@enduml

Старт активности, Стоп активности, Стоп поток, Быстрый стоп

Следующие ключевые слова используются для:
  • start - для обозначения начального состояния активности,
  • stop - для обозначения конечного состояния активности,
  • end - для обозначения конечного состояния потока,
  • kill или detach - для быстрого прерывания активности без обозначения каких либо значков.

Использование либого из них не обязательно, диаграммы активности можно строить и без указания начального и/или конечного состояний start, stop или end, как было продемонстрировано на примерах выше. Чтобы прервать какую-либо активность без отображения каких-либо значков, нужно использовать идентичные по своему действию ключевые клова kill или detach.

🎉 Copied!
@startuml
start
:Привет мир!;
:Эта активность описывается
несколькими **строчками** текста;
stop
@enduml

🎉 Copied!
@startuml
start
:Привет мир!;
:Эта активность описывается
несколькими **строчками** текста;
end
@enduml

🎉 Copied!
@startuml
if (условие) then
:Один\nkill;
kill
else
:Два;
endif
:Три\nstop;
stop
@enduml

Условия (оператор if)

Можно использовать ключевые слова if, then, else и endif, чтобы добавить добавить проверку условия на диаграмму.

Доступно 3 равнозначных варианта записи условия (квадратными скобочками отмечены опциональные поля, которые можно указывать, а можно не указывать):

1 вариант записи:

  • if (текстУсловия) then [(подписьУспешно)]
  • else [(подписьНеУспешно)]
  • endif

🎉 Copied!
@startuml

start

if (Graphviz установлен?) then (да)

  :доступны все\nдиаграммы;

else (нет)

  :доступны только диаграммы
  __последовательностей__ и __активностей__;

endif

stop

@enduml

2 вариант записи

  • if (текстУсловия) is (подписьУспешно) then
  • else [(подписьНеУспешно)]
  • endif

🎉 Copied!
@startuml

if (цвет?) is (<color:red>красный) then
  :пачатаем "красный";
else
  :печатаем "НЕ красный";
endif
@enduml

3 вариант записи

  • if (текстУсловия) equals (подписьУспешно) then
  • else [(подписьНеУспешно)]
  • endif

🎉 Copied!
@startuml

if (счетчик?) is (5) then
  :пачатаем "5";
else
  :печатаем "НЕ 5";
endif
@enduml

[Ref. QA-301]

Ряд последовательных проверок условий (горизонтальное отображение)

Вы можете использовать ключевое слово elseif, чтобы создать несколько последовательных проверок условий (по умолчанию используется режим горизонтального отображения):

🎉 Copied!
@startuml

start

if     (условие 1) then (да)
  :Текст 1;
elseif (условие 2) then (да)
  :Срочное\nзавершение;
  stop
elseif (условие 3) then (да)
  :Текст 3;
elseif (условие 4) then (да)
  :Текст 4;
else (ничего не\nподходит)
  :Текст: ничего\nне подошло;
endif

:продолжение;

stop

@enduml

Ряд последовательных проверок условий (вертикальное отображение)

Используйте опцию !pragma useVerticalIf on для отображения нескольких последовательных проверок условий в вертикальном режиме:

🎉 Copied!
@startuml

!pragma useVerticalIf on
start

if     (условие 1) then (да)
  :Текст 1;
elseif (условие 2) then (да)
  :Срочное\nзавершение;
  stop
elseif (условие 3) then (да)
  :Текст 3;
elseif (условие 4) then (да)
  :Текст 4;
else (ничего не\nподходит)
  :Текст: ничего\nне подошло;
endif

:продолжение;

stop

@enduml

Также, можно использовать параметр -P для установки этой опции для диаграмм по умолчанию из командной строки:

java -jar plantuml.jar -PuseVerticalIf=on

[Refs. QA-3931, issue-582]

Перебор множества условий для определенного параметра (оператор switch)

Для добавления в диаграмму перебора множества условий для какого-то одного параметра (конструкция switch-case), нужно использовать следующие ключевые слова: switch, case, endswitch.

Условно можно изобразить синтаксис этой конструкции следующим образом:

switch ( переметрДляКоторогоПроверяютсяУсловияНиже )
  case ( условие1 ? )
    :вариант 1;
  case ( условие2 ? )
    :вариант 2;
  ...
endswitch

🎉 Copied!
@startuml

start

switch ( число потоков )
case ( равно 1 )
  :1 поток;
case ( равно 2 ) 
  :2 потока;
case ( равно 3 )
  :3 потока;
case ( равно 4 )
  :4 потока
  ----
  срочное
  завершение
  kill;
  kill
case ( равно 5 )
  :5 потоков;
endswitch

stop

@enduml

Остановка активности в теле условия

Как уже было продемонстрировано ранее, можно остановить активность на конкретном действии, используя ключевые слова stop для отображения остановки деятельности или end для отображения остановки потока.

🎉 Copied!
@startuml

if (условие?) then
  :ошибка;
  stop

endif

#palegreen :активность;

@enduml

Если нужно прервать активность на каком-то конкретном действии без отображения каких-либо значков, нужно использовать идентичные по своему действию ключевые слова kill или detach:

  • kill

🎉 Copied!
@startuml

if (условие?) then
  #pink :ошибка;
  kill

endif

#palegreen :активность;

@enduml

[Ref. QA-265]

  • detach

🎉 Copied!
@startuml

if (условие?) then
  #pink :ошибка;
  detach

endif

#palegreen :активность;

@enduml

Повторяющийся цикл (с проверкой условия в конце цикла)

Для отображения циклов нужно использовать идентичные по своему действию ключевые слова repeat или repeatwhile:

🎉 Copied!
@startuml

start

repeat

  :чтение данных;

  :построение диаграмм;

repeat while (есть ли еще данные?)

stop

@enduml

Чтобы добавить подписи к стрелочкам после проверки условия, нужно использовать следующую конструкцию:
  • repeat while (условие) is (подписьКогдаУспешно) not (подписьКогдаНеУспешно)

🎉 Copied!
@startuml

start

repeat

  :чтение данных;

  :построение диаграмм;

repeat while (есть ли еще данные?) is (да) not (нет)

stop

@enduml

Можно превратить начало цикла в полноценное действие, если после ключевого слова repeat в той же строке указать это действие при помощи конструкции:действие;

🎉 Copied!
@startuml

start

repeat :начало цикла;

  :чтение данных;

  :построение диаграмм;

repeat while (есть ли еще данные?)

stop

@enduml

Чтобы добавить к циклу обратное действие, используйте ключевое слово backward и сразу в той же строке укажите это действие при помощи конструкции:действие;

🎉 Copied!
@startuml

start

repeat :начало цикла;
  :чтение данных;
  :построение диаграмм;
backward :очистка экрана;
repeat while (есть ли еще данные?)

stop

@enduml

Прерывание цикла repeat при помощи клюевого слова break

Чтобы прервать цикл после определенного действия, нужно использовать ключевое слово break

🎉 Copied!
@startuml

start

repeat

  :Тестирование;

    if (Что-то пошло не так?) then (нет)
      #palegreen :Тест пройден;
      break
    endif

    ->ошибка;

    :Сообщение: "Длинное сообщение об ошибке";

repeat while (Что-то пошло не так при\nвыводе сообщения об ошибке?) is (да) not (нет)

:Сообщение: "Всё прошло успешно";

stop

@enduml

[Ref. QA-6105]

Повторяющийся цикл (с проверкой условия в начале цикла)

Для организации цикла с проверкой условия в начале используйте ключевые слова while и end while.

🎉 Copied!
@startuml

start

while (данные доступны?)
  :чтение данных;
  :построение диаграммы;
endwhile

stop

@enduml

Чтобы добавить пояснения на стрелочки после проверки условия, нужно использовать следующую конструкцию:

  while (условие) is ( пояснениеКогдаУспешно )
    ...
  endwhile ( пояснениеКогдаНеУспешно )

Пример:

🎉 Copied!
@startuml

while (данные доступны?) is (да)

  :чтение данных;
  :построение диаграммы;

endwhile (нет)

:окончание работы;

@enduml

Чтобы добавить к циклу обратное действие, используйте ключевое слово backward и сразу в той же строке укажите это действие при помощи конструкции :действие;

🎉 Copied!
@startuml

while (данные доступны?) is (да)

  :чтение данных;
  :построение диаграммы;

  backward :очистка экрана;
endwhile (нет)

:окончание работы;

@enduml

Чтобы прервать выполнение цикла, используйте ключевое слово break:

🎉 Copied!
@startuml

while (данные доступны?) is (да)

  :чтение данных;

  if (данные прочитаны?) then (нет)
    #pink :Сообщение об ошибке;
    break
  endif

  :построение диаграммы;

  backward :очистка экрана;
endwhile (нет)

->завершение;

#palegreen :окончание работы;

@enduml

Распаралелливание активности [ режим многопоточности: fork, fork again, end fork и merge ]

Для разделения одной активности на несколько паралелльных активностей можно использовать режим многопоточности. Для этого необходимо использовать ключевые слова: fork, fork again и end fork или end merge.

(Также для этих целей можно использовать режим разделения (split), который будет рассмотрен более подробно ниже).

Простой режим многопоточности

🎉 Copied!
@startuml
start
fork
  :Действие 1;
fork again
  :Действие 2;
end fork
stop
@enduml

🎉 Copied!
@startuml
start
fork
  :Действие 1;
fork again
  :Действие 2;
fork again
  :Действие 3;
  end
fork again
  :Действие 4;
end fork
stop
@enduml

Режим многопоточности с объединением потоков в конце

🎉 Copied!
@startuml
start
fork
  :Действие 1;
fork again
  :Действие 2;
end merge
stop
@enduml

🎉 Copied!
@startuml
start
fork
  :Действие 1;
fork again
  :Действие 2;
fork again
  :Действие 3;
  end
fork again
  :Действие 4;
end merge
stop
@enduml

[Ref. QA-13731]

Размещение комментария при возвращении к однопоточному режиму (реализация синтакиса UML):

🎉 Copied!
@startuml
start
fork
  :Действие A;
fork again
  :Действие B;
end fork {или}
stop
@enduml

🎉 Copied!
@startuml
start
fork
  :Действие A;
fork again
  :Действие B;
end fork {и}
stop
@enduml

[Ref. QA-5346]

Еще один пример

🎉 Copied!
@startuml

start

if (многопоточность?) then (да)
  fork
    :Поток 1;
  fork again
    :Поток 2;
  end fork
else (всё в одном\nпотоке)
  :Поток 1;
  :Поток 2;
endif

stop

@enduml

Распараллеливание активности [ режим разделения: split, split again и end split ]

Разделение

Чтобы распараллелить активность на несколько одновременно идущих активностей, можно также использовать режим разделения. Для этого неоходимо использовать следующие ключевые слова: split, split again и end split.

🎉 Copied!
@startuml
start
split
   :Действие 1;
split again
   :Действие 2;
split again
   :Действие 3;
split again
   :Действие 4.1;
   :Действие 4.2;
end split
:окончание работы;
end
@enduml

Несколько входов

При помощи режима разделения можно изобразить несколько независимых начальных действий. Для этого необходимо организовать распараллеливание активности на несколько параллельных и при этом скрыть входные стрелочки при помощи добавления конструкции -[hidden]-> перед каждой активностью:

🎉 Copied!
@startuml
split
   -[hidden]->
   :Действие 1;
split again
   -[hidden]->
   :Действие 2;
split again
   -[hidden]->
   :Действие 3;
end split
:окончание работы;
@enduml

Более сложный пример:

🎉 Copied!
@startuml
split
   -[hidden]->
   :Действие 1;
  ->вар1;
split again
   -[hidden]->
   :Действие 2.1;
   :Действие 2.2;
  ->вар2;
split again
   -[hidden]->
   (Х)
  ->вар3;
end split
:окончание работы;
@enduml

[Ref. QA-8662]

Несколько выходов

Таким же образом можно организовать несколько параллельно завершаемых действий. Для этого после каждого такого действия нужно указать ключевые слова kill или detach:

🎉 Copied!
@startuml
start
split
   :Действие 1;
   kill
split again
   :Действие 2;
   detach
split again
   :Действие 3;
   kill
end split
@enduml

Более сложный пример:

🎉 Copied!
@startuml
start
split
  ->вар1;
   :Действие 1;
   kill
split again
  ->вар2;
   :Действие 2.1;
   :Действие 2.2;
   detach
split again
  ->вар3;
   (Z)
   detach
split again
  ->вар4;
   end
split again
  ->вар5;
   stop
end split
@enduml

Заметки

На диаграмму активностей (также, как и на остальные диаграммы) можно добавлять заметки.

Текст внутри заметок можно дополнительно форматировать используя creole и HTML синтаксис.

По умолчанию создаются заметки, которые явно указыавют на элемент, которй был объявлен непосредственно перед объявлением заметки. Чтобы создать отсоединенную заметку, нужно использовать ключевое слово floating (она по прежнему будет находится рядом с элементом, но у неё не будет "хвостика" указателя).

🎉 Copied!
@startuml

start
:Действие1;
floating note left: Это отсоединенная заметка
:Действие2;
note right
  Эта заметка длиной в
  //несколько строчек//
  и может содержать
  в себе <b>HTML</b> теги
  и creole синтаксис
  ====
  * Вызов метода ""foo()"" запрещен
end note
stop

@enduml

Можно добавлять заметки к обратным действиям в циклах:

🎉 Copied!
@startuml
  start
    repeat :Ввод данных;
    :Отправка;
    backward :Предупреждение;
      note right: Заметка о том\nчто что-то пошло нет так
    repeat while (Корректно?) is (Нет) not (Да)
  stop
@enduml

[Ref. QA-11788]

Можно добавлять заметки к разделам:

🎉 Copied!
@startuml
start
partition "**процесс** Привет Мир" {
    note
        Тут наша заметка
        ----
        //Creole тест//
    end note
    :Готовность к отправке;
    :"Привет Мир" -> получатель Х>
    :Привет отправлен;
}
@enduml

[Ref. QA-2398]

Цвета

Можно задавать цвета для активностей

🎉 Copied!
@startuml

:запуск процесса;

#HotPink:чтение конфигурационных файлов
----
На этом этапе указанные файлы
уже должны быть отредактированы!;

#AAAAAA:остановка процесса;

@enduml

Также можно задавать заливку градиентом:

🎉 Copied!
@startuml
start

partition #red/white "тестирование раздела" {
  #lightblue\palegreen :тестирование активности;
}

stop
@enduml

[Ref. QA-4906]

Линии вместо стрелок

Можно превратить все стрелки на диаграмме в линии, если указать команду skinparam ArrowHeadColor none в начале диаграммы.

🎉 Copied!
@startuml
  skinparam ArrowHeadColor none
  start
    :Привет Мир!;
    :Какое-то дейстиве в
     несколько **строчек**;
  stop
@enduml

🎉 Copied!
@startuml
  skinparam ArrowHeadColor none
  start
    repeat :Ввод данных;
    :Отправка;
    backward :Предупреждение;
    repeat while (Коректно?) is (Нет) not (Да)
  stop
@enduml

Изменение цвета и стиля стрелок (синтаксис квадратных скобочек)

Явно объявляя стрелку и указывая для неё дополнительные параметры, можно управлять отображением стрелок между элементами диаграммы.

Стиль линий

Можно задавать различные стили отображения линий при помощи следующей конструкции:
  • -[#типЛинии]->
где типЛинии может принимать значения:
  • bold - жирный,
  • dashed - штриховой,
  • dotted - пунктирный,
  • hidden - скрытый,
  • plain - непрерывный.

Заметки на линиях

Можно добавлять текстовые подписи к линиям, используя следующую конструкцию:
  • --> Текст заметки

Цвет линий

Можно задавать цвет линий при помощи следующей конструкции:
  • -[#цветЛинии]->
где цветЛинии может принимать текстовые обозначения цветов или их числовое представление.

Полный синтаксис

Можно смешивать все указанные выше параметры, следующим образом:
  • -[#цветЛинии,типЛинии]-> Текст заметки

Комплексный пример

🎉 Copied!
@startuml
:Действие1;
-> Можно добавлять\nтекст на стрелки;
if (Условие?) then
  -[#blue]->
  :Действие2;
  -[#green,dashed]-> Текст с //пояснениями//
  на стрелках может быть
  **очень** длинным...;
  :Действие3;
else
  -[#black,dotted]->
  :Действие4.1;
  -[hidden]->
  :Действие4.2;
endif
-[#gray,bold]->
:Действие5;
@enduml

Коннектор

Можно добавлять на диаграмму специальный элемент - коннектор. Для этого необходимо использовать круглые скобки. Чтобы убрать связь между двумя коннекторами, нужно использовать ключевое слово detach.

🎉 Copied!
@startuml
start

:Некоторое действие;

(A)

detach

(A)

:Следующее действие;
@enduml

Цвет коннектора

Можно указать цвет для коннектора.

🎉 Copied!
@startuml
start

:Коннектор ниже
хочет стать синим;

#blue:(B)

:А следующий коннектор
мечтает быть зеленым;

#green:(G)

stop
@enduml

[Ref. QA-10077]

Объединение (группировка) активностей

Можно объединять (группировать) активности на диаграмме используя:
  • group - группы;
  • partition - разделы;
  • package - пакеты;
  • rectangle - прямоугольники;
  • card - карточки.
отличаются эти варианты только внешним видом (а для group еще немного другим синтаксисом записи и отсутствием возможности задавать цвет).

Группы

Итак, можно объединять активности используя группы:

group НазваниеГруппы
  .. объединяемые активности ..
end group

🎉 Copied!
@startuml
start

group Инициализация
    :чтение конфигурационного файла;
    :инициализация внутренних переменных;
end group
group Выполнение
    :ожидание активности пользователя;
    :вывод информации;
end group

stop
@enduml

Разделы, Пакеты, Прямоугольники и Карточки

Также, можно объединять активности используя Разделы, Пакеты, Прямоугольники и Карточки. Синтаксис у всех этих вариантов одинаковый, отличие состоит только в форме отображения.

partition/package/rectangle/card [#цвет] Название {
  .. объединяемые активности ..
}

🎉 Copied!
@startuml
start

group Группа
  :Действие;
end group
floating note: Заметка для группы

partition Раздел {
  :Действие;
}
floating note: Заметка для раздела

package Пакет {
  :Действие;
}
floating note: Заметка для пакета

rectangle Прямоугольник {
  :Действие;
}
floating note: Заметка для прямоугольника

card Карточа {
  :Действие;
}
floating note: Заметка для карточки

end
@enduml

Для Разделов, Пакетов, Прямоугольников и Карточек можно задавать цвет отображения (для Групп этого сделать нельзя):

🎉 Copied!
@startuml
start

partition #lightGreen Инициализация {
    :чтение конфигурационного файла;
    :инициализация внутренних переменных;
}

partition Выполнение {
    :ожидание активности пользователя;
    :вывод информации;
}

stop
@enduml

[Ref. QA-2793]

Также, в названиях можно использовать гиперссылки:

🎉 Copied!
@startuml
start
partition "[[http://plantuml.com имя_раздела]]" {
    :см документацию на [[http://plantuml.com сайте plantuml]];
    :тестирование диаграммы;
}
end
@enduml

[Ref. QA-542]

Дорожки

Можно задать дорожки используя символ |. Также для задаваемых дорожек можно задавать цвета.

🎉 Copied!
@startuml

|Дорожка1|
start
:Действие1;

|#AntiqueWhite|Дорожка2|
:Действие2;
:Действие3;

|Дорожка1|
:Действие4;

|Дорожка2|
:Действие5;
stop

@enduml

Можно использовать дорожки вместе с Условиями и Циклами.

🎉 Copied!
@startuml

|#pink|Актор_для_красного|
start
if (цвет?) is (красный) then
#pink :**красное действие**;
:Действие1;
else (НЕ красный)

|#lightblue|Актор_для_синего|
#lightblue :**синее действие**;
:Действие2;
endif

|Следующий актор|
#lightgray :Действие3;
:Действие4;

|Финальный актор|
#palegreen :Действие5;
stop

@enduml

Также, для того, чтобы каждый раз не писать длинное имя Дорожки, можно задать для дорожки короткое имя и далее использовать везде его. Сделать это можно используя ключевое слово alias при первом определении Дорожки:
  • |[#<color>|]<короткоеИмя>| <ДлинноеИмя>

🎉 Copied!
@startuml

|#palegreen|Р| Рыбак

|П| Повар

|#gold|Е| Едок

|Р|
start
:ловит рыбу;

|П|
:жарит рыбу;

|Е|
:ест рыбу;

stop
@enduml

[Ref. QA-2681]

Прерывание активности

Можно прервать активность (удалить стрелку) используя идентичные по своему действию ключевые слова detach или kill:

  • detach

🎉 Copied!
@startuml

 #palegreen :начало;

 fork
   :Действие1;
   :Действие2;

 fork again
   :Действие3;
   detach
 endfork

 if (Условие) then
   :Действие4;
   detach
 endif

 :Действие5;
 detach
 :Действие6;
 stop
@enduml

  • kill

🎉 Copied!
@startuml

 #palegreen :начало;

 fork
   :Действие1;
   :Действие2;

 fork again
   :Действие3;
   kill
 endfork

 if (Условие) then
   :Действие4;
   detach
 endif

 :Действие5;
 detach
 :Действие6;
 stop
@enduml

SDL (язык спецификаций с формальной семантикой)

(еще на русский переводится как "язык спецификаций и описаний")

Заменяя символ ;, обозначающий конец описания действия, на символы из списка ниже, можно изменять внешний вид действия. Ниже перечислены доступные варианты с указанием обозначаемых ими типов:
  • ; - STATE, СОСТОЯНИЕ
  • | - CALL, ВЫЗОВ ПРОЦЕДУРЫ
  • < - INPUT, ВВОД
  • > - OUTPUT, ВЫВОД
  • / - SAVE, СОХРАНЕНИЕ
  • ] - TASK, ЗАДАЧА
  • } - DECISION, РЕШЕНИЕ

🎉 Copied!
@startuml
:СОСТОЯНИЕ;
:ВЫЗОВ ПРОЦЕДУРЫ|
:ВВОД<
:ВЫВОД>
:СОХРАНЕНИЕ/
:ЗАДАЧА]
:РЕШЕНИЕ}
@enduml

Еще один пример:

🎉 Copied!
@startuml
:ГОТОВ;
:ПОЛУЧИТЬ_СЛЕД(o)|
:ПОЛУЧЕНИЕ;

split
 :СПРОСИТЬ(i)<
 :ВЫВЕСТИ(o)>

split again
 :СПРОСИТЬ(i)<
 :ПОЛУЧИТЬ_СЛЕД(o)
  в несколько строчек|
 :i := i + 1]
 :ВЫВЕСТИ(o)>

split again
 :ОШИБКА(i)<
 :ВЫВЕСТИ(o)>

split again
 :СОХРАНЕНИЕ/

split again
 :i > 5}
stop

end split

:КОНЕЦ;
@enduml

Полноценный пример

🎉 Copied!
@startuml

start
:ClickServlet.handleRequest();
:new page;
if (Page.onSecurityCheck) then (true)
  :Page.onInit();
  if (isForward?) then (no)
    :Process controls;
    if (continue processing?) then (no)
      stop
    endif

    if (isPost?) then (yes)
      :Page.onPost();
    else (no)
      :Page.onGet();
    endif
    :Page.onRender();
  endif
else (false)
endif

if (do redirect?) then (yes)
  :redirect process;
else
  if (do forward?) then (yes)
    :Forward request;
  else (no)
    :Render page template;
  endif
endif

stop

@enduml

Condition Style

Inside style (by default)

🎉 Copied!
@startuml
skinparam conditionStyle inside
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

🎉 Copied!
@startuml
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

Diamond style

🎉 Copied!
@startuml
skinparam conditionStyle diamond
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

InsideDiamond (or Foo1) style

🎉 Copied!
@startuml
skinparam conditionStyle InsideDiamond
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

🎉 Copied!
@startuml
skinparam conditionStyle foo1
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

[Ref. QA-1290 and #400]

Condition End Style

Diamond style (by default)

  • With one branch

🎉 Copied!
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
    :B1;
else (no)
endif
:C;
@enduml

  • With two branches (B1, B2)

🎉 Copied!
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
    :B1;
else (no)
    :B2;
endif
:C;
@enduml
@enduml

Horizontal line (hline) style

  • With one branch

🎉 Copied!
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
    :B1;
else (no)
endif
:C;
@enduml

  • With two branches (B1, B2)

🎉 Copied!
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
    :B1;
else (no)
    :B2;
endif
:C;
@enduml
@enduml

[Ref. QA-4015]

Using (global) style

Without style (by default)

🎉 Copied!
@startuml
start
:init;
-> test of color;
if (color?) is (<color:red>red) then
:print red;
else 
:print not red;
note right: no color
endif
partition End {
:end;
}
-> this is the end;
end
@enduml

With style

You can use style to change rendering of elements.

🎉 Copied!
@startuml
<style>
activityDiagram {
  BackgroundColor #33668E
  BorderColor #33668E
  FontColor #888
  FontName arial

  diamond {
    BackgroundColor #ccf
    LineColor #00FF00
    FontColor green
    FontName arial
    FontSize 15
  }
  arrow {
    FontColor gold
    FontName arial
    FontSize 15
  }
  partition {
    LineColor red
    FontColor green
    RoundCorner 10
    BackgroundColor PeachPuff
  }
  note {
    FontColor Blue
    LineColor Navy
    BackgroundColor #ccf
  }
}
document {
   BackgroundColor transparent
}
</style>
start
:init;
-> test of color;
if (color?) is (<color:red>red) then
:print red;
else 
:print not red;
note right: no color
endif
partition End {
:end;
}
-> this is the end;
end
@enduml