如何在UML状态图中重新排列块

5

我刚刚创建了一个状态图,现在我正在为块的位置而苦恼。我的目标是将状态1、2、4、5放在“下方”行,将状态3放在状态1的右侧。

请查看我的UML代码和附加的截图,以获取当前(左侧)和期望的(右侧)设计

UML 代码:

@startuml diagramStackO
scale 400 width
[*]    -down->  State1
State1 -down->  State2
State1 -right-> State3
State2 -up->    State3
State2 -down->  State4
State4 -->      State5
State5 -->      [*]
@enduml

截图(左:当前状态,右:应该呈现的状态)

enter image description here


谢谢你的回答 :) 基本函数易于使用,更改也可以快速实现。"希望是最后死去的"! - HKC72
1个回答

9

我的第一条建议是忽略它并继续前进... 在PlantUML中调整图表,即使是小事情,也可能会花费大量时间。

然而,作为一个花费太多时间来调整他们的图表的人,有两件事情值得注意。

使用ortho

第一种方法是只需添加skinparam linetype ortho。这是最省力的方法,但也带来了最少的改进:

@startuml
skinparam linetype ortho

[*]    -down->  State1
State1 -down->  State2
State1 -right-> State3
State2 -up->    State3
State2 -down->  State4
State4 -->      State5
State5 -->      [*]
@enduml

使用隐藏容器

另一种方法是添加一个隐藏的容器,需要进行一些工作,但我认为不会太难。

为了获得所需的垂直对齐效果,需要将状态分组在一起:

现在我们只需要隐藏容器即可:

我使用的代码实现了这种效果:

@startuml
skinparam {
    shadowing false

    state {
        BackgroundColor<<HIDDEN>> hidden
        BorderColor<<HIDDEN>> hidden
    }
}


state " " as _ <<HIDDEN>> {
    state State1
    state State2
    state State4
    state State5
}


[*]    -down->  State1
State1 -down->  State2
State1 -right-> State3
State2 -right->    State3
State2 -down->  State4
State4 -->      State5
State5 -->      [*]
@enduml

很棒的答案,我没想到可以通过查看PlantUML来完成。 - bruno
1
@bruno 嗯,我有一个优势,就是在转换到PlantUML之前已经大量使用过Graphviz。由于PlantUMl使用Grahpviz布局引擎,因此我以前的许多知识对于这些边缘情况非常有用。 :-) - Potherca
太棒了!你对这个工具真是驾轻就熟! - Christophe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接