39

我正在使用 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

有办法吗?

4

6 回答 6

19

使用-[hidden]关系可以完成这项工作:

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

Bob -[hidden] Alice
Bar -[hidden] Foobar
@enduml

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

于 2018-12-11T13:23:31.650 回答
17

更新 2019 年 8 月 8 日

从 Rotsiser 的评论中,通过将改变行的长度与 together 关键字相结合,它可以对齐元素

@startuml
class A
A ..> B
C ---> B
D ...> B
together {
    class E
    class F
    class G
}
E ----> B
@enduml

在此处输入图像描述


过时的

您可以通过更改行字符的数量来对齐元素,例如“-”、“.”等。

@startuml
class A
A ..> B
C ---> B
D ...> B
E ----> B
F ----> B
G ----> B
@enduml

在此处输入图像描述

于 2019-04-21T02:10:11.803 回答
13

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

实际上,PlantUML 的早期版本使用对齐类,但这是一个问题:当有许多不相关的类时,图表往往非常大而且非常薄。所以添加了一个补丁来在一个正方形中组织课程。

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

于 2012-07-19T19:58:37.037 回答
9

这是一个解决方案。

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

@startuml
foo -left-> dummyLeft 
foo -right-> dummyRight 
foo -up-> dummyUp 
foo -down-> dummyDown
@enduml

在此处输入图像描述

对于你的问题:

@startuml
class Bob
class Alice
class Dan
Alice -left[hidden]-> Bob
Alice -right[hidden]-> Dan 
@enduml

在此处输入图像描述

它也可能有用:

@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

在此处输入图像描述

于 2019-11-04T15:47:57.863 回答
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

在此处输入图像描述

于 2018-12-22T05:54:34.733 回答
6

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

together {
class A
class B
}
于 2019-07-31T09:33:43.640 回答