Graphviz / Dot 中基于产品的规划图

Product Based Planning diagram in Graphviz / Dot

我正在尝试在 Dot 中制作一个 "Product Based Planning" 图,但我不太清楚如何获得结构,我正在寻找。

这是我到目前为止编写的代码:

graph ProductBasedPlanning
{
  node [shape="box"];
  rankdir = "TB";
  splines="FALSE";
  "Main product" -- {"Functionality 1" "Functionality 2"}

  "Functionality 1" -- {"Functionality 1a" "Functionality 1b"}
}

但我希望创建这样的东西:

那么,如何让线条以 90 度角移动? 以及如何 "stack" 示例中的方框?

感谢您的帮助。

我使用了 rank="same"shape="point" 节点。

graph ProductBasedPlanning
{
    node [shape="box"];
    rankdir = "TB";
    splines=false

    "xm1" [shape="point"]
    "xm2" [shape="point"]
    "xm3" [shape="point"]

    "Main product" -- "xm2" 

    {
        rank="same"
        "xm1" -- "xm2" -- "xm3" [constraint=false]
    }

    "xm1" -- "Functionality 1"
    "xm2" -- "Functionality 2"
    "xm3" -- "Functionality 3"

    "Functionality 1" -- "x1a" -- "x1b" -- "x1c"
    "Functionality 2" -- "x2a" -- "x2b" -- "x2c"
    "Functionality 3" -- "x3a" -- "x3b" -- "x3c"

    {
        rank="same"
        "x1a" [shape="point"]
        "x1a" -- "Functionality 1a" 
    }
    {
        rank="same"
        "x1b" [shape="point"]
        "x1b" -- "Functionality 1b"
    }
    {
        rank="same"
        "x1c" [shape="point"]
        "x1c" -- "Functionality 1c"
    }

    {
        rank="same"
        "x2a" [shape="point"]
        "x2a" -- "Functionality 2a"
    }
    {
        rank="same"
        "x2b" [shape="point"]
        "x2b" -- "Functionality 2b" 
    }
    {
        rank="same"
        "x2c" [shape="point"]
        "x2c" -- "Functionality 2c"
    }

    {
        rank="same"
        "x3a" [shape="point"]
        "x3a" -- "Functionality 3a"
    }
    {
        rank="same"
        "x3b" [shape="point"]
        "x3b" -- "Functionality 3b"
    }
    {
        rank="same"
        "x3c" [shape="point"]
        "x3c" -- "Functionality 3c" 
    }
}