Как выровнять блоки в диаграммах классов 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

Есть ли способ?

Ответ 1

Нет, нет никакого способа сделать это, извините :( Идея, стоящая за PlantUML, заключается в том, что вам не нужно слишком заботиться о рендеринге макета.

На самом деле ранние версии PlantUML использовали для выравнивания классов, но это была проблема: когда было много не связанных классов, диаграммы имели тенденцию быть очень большими и очень тонкими. Поэтому был добавлен патч для организации классов в квадрате.

Сколько классов вы хотите иметь на диаграмме? Конечно, можно было бы отключить патч для организации, например, от 3 до 5 классов. Вы можете опубликовать предложение на форуме, чтобы узнать, что другие пользователи думают по этому поводу.

Ответ 2

Использование отношения -[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

Ответ 3

Более чистый подход - поместить их в скрытый пакет, что более логично.

@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

enter image description here

Ответ 4

Вы можете выравнивать элементы, изменяя количество символов строки, например, "-", "." И так далее.

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

enter image description here