PlantUML 连接线样式

问题描述 投票:0回答:1

我用plantuml画类图,但是连接线的位置不是我期望的(挤在一起),代码如下:

@startuml "mediator module"
' 默认线是圆弧状
' 多段线
' skinparam linetype polyline
' ortho 是垂直线
skinparam linetype ortho

class Mediator {
    +{abstract} createCtrl() : void
    +{abstract} ctrlChanged(CtrlParent*) : void
}

class ConcrMediator {
    +virtual createCtrl() : void
    +virtual ctrlChanged(CtrlParent*) : void
}

class CtrlParent {
    #m_pmediator : Mediator
    +virtual Changed() : void
    +{abstract} Enable(bool) : void
}

together {
    class Button {
    +virtual Enable(bool) : void
    }

    class RadioBtn {
        +Selected(bool) : void
        +virtual Enable(bool) : void
    }

    class EditCtrl {
        +virtual Enable(bool) : void
        +isContentEmpty : bool
    }

}

Mediator <|---down ConcrMediator

CtrlParent <|---right Button
CtrlParent <|---down RadioBtn
CtrlParent <|---down EditCtrl

CtrlParent o-left-> Mediator


ConcrMediator o-> RadioBtn
note on link : mp_rbtn1、mp_rbtn2

ConcrMediator o-right-> EditCtrl
note on link : mp_edtctrl1, mp_edtctrl2

ConcrMediator o-> Button
note on link : mp_login、mp_logout

@enduml

并绘制结果: connect line are huddled together

我尝试切换线型正交/折线和默认值,添加在一起(Button、RadioBtn、EditCtrl),但不起作用,我期望的 ConcrMediator 连接线有一些间隙,就像:

have some gap

position class-diagram plantuml
1个回答
0
投票

当 CtrlParent 的子类处于同一(垂直)级别时,会非常混乱(尤其是使用

note on link
)。所以,我交错了这些子类的垂直距离(这不完全是你想要的,但我希望它更好):

@startuml "mediator module"
' 默认线是圆弧状
' 多段线
' skinparam linetype polyline
' ortho 是垂直线
skinparam linetype ortho 
skinparam nodesep 150

together {
    class CtrlParent {
        #m_pmediator : Mediator
        +virtual Changed() : void
        +{abstract} Enable(bool) : void
    }

    class Button {
        +virtual Enable(bool) : void
    }

    class RadioBtn {
        +Selected(bool) : void
        +virtual Enable(bool) : void
    }

    class EditCtrl {
        +virtual Enable(bool) : void
        +isContentEmpty : bool
    }

}

class Mediator {
    +{abstract} createCtrl() : void
    +{abstract} ctrlChanged(CtrlParent*) : void
}

class ConcrMediator {
    +virtual createCtrl() : void
    +virtual ctrlChanged(CtrlParent*) : void
}


Mediator <|-- ConcrMediator

' vary the vertical distance by making line longer
CtrlParent <|---- Button
CtrlParent <|--- EditCtrl
CtrlParent <|-- RadioBtn

CtrlParent o-l-> Mediator

ConcrMediator o-> RadioBtn 
note on link: mp_rbtn, mp_rbtn2

ConcrMediator o-r-> EditCtrl
note on link: mp_edtctrl1, mp_edtctrl2

ConcrMediator o-> Button 
note on link: mp_login, mp_logout

@enduml

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.