如何纠正PlantUML线路径

aSa*_*Wow 14 diagram uml sequence-diagram graphviz 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
Run Code Online (Sandbox Code Playgroud)

fkl*_*fer 18

要使布局中的连接不那么重要,请使用[norank],例如,a -[norank]-> b

  • 我这个答案的目标是在相关功能被很好地列出(并被接受为答案)的地方以最小的认知负荷记录一个未记录的 PlantUML 功能。PlantUML 的用户会在这个问题的上下文中欣赏“norank”。 (3认同)

Pet*_*nak 17

您可以尝试以下一些技巧。布局本身由GraphViz(点​​布局iirc)执行,而GraphViz有时只是这样做。图的布局是一个NP完全问题,因此算法通常会采用苛刻的捷径。

我见过或使用过的典型变通方法包括:

  • 添加隐藏线 a -[hidden]- b
  • 延长线的长度a --- b(更多的破折号,更长的线)
  • 指定线的首选方向(a -left- b
  • 交换关联结束(a -- bb -- a
  • 更改定义的顺序(顺序确实很重要……有时)
  • 添加背景/边框颜色设置为“透明”的空节点

因此,如果您确实想要一个不错的布局,则需要在其中添加一些肘部润滑脂,但请记住,布局仍然会很脆弱-如果添加/删除项目,则可能需要再次重做。

  • 我想指出 @aSamWow 所做的“together”的使用。我以前不知道这个命令,但我只是成功地使用了它,如下所示:`together group1 { class a class b } Together group2 { class c class d } group1 -[hidden]- group2` (3认同)

Nik*_*hil 12

尝试使用@Peter Uhnak和linetype建议的选项:

skinparam linetype polyline
skinparam linetype ortho
Run Code Online (Sandbox Code Playgroud)

为行提供更好的选择。使用邻位-(在这里

你会得到 -

在此处输入图片说明


aSa*_*Wow 11

如果有人想知道一个更具体的答案,可能给出更多无用的答案,这就是我最后所做的。

    order -down- publisher
    publisher -[hidden]up- order
Run Code Online (Sandbox Code Playgroud)

因此由于某种原因,两种方式都可以添加重复的命令来解决它。