Plant UML 状态图中的状态是否可以相对于另一个状态定位?

Can states in a Plant UML state diagram be positioned relative to another state?

我制作了一个 plantuml 状态图,如下所示:

我想将 "MainActivity" 状态置于 "Idle" 状态的右侧,这样 [instruction] 和 [done] 的箭头最终水平。

我知道这可以用于注释和文本,但我还没有看到状态本身的任何语法。

这在 PlantUML 中可行吗?

作为参考,这是我的 PlantUML 脚本:

@startuml

skinparam state {
    StartColor PaleGreen
    EndColor Red
    BackgroundColor Gold
    BackgroundColor<<Junction>> GreenYellow  
    BorderColor Gray
    FontName Consolas
}

[*] -> Creating
Creating --> Idle : initialised
Idle : wait here for instructions
Idle --> MainActivity : [instruction]

state MainActivity {    
    [*] --> DoFirstThing    
    DoFirstThing --> FirstThingSuccess : [OK]
    DoFirstThing --> FirstThingFailed : [not OK]
    FirstThingSuccess --> SecondThing
    SecondThing --> SecondThingFailed
    SecondThing --> SecondThingSuccess  
    SecondThingSuccess --> WritingReport
    SecondThingFailed --> WritingReport
    FirstThingFailed --> WritingReport
    WritingReport --> [*]
}

MainActivity --> Idle : [done]

@enduml

是的。您可以通过将箭头插入箭头符号的破折号之间来定义箭头的方向,例如 "MainActivity -left-> Idle"(请参阅 PlantUML 参考指南中的第 7.5 节)。

以下代码:

plantuml
@startuml

skinparam state {
    StartColor PaleGreen
    EndColor Red
    BackgroundColor Gold
    BackgroundColor<<Junction>> GreenYellow  
    BorderColor Gray
    FontName Consolas
}

[*] -> Creating
Creating --> Idle : initialised
Idle : wait here for instructions
Idle -left-> MainActivity : [instruction]

state MainActivity {    
    [*] --> DoFirstThing    
    DoFirstThing --> FirstThingSuccess : [OK]
    DoFirstThing --> FirstThingFailed : [not OK]
    FirstThingSuccess --> SecondThing
    SecondThing --> SecondThingFailed
    SecondThing --> SecondThingSuccess  
    SecondThingSuccess --> WritingReport
    SecondThingFailed --> WritingReport
    FirstThingFailed --> WritingReport
    WritingReport --> [*]
}

MainActivity -left-> Idle : [done]

@enduml

给你这个图表:

(PS :您可以对 "Creating" 状态执行相同的操作以使其看起来更一致)