How to align blocks in PlantUML class diagrams?

微笑、不失礼 提交于 2021-02-04 10:38:19

问题


I am using PlantUML to make simple class diagrams and the tool is awesome, but I couldn't find any way to align classes with each other except putting them into packages or using relationships like Alice -left-* Bob. What I need is something like:

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

Is there a way?


回答1:


Using a -[hidden] relation can do the job :

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

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




回答2:


No, there's no way to do that, sorry :( The idea behind PlantUML is that you should not care too much about the layout rendering.

Actually, early versions of PlantUML use to align classes, but it was an issue: When there were many unrelated classes, diagrams tended to be very large and very thin. So a patch was added to organize classes in a square.

How many classes do you want to have in your diagram? Sure it would be possible to disable the organizing patch for e.g. 3 to 5 classes. You could post a suggestion to the forum to see what other users think about it.




回答3:


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


OUTDATED

You are able to align elements by changing the number of line's character, such as '-', '.', and so on.

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




回答4:


A cleaner approach is to put them in a hidden package, which is more logical.

@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




回答5:


You don't need a hidden package, use the together keyword:

together {
class A
class B
}



回答6:


Here is a solution.

The documentation: "It is also possible to change arrow direction by adding left, right, up or down keywords inside the arrow:"

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

To your question:

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

It may also be useful:

@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



来源:https://stackoverflow.com/questions/11557426/how-to-align-blocks-in-plantuml-class-diagrams

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!