如何在PlantUML类图中对齐块?

Yur*_*kov 25 uml plantuml

我正在使用PlantUML来制作简单的类图,并且该工具很棒,但除了将它们放入包或使用像Alice -left-*Bob之类的关系之外,我找不到任何方法将类彼此对齐.我需要的是:

@startuml  
class Bob  
class Alice  
class Dan  
**Dan aligned Alice: horizontally**  
'or using a grid?  
**Bob at grid (2, 3)**  
@enduml
Run Code Online (Sandbox Code Playgroud)

有办法吗?

Pla*_*UML 13

不,没有办法做到这一点,对不起:( PlantUML背后的想法是你不应该太在意布局渲染.

实际上,早期版本的PlantUML用于对齐类,但这是一个问题:当存在许多不相关的类时,图表往往非常大且非常薄.因此添加了一个补丁来组织一个正方形的类.

你想在图表中有多少个类?当然可以禁用例如3到5个类的组织补丁.您可以向论坛发布建议,以了解其他用户对此的看法.

  • 我想到了一个替代方案,它应该不是很难实现:添加"group",它允许以"package"或"namespace"相同的方式对几个对象进行分组(但是没有框架).这可以有其他选项,如"水平"或"垂直",但它并不重要.重要的是,我们应该能够在整个图表完成后通过简单地添加"group {Bob Alice Animals.Cat}"来对类进行分组,这将迫使类保持彼此靠近. (2认同)

Dmi*_*yuk 8

这是一个解决方案。

文档: “也可以通过在箭头内添加左、右、上或下关键字来更改箭头方向:”

@startuml
foo -left-> dummyLeft 
foo -right-> dummyRight 
foo -up-> dummyUp 
foo -down-> dummyDown
@enduml
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

对于你的问题:

@startuml
class Bob
class Alice
class Dan
Alice -left[hidden]-> Bob
Alice -right[hidden]-> Dan 
@enduml
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

它也可能有用:

@startuml
class Bob
class Alice
class Dan
Bob -right-|> Alice
Alice -right-> Dan
interface Friend
Dan -up..> Friend
interface Person
Friend -left-> Person
interface Object
Person -down-> Object
interface Native
Object -right-> Native
@enduml
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Aje*_*nga 6

更简洁的方法是将它们放在一个隐藏的包中,这更合乎逻辑。

@startuml

skinparam shadowing false
skinparam package<<Layout>> {
  borderColor Transparent
  backgroundColor Transparent
  fontColor Transparent
  stereotypeFontColor Transparent
}

package x <<Layout>>{ 
    class A
    class B
} 
A .. D
B .. C
C .. D

A1 .. D1
B1 .. C1
C1 .. D1

@end
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Yu *_*ang 6

UPDATES Aug.08.2019

From Rotsiser's comment, by combining changing the length of lines with together keyword, it can align elements

@startuml
class A
A ..> B
C ---> B
D ...> B
together {
    class E
    class F
    class G
}
E ----> B
@enduml
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


OUTDATED

您可以通过更改行号(例如'-','。'等)来对齐元素。

@startuml
class A
A ..> B
C ---> B
D ...> B
E ----> B
F ----> B
G ----> B
@enduml
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这将不会对齐项目,这会增加连接器的长度。仍然有帮助,但并非完全符合我的期望。 (2认同)
  • 将此与建议使用“together”关键字的其他答案结合起来,我得到了很好的结果。 (2认同)

小智 6

你不需要 a hidden package,使用together关键字:

together {
class A
class B
}
Run Code Online (Sandbox Code Playgroud)


fre*_*zed 5

使用-[hidden]关系可以完成以下任务:

@startuml  
class Bob  
class Alice  
class Dan  
class Foo
class Bar
class Foobar

Bob -[hidden] Alice
Bar -[hidden] Foobar
@enduml
Run Code Online (Sandbox Code Playgroud)

http://www.plantuml.com/plantuml/png/Iyv9B2vMSCfFKb3WIWQp7NCoarFXF9V4F3ZRBJyVod9AB4A89G4vN20JTACpCbDIKlDY8MPm0LKXYK5K0W00