-
-
Notifications
You must be signed in to change notification settings - Fork 317
Description
Description
Hello,
We are looking for a diagramming tool that can dynamically render the C4 model. For example, if two systems are defined, each with two containers, we want to define the model once and automatically visualize the connections between different levels and combinations.
I better illustrate this on the example of a simple org chart.
DSL Code
workspace "Name" "Description"
!identifiers hierarchical
model {
department-1 = softwareSystem "department-1" {
product-managers = container "Product Management"
market = container "Market Analytics"
}
department-2 = softwareSystem "department-2" {
design = container "Design Team"
branding = container "Branding Team"
}
department-1.product-managers -> department-2.design "Provides specifications to"
department-2.design -> department-2.branding "Works with"
}
views {
systemContext department-1 "Diagram1" {
include *
autolayout lr
}
container department-1 "Diagram2" {
include *
autolayout lr
}
container department-2 "Diagram3" {
include *
autolayout lr
}
}
}which renders perfectly fine into system context:

which renders fine from container in department-1 to department-2:

which renders fine from department-1 to container in department-2:

The challenge arises when a user wants to drill down into department-1 while viewing Diagram3 (which shows the connection from department-1 to a container in department-2). Without this feature, the user would need to remember Diagram2 and Diagram3 and mentally connect the information themselves.
See PlantUML example for the desired view:

PlantUML Code
@startuml
set separator none
title department-1 - Containers
left to right direction
!include <C4/C4>
!include <C4/C4_Context>
!include <C4/C4_Container>
System_Boundary("department2_boundary", "department-2", $tags="") {
Container(department2.DesignTeam, "Design Team", $techn="", $descr="", $tags="", $link="")
Container(department2.BrandingTeam, "Branding Team", $techn="", $descr="", $tags="", $link="")
}
System_Boundary("department1_boundary", "department-1", $tags="") {
Container(department1.ProductManagement, "Product Management", $techn="", $descr="", $tags="", $link="")
Container(department1.MarketAnalytics, "Market Analytics", $techn="", $descr="", $tags="", $link="")
}
Rel(department1.ProductManagement, department2.DesignTeam, "Provides specifications to", $techn="", $tags="", $link="")
Rel(department2.DesignTeam, department2.BrandingTeam, "Works with", $techn="", $tags="", $link="")
SHOW_LEGEND(true)
@endumlIt’s possible to add an explicit view to the DSL example above, but this doesn’t allow for automatic, selectable expansion of blocks. This becomes even more complicated as the number of systems increases, then one would need to generate a matrix of the possible view combinations.
container department-1 "AllContainersView" {
include department-1.product-managers department-2.design department-2.branding department-1.market
autoLayout lr
}Priority
I'm willing to pay for this feature (add details below)
More information
We can consider paying for the feature or trying to contribute it by ourselves
