C4-PlantUML comes with some layout options.
PlantUML uses Graphviz for its graph visualization. Thus the rendering itself is done automatically for you - that it one of the biggest advantages of using PlantUML.
…and also sometimes one of the biggest disadvantages, if the rendering is not what the user intended.
Rel_
and Lay_
statements that achieve the desired layout. One way to do this is to immediately remove any of these you experiment with when they don’t actually affect the layout at all. And of course you will remove the ones that affect it the layout in a negative way.These are intended to correlate to the layout engine’s algorithm, but have (as of this writing) been determined by trial and error - not a code review.
Please read through all practices before starting.
Rel
(directionless) to create initial relationships.Rel_{direction}
to force shape layouts.Lay_{direction}
to force any layouts that Rel_{direction}
does not correct.Lay_{direction}
and Rel_{direction}
statements used above:
Rel_{direction}
before adding Lay_{direction}
Rel_R(entity1,entity2)
and Rel_R(entity2, entity3)
is the minimum possible statements and they all specify the same direction.Lay_R(entity1,entity2)
which is not working as desired and then also add the opposing one as Lay_L(entity2,entity1)
- it does not help with forcing layouts to be as you want them. It might help to use Lay_L
instead of Lay_R
, but not both together.SHOW_FLOATING_LEGEND()
will not display inside the All enclosing boundary.With the two macros LAYOUT_TOP_DOWN()
and LAYOUT_LEFT_RIGHT()
it is possible to easily change the flow visualization of the diagram. LAYOUT_TOP_DOWN()
is the default.
@startuml LAYOUT_TOP_DOWN Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
/' Not needed because this is the default '/
LAYOUT_TOP_DOWN()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
LAYOUT_LEFT_RIGHT()
rotates the flow visualization to from Left to Right and directed relations like Rel_Left()
, Rel_Right()
, Rel_Up()
and Rel_Down()
are rotated too.
@startuml LAYOUT_LEFT_RIGHT Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
LAYOUT_LEFT_RIGHT()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
LAYOUT_LANDSCAPE()
rotates the default flow visualization to from Left to Right like LAYOUT_LEFT_RIGHT()
additional directed relations like Rel_Left(), Rel_Right(), Rel_Up() and Rel_Down() are not rotated anymore.
@startuml LAYOUT_LANDSCAPE Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
LAYOUT_LANDSCAPE()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
System(S,"S")
System(SU,"S Up")
System(SD,"S Down")
System(SL,"S Left")
System(SR,"S Right")
Rel_Up(S, SU, "Up")
Rel_Down(S, SD, "Down")
Rel_Left(S, SL, "Left")
Rel_Right(S, SR, "Right")
SHOW_LEGEND()
@enduml
Colors can help to add additional information or simply to make the diagram more aesthetically pleasing. It can also help to save some space.
All of that is the reason, C4-PlantUML uses colors and prefer also to enable a layout without <<stereotypes>>
and with a legend.
This can be enabled with LAYOUT_WITH_LEGEND()
.
@startuml LAYOUT_WITH_LEGEND Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
LAYOUT_WITH_LEGEND()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
Instead of a static legend (activated with LAYOUT_WITH_LEGEND()
) a calculated legend can be activated with SHOW_LEGEND(?hideStereotype, ?details)
.
The calculated legend has following differences:
SHOW_LEGEND(false)
)$details
argument
$details = Small()
.. default; details are displayed with a smaller size compared to the legend labels$details = Normal()
.. details and labels are displayed with same size$details = None()
.. only the labels are displayed$legendText
contains \n
then the text before is the label and the text behind the detailsSHOW_LEGEND()
has to be last call in the diagram@startuml SHOW_LEGEND Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
SHOW_LEGEND()
@enduml
Legend labels and details can be defined via \n
in $legendTest
arguments too.
@startuml
' convert it with additional command line argument -DRELATIVE_INCLUDE="./.." to use locally
!if %variable_exists("RELATIVE_INCLUDE")
!include %get_variable_value("RELATIVE_INCLUDE")/C4_Container.puml
!else
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!endif
' $legendText with \n defines the label and details of the legend entry ("backend container" is label, "eight sided shape" is details)
AddElementTag("backendContainer", $fontColor=$ELEMENT_FONT_COLOR, $bgColor="#335DA5", $shape=EightSidedShape(), $legendText="backend container\neight sided shape")
' $legendText without \n defines only a label
AddRelTag("async", $textColor=$ARROW_FONT_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DashedLine(), $legendText="async call")
' if no $legendText defined, $tag is automatically the label and all additional displayed properties are the details
AddRelTag("sync/async", $textColor=$ARROW_FONT_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DottedLine())
System_Boundary(c1, "Internet Banking") {
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API", $tags="backendContainer")
}
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS", $tags="async")
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS", $tags="sync/async")
SHOW_LEGEND()
@enduml
Legend details can be deactivated via SHOW_LEGEND($details=None())
@startuml
' convert it with additional command line argument -DRELATIVE_INCLUDE="./.." to use locally
!if %variable_exists("RELATIVE_INCLUDE")
!include %get_variable_value("RELATIVE_INCLUDE")/C4_Container.puml
!else
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!endif
' $legendText with \n defines the label and details of the legend entry ("backend container" is label, "eight sided shape" is details)
AddElementTag("backendContainer", $fontColor=$ELEMENT_FONT_COLOR, $bgColor="#335DA5", $shape=EightSidedShape(), $legendText="backend container\neight sided shape")
' $legendText without \n defines only a label
AddRelTag("async", $textColor=$ARROW_FONT_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DashedLine(), $legendText="async call")
' if no $legendText defined, $tag is automatically the label and all additional displayed properties are the details
AddRelTag("sync/async", $textColor=$ARROW_FONT_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DottedLine())
System_Boundary(c1, "Internet Banking") {
Container(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
Container(backend_api, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API", $tags="backendContainer")
}
System_Ext(banking_system, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
Rel(mobile_app, backend_api, "Uses", "async, JSON/HTTPS", $tags="async")
Rel_Neighbor(backend_api, banking_system, "Uses", "sync/async, XML/HTTPS", $tags="sync/async")
SHOW_LEGEND($details=None())
@enduml
LAYOUT_WITH_LEGEND()
and SHOW_LEGEND(?hideStereotype)` adds the legend at the bottom right of the picture like below and additional whitespace is created.
@startuml Layout With Whitespace Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Person(a, "Person A")
Container(b, "Container B", "techn")
System(c, "System C")
Container(d, "Container D", "techn")
Container_Ext(e, "Ext. Container E", "techn")
Rel_R(a, b, "calls")
Rel_D(b, c, "uses")
Rel_D(c, d, "uses")
Rel_R(d, e, "updates")
SHOW_LEGEND()
@enduml
Therefore a floating legend can be added via SHOW_FLOATING_LEGEND(), positioned with Lay_Distance() and existing whitespace is reused like below.
LEGEND()
: is the default alias of the created floating legend and can be used in Lay_Distance() call@startuml Compact Legend Layout Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Person(a, "Person A")
Container(b, "Container B", "techn")
System(c, "System C")
Container(d, "Container D", "techn")
Container_Ext(e, "Ext. Container E", "techn")
Rel_R(a, b, "calls")
Rel_D(b, c, "uses")
Rel_D(c, d, "uses")
Rel_R(d, e, "updates")
SHOW_FLOATING_LEGEND()
Lay_Distance(LEGEND(), e, 1)
@enduml
C4-PlantUML can be especially helpful during up-front design sessions. One thing which is often ignored is the fact, that these software architecture sketches are just sketches.
Without any proof
More often these sketches are used by many people as facts and are manifested into their documentations.
With LAYOUT_AS_SKETCH()
you can make a difference.
@startuml LAYOUT_AS_SKETCH Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
LAYOUT_AS_SKETCH()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
Additional styles and the footer text can be changed with SET_SKETCH_STYLE():
SET_SKETCH_STYLE(?bgColor, ?fontColor, ?warningColor, ?fontName, ?footerWarning, ?footerText)
:
Enables the modification of different sketch styles and footer.The possible font name(s) depend on the output format (e.g. PNG uses fonts which are installed on the server and SVG fonts have to be installed on the client). Additional is it possible to define comma separated fall back fonts (if the diagrams are exported as SVG. Atm PNG does not support fallback fonts based on a PlantUML bug, but this could be fixed in one of the following versions)
@startuml LAYOUT_AS_SKETCH Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
SET_SKETCH_STYLE($bgColor="lightblue", $fontColor="darkblue", $warningColor="darkred", $footerWarning="Sketch", $footerText="Created for discussion")
' PNG with font jlm_cmmi10 (typically another font is used)
' SET_SKETCH_STYLE($fontName="jlm_cmmi10")
' SVG with fallback fonts MS Gothic,Comic Sans MS, Comic Sans, Chalkboard SE, Comic Neue, cursive, sans-serif (typically without "MS Gothic")
SET_SKETCH_STYLE($fontName="MS Gothic,Comic Sans MS,Comic Sans,Chalkboard SE,Comic Neue,cursive,sans-serif")
LAYOUT_AS_SKETCH()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
PNG with font jlm_cmmi10
SVG with fallback fonts MS Gothic,Comic Sans MS,Comic Sans,Chalkboard SE,Comic Neue,cursive,sans-serif
All available (PNG) fonts can be displayed with
@startuml
listfonts
@enduml
To enable a layout without <<stereotypes>>
and legend.
This can be enabled with HIDE_STEREOTYPE()
.
@startuml HIDE_STEREOTYPE Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
HIDE_STEREOTYPE()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
With the macros HIDE_PERSON_SPRITE()
, SHOW_PERSON_SPRITE()
and SHOW_PERSON_PORTRAIT()
it is possible to change the person related default sprite or person layout itself. SHOW_PERSON_SPRITE()
is the default.
“person” and “person2” are predefined sprites which can be used as default sprite too.
@startuml predefined sprites Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Person(userA, "User A", "with predefined sprite person", "person")
Person(userB, "User B", "with predefined sprite person2", "person2")
@enduml
@startuml HIDE_PERSON_SPRITE Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
HIDE_PERSON_SPRITE()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
@startuml SHOW_PERSON_SPRITE Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
/' Not needed because this is the default with sprite "person" '/
SHOW_PERSON_SPRITE()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
@startuml SHOW_PERSON_SPRITE(sprite) Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!define osaPuml https://raw.githubusercontent.com/Crashedmind/PlantUML-opensecurityarchitecture2-icons/master
!include osaPuml/Common.puml
!include osaPuml/User/all.puml
SHOW_PERSON_SPRITE("osa_user_green_architect")
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
@startuml SHOW_PERSON_PORTRAIT() Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
SHOW_PERSON_PORTRAIT()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
' if a person is combined with a sprite then the rectangle layout is used again
Person(person, "Person with sprite", $sprite="person2")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
This call requires PlantUML version >= v1.2021.4!
@startuml SHOW_PERSON_OUTLINE() Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
SHOW_PERSON_OUTLINE()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample') {
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
' if a person is combined with a sprite then the rectangle layout is used again
Person(person, "Person with sprite", $sprite="person2")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
show is defined with $show=true
and hide is defined with $show=false
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Sequence.puml
SHOW_ELEMENT_DESCRIPTIONS()
Person(admin, "Administrator", "People that administrates the products")
System_Boundary(c1, 'Sample')
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
' in a sequence diagram Boundary_End() has to be used instead of { }
Boundary_End()
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Sequence.puml
SHOW_FOOT_BOXES()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample')
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
' in a sequence diagram Boundary_End() has to be used instead of { }
Boundary_End()
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Sequence.puml
SHOW_INDEX()
Person(admin, "Administrator")
System_Boundary(c1, 'Sample')
Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
' in a sequence diagram Boundary_End() has to be used instead of { }
Boundary_End()
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
More often a full support of all PlantUML elements are requested.
They can be set via the new optional baseShape="...."
argument of the calls
System(..., ?baseShape)
,System_Ext(..., ?baseShape)
,Container(..., ?baseShape)
,Container_Ext(..., ?baseShape)
,Component(..., ?baseShape)
,Component_Ext(..., ?baseShape)
The already specified ...Db...()
and ...Queue...()
calls are not extended.
But based on the additional (internal) overhead it has to be explicit enabled
via ENABLE_ALL_PLANT_ELEMENTS
. It can be set with following 2 options
!ENABLE_ALL_PLANT_ELEMENTS = 1
directly in the scripts file
BEFORE the first C4_* file is loaded, like e.g.@startuml
!ENABLE_ALL_PLANT_ELEMENTS = 1
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
...
@enduml
-DENABLE_ALL_PLANT_ELEMENTS=1
If ENABLE_ALL_PLANT_ELEMENTS
is not set, the diagrams displays the requested “PlantUML element”
but the style is not correct displayed.
A simple sample with additional “PlantUML elements”:
@startuml
!ENABLE_ALL_PLANT_ELEMENTS = 1
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
Component(comp, "Copy component")
Component(config, "Config component", $baseShape="package")
ComponentDb(dbA, "DB A")
' alternative syntax for ComponentDb() with $baseShape="database"
Component(dbB, "DB B", $baseShape="database")
Rel_U(comp, config, "Configured by")
Rel_L(comp, dbA, "Reads from")
Rel_R(comp, dbB, "Writes to")
SHOW_LEGEND()
@enduml
PlantUML element | Support | Comment |
---|---|---|
rectangle | ✅ | already supported (works even without ENABLE_ALL_PLANT_ELEMENTS) |
database | ✅ | already supported (works even without ENABLE_ALL_PLANT_ELEMENTS) |
queue | ✅ | already supported (works even without ENABLE_ALL_PLANT_ELEMENTS) |
node | ❌ | should not be used, already defined for Node() (works even without ENABLE_ALL_PLANT_ELEMENTS) |
person | ❌ | should not be used, already defined for Person() (works even without ENABLE_ALL_PLANT_ELEMENTS) |
actor | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
agent | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
artifact | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
boundary | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
card | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
circle | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
cloud | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
collections | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
control | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
entity | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
file | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
folder | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
frame | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
hexagon | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
interface | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
label | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
package | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
stack | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
storage | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
usecase | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
usecase/ | ☑ | requires ENABLE_ALL_PLANT_ELEMENTS |
actor/ | ❌ | requires ENABLE_ALL_PLANT_ELEMENTS, not working (font color not changed to $bkColor) - and/or conflict with existing? |
If ENABLE_ALL_PLANT_ELEMENTS
is not set, the diagrams displays the requested “PlantUML element”
but the style is not correct.