点格式UML状态图中的子状态

点格式UML状态图中的子状态,uml,dot,Uml,Dot,我试图使用点格式生成一个基本的UML状态图。这是我目前的档案: digraph { compound=true; node [shape=Mrecord] rankdir="LR" subgraph cluster0 { label = "D" B [label = "B"] C [label = "C"] } A [label = "A|entry / EnterA\nexit / ExitA"] A -> B [ style="solid",label="X"

我试图使用点格式生成一个基本的UML状态图。这是我目前的档案:

digraph {
compound=true;
node [shape=Mrecord]
rankdir="LR"

subgraph cluster0
    {
    label = "D"
B [label = "B"]
C [label = "C"]
}
A [label = "A|entry / EnterA\nexit / ExitA"]

A -> B [   style="solid",label="X" ];
A -> C [   style="solid",label="X" ]; 
}
通过运行它,它看起来很像我想要的,除了我不知道如何使超级国家D有圆角,水平线和出入境条件,就像州A一样

有没有办法将这些东西添加到点子图中


p、 s.Graphviz说:“但是当我尝试这个方法时,大多数引擎都给了我一个非常糟糕的图表,其中过渡箭头甚至没有接近状态,这就是为什么我要使用“过时的”基于记录的形状而不是HTML。

子图可以具有style=rounded属性,所以我想这就是你想要的 (还添加了html标签作为奖励):

有向图{
复合=真;
节点[shape=Mrecord]
rankdir=“LR”
子图簇0{
label=“D”
样式=四舍五入
B[label=“B”]
C[label=“C”]
}
A[标签=
边距=0形状=无]
A->B[style=“solid”label=“X”];
A->C[style=“solid”label=“X”];
}

Graphviz使用图或子图中的边和节点。你已经制作了一个A节点,以及B和C。我认为这些不能被转换成D中的某种标签。你可以像A一样格式化D,让B和C在D中不可见。这将使渲染与意义tho分离。我无法想象一个干净的解决方案。这并不能回答您的问题,但可能会很有用:在做UML图时,我一直在使用“plantuml”。它使用点作为后端,并且更容易获得更好的结果。你想把D作为一个状态吗?是吗?
digraph {
  compound=true;
  node [shape=Mrecord]
  rankdir="LR"

  subgraph cluster0 {
    label = "D"
    style = rounded 
    B [label = "B"]
    C [label = "C"]
  }
  A [label = <<table cellborder="0" style="rounded">
        <tr><td>A</td></tr>
        <hr/>
        <tr><td>entry / EnterA<br/>exit / ExitA</td></tr>
        </table>> 
     margin=0 shape=none]
  A -> B [style="solid" label="X"];
  A -> C [style="solid" label="X"]; 
}