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