Как исправить Path Line в PlantUML

Я создал эту диаграмму, используя следующий код. Но, как вы можете видеть, линии, идущие от (Отмена заказа) и (Разместить заказ) до (Издатель), решают пойти по ужасно округленному пути, чтобы получить их, вместо того, чтобы идти прямо вправо и затем вниз к издателю. Я пытался использовать команды ручного управления, такие как "-down", но ни одна из них не помогла. Кто-нибудь знает, как это исправить?

А вот и мой код. Я ценю любую помощь. Спасибо.

@startUML EBook Use Case Diagram
left to right direction
Actor Customer as customer
Actor EBook as ebook
Actor Publisher as publisher
rectangle "Book Catalogue" {
    together {
        Actor "Book Database" as bookLog
        (Retrieve Information) as getBook
        customer -- getBook
        getBook -- ebook
        getBook -- bookLog

        (Update Catalogue) as updateCatalogue
        ebook -- updateCatalogue
        updateCatalogue -- bookLog
    }

    together {
        (Place Order) as order
        customer -- order
        order -- ebook
        order--publisher

        (Cancel Order) as cancelOrder
        customer -- cancelOrder
        cancelOrder -- ebook
        cancelOrder--publisher
    }
}

(Ship To EBook) as shipEBook
shipEBook -- publisher
(Ship To Customer) as shipCustomer
customer -- shipCustomer
ebook -- shipEBook
shipCustomer -- ebook

(Return to EBook) as returnCustomer
(Returnto Publisher) as returnPublisher
customer -- returnCustomer
returnCustomer -- ebook
ebook -- returnPublisher
returnPublisher -- publisher

@endUML

5 ответов

Решение

Ниже приведены некоторые приемы, которые вы можете попробовать. Сам макет выполняется GraphViz (точечный макет iirc), и GraphViz иногда делает это просто. Построение графика является NP-полной проблемой, поэтому алгоритмы обычно используют жесткие комбинации.

Типичные обходные пути, которые я видел или использовал, включают:

  • добавление скрытых линий a -[hidden]- b
  • увеличивая длину линии a --- b (больше тире, длинная линия)
  • указание предпочтительного направления линий (a -left- b)
  • обмен ассоциации заканчивается (a -- bb -- a)
  • изменение порядка определений (порядок имеет значение... иногда)
  • добавление пустых узлов с цветом фона / границы, установленным в прозрачный

Поэтому, если вы действительно хотите иметь хороший макет, вам нужно будет нанести немного локоть, но имейте в виду, что макет все еще будет хрупким - если вы добавляете / удаляете элементы, вам, возможно, придется повторить его снова.

Попробуйте варианты, предложенные @Peter Uhnak вместе с типом линии:

skinparam linetype polyline
skinparam linetype ortho

Дайте лучшие варианты для линий. Используя орто - ( Здесь)

ты получишь -

Чтобы сделать соединение менее важным в макете, используйте [norank], например, a -[norank]-> b

Если кто-то хочет узнать более конкретный, поставьте, вероятно, гораздо более бесполезный ответ, вот что я сделал в конце.

    order -down- publisher
    publisher -[hidden]up- order

поэтому по какой-то причине добавление дублированной команды в обоих случаях решает ее.

Все эти хорошие ответы собраны и приведены в полуофициальном Hitchhiker's Guide to PlantUML . См . раздел Макет .

Не уверен, как это было 3 года назад, но, вероятно, сейчас это лучшая отправная точка для настроек PlantUML, чем SO.

Другие вопросы по тегам