У меня есть простой график fdp, выложенный в graphviz, с кучей узлов (прямоугольной и ромбовидной), имеющих фиксированные позиции, а некоторые из этих узлов имеют дочерние узлы (овальной формы), которые я хочу расположить вокруг них автоматически .
Я хочу, чтобы все ребра в нем были прямыми, без кривых, полилиний или чего-либо еще (т. Е. Как указано splines=false
), но я также хочу, чтобы эти дочерние узлы не перекрывались с ребрами между узлами с фиксированным позиции. Фиксированные позиции используются, так как мне нужны края между фиксированными узлами, чтобы они были полностью вертикальными или горизонтальными. Это то, чего я, вероятно, могу достичь, перебирая различные значения start
и надеясь, что у следующего не будет перекрытий, но пока это немного утомительно.
digraph G {
###GRAPH
layout=fdp
overlap=false
dpi=150
splines=false
inputscale=0.4
# fdp specific:
K=0.50
maxiter=2000
start=1251
###OBJECTS
node[shape=rectangle width=1.0 height=0.4 fixedsize=true]
vendor[label="Поставщик" pos="3,1!"
]
item[label="Товар" pos="0,2!"
]
post[label="Поставка" pos="2,2!"
]
check[label="Чек" pos="1,1!"
]
prod[label="Продажа" pos="0,0!"
]
###SUBOBJECTS
node[shape=oval width=1.5 height=0.5]
edge[arrowhead=none]
{
vendork[label=<<u>ID поставщика</u>>] "Название\nпоставщика" "Контакт\nдля связи"
}->vendor
{
itemk[label=<<u>ID товара</u>>]
Название Тип Подтип Характеристики "Розничная цена"
}->item
{
postk[label=<<u>ID записи</u>>] post1[label="ID товара"]
post2[label="Кол-во"] post3[label="Цена поставки"]
post4[label="Дата"] post5[label="Квитанция"]
}->post
{
prodk[label=<<u>ID продажи</u>>] prod1[label="ID товара"]
prod2[label="Кол-во"] prod3[label="Цена\nпродажи"]
prod4[label="Чек"]
}->prod
{
checkk[label=<<u>ID чека</u>>] Дата Кассир "Сумма" "НДС" "Итого" "Вид оплаты"
}->check
###CONNECTIONS
node[shape=diamond]
edge[arrowhead=open]
vendorpost[label="Поставляет" pos="3,2!"
]
vendorpost->vendor
vendorpost->post[arrowhead=openopen]
postitem[label="Поставлен" pos="1,2!"
]
postitem->item
postitem->post[arrowhead=openopen]
itemprod[label="Продан" pos="0,1!"
]
itemprod->item
itemprod->prod[arrowhead=openopen]
prodcheck[label="Включает" pos="1,0!"
]
prodcheck->prod[arrowhead=openopen]
prodcheck->check
}
(простите за кириллицу)
Я компилирую без дополнительных параметров (например, dot -Tpng graph.gv > graph.png
). До сих пор я получаю это.
Я также пытался использовать Neato, но, в большинстве случаев, это дает довольно странный результат где кажется, что он полностью игнорирует фиксированные позиции узлов, и dr aws дочерние узлы, где он хочет:
Я прошел через список атрибутов в документации , и пока ни один из них, похоже, не решает проблему перекрытия узлов / ребер, кроме splines
(если я что-то не пропустил). Что я должен сделать, чтобы достичь результата, которого я ищу?