如何纠正PlantUML线路径

如何纠正PlantUML线路径,uml,graphviz,diagram,sequence-diagram,plantuml,Uml,Graphviz,Diagram,Sequence Diagram,Plantuml,我使用以下代码创建了这个图。但正如您所看到的,从(取消订单)和(下订单)到(发布者)的行决定采用一条非常圆的路径来获取它们的订单,而不是直接向右然后向下到发布者。我试着使用手动方向命令,比如“-down”,但似乎没有一个有用。有人知道怎么解决这个问题吗 这是我的密码。谢谢你的帮助。多谢各位 @startUML EBook Use Case Diagram left to right direction Actor Customer as customer Actor EBook as eboo

我使用以下代码创建了这个图。但正如您所看到的,从(取消订单)和(下订单)到(发布者)的行决定采用一条非常圆的路径来获取它们的订单,而不是直接向右然后向下到发布者。我试着使用手动方向命令,比如“-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

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

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

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

因此,如果你真的想有一个好的布局,你需要在里面放一些润滑脂,但请记住,布局仍然很脆弱——如果你添加/删除项目,你可能需要重新做一次。

如果有人想知道一个更具体、可能更无用的答案,下面是我最后做的

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

因此,出于某种原因,双向添加重复命令可以解决此问题。

尝试@Peter Uhnak建议的选项以及线型:

skinparam linetype polyline
skinparam linetype ortho
为线路提供更好的选项。 使用正交-()

你会得到-


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

好主意,它确实解决了问题,但正交线会弄乱plant UML中的标签,因此我尝试在更复杂的图中避免使用它们。“线型正交中的标签定位错误”-请投赞成票:你是如何使画面如此清晰的?您是否先导出到svg,然后再转换为png?嘿,我刚刚用vscode plant uml扩展导出到图像(可能是png?)。我不再使用vscode或plantuml,因此我帮不了什么忙,对不起。我想指出@aSamWow一起使用
。我以前不知道这个命令,但我只是成功地像下面这样使用它:
一起group1{class a class b}一起group2{class c class d}一起group1-[hidden]-group2
我不知道行长度特性!非常感谢你!我的这个答案的目标是在相关特性被很好地列出(并被接受为答案)的地方以最小的认知负载记录一个未记录的PlantUML特性。PlantUML的用户将在这个问题的上下文中感谢norank。我对此表示感谢。我从来不知道诺兰克的选择@Fkledorfer>出于某种原因:我想原因是每一条边都会增加重量。在Graphviz中,可以指定边的权重,但在PlantUML中,我还没有找到这样做的方法。