57736
![2](https://i.stack.imgur.com/dSL49.png)

PlantUMLで上記のような図を作りたいと思い、以下のようなcodeを書きました。

```

    @startuml
    skinparam componentStyle uml2
    left to right direction
    frame Process {
        [A].r.>[X]: piyot
        [A].r.>[Y]: piyot
        [X]-[hidden]d-[Y]
    }
    Input .r.> [A]
    [A] <.u.> [B]: hoget
    @enduml
    
```

すると、以下のような図になってしまいました...

![1](https://i.stack.imgur.com/Lx9uI.png)

実際、1枚目の所望の配置になるようにするには、以下のようなcodeになってしまいました...

```

    @startuml
    skinparam componentStyle uml2
    left to right direction
    frame Process {
        [A].r.>[X]: piyot
        [A].d.>[Y]: piyot
        [X]-[hidden]l-[Y]
    }
    Input ..> [A]
    [A] <.l.> [B]: hoget
    @enduml
    
```

所望の配置は得られたのですが、全く理解できません。  
1つ目のcodeで所望の図が得られない理由が知りたいです。

PlantUMLでは所望の配置にならない事も多く困っているのですが、所望の配置となるようにするためのコツや暗黙のルール、心がける事のようなものは無いでしょうか？

解答よろしくお願いします。

* * *

### 環境

Windows10 Pro (64bit) 1809  
VisualStudio Code 1.36.1  
PlantUML 2.11.2  
JRE 1.8.0_221
CC BY-SA 4.0
2019-08-23T09:59:12.867
57568
2019-09-01T00:09:30.463
2383
question
vscode plantuml
PlantUML on VSCodeで思うような配置にできない
質問の方は画面の下を`down`、画面の右を`right`と想定されてませんでしょうか。

エッジの出場所を示すキーワードは以下ですが、  
* l: left  
* r: right  
* u: up  
* d: down

`left to right direction`の場合、向きの基準は図の左です。  
※ 画面の右が`down`、画面の下が`left`となります。

所望されている配置にするには  
以下のコードで十分です、

```

    @startuml
    skinparam componentStyle uml2
    left to right direction
    frame Process {
        [A]..>[X]: piyot
        [A]..>[Y]: piyot
        [X]-[hidden]l-[Y]
    }
    Input ..> [A]
    [A] <.l.> [B]: hoget
    @enduml
    
```

先に提示したコードでは、以下のエッジにleftを指定しています。  
* XからY  
* AからB

XのleftつまりXの画面下側からYに見えないエッジを引くことによって、XとYの位置を上下(画面上)逆転しています。  
AとBの場合はAのleft(画面では下側)からBにエッジを引くことによって、Aの下にBが配置させようとしています。

PlantUMLを書くときは、できるだけエッジの向きを指定せず、向きの指定は最小限にとどめるのがよいと思います。  
向きの指定が多くなると、指定が背反する可能性が高まり、PlantUMLの振る舞いを「予想する」のが困難になります。

何か事情があって配置を変えようとされているのだと推察しますが、「PlantUMLの配置」は基本的にはコントロールできないと考えた方がよいとおもいます。
CC BY-SA 4.0
2019-08-31T14:29:47.053
57736
2019-09-01T00:09:30.463
2019-09-01T00:09:30.463
35558
35558
57568
answer