【发布时间】:2014-06-01 13:34:06
【问题描述】:
我是 Graphviz/Dot 的新手,并尝试创建我的第一个点图。 基础知识进行得非常快,但修复布局花了我很多时间,我想我现在已经浪费了足够的时间,最好向更有经验的人寻求帮助......
这是关于边缘的路由,我已经尝试通过告诉在节点处定位边缘的位置来修复它,如下所述:Strange edge placement in Graphviz Dot 这行得通,但路由是同样奇怪的东西(在所有内容中应该向右而不是向左)。
第二个是左边三个底部节点的节点放置。这可以更好地放置,以便图表完美适合肖像 A4 页面...
digraph {
"PassSlave1" [label="Pass command to slave (2nd tier)"]
"PassSlave2" [label="Pass command to slave (2nd tier)"]
"Success1" [label="CMD_SIGNAL_SUCCESS", shape=box]
"Success2" [label="CMD_SIGNAL_SUCCESS", shape=box]
"PowerUp" [label="Power up / System reset", peripheries=2, color="red", fontcolor="red"]
"Acknowledge1" [label="CMD_SIGNAL_ACKNOWLEDGE", shape=box]
"Acknowledge2" [label="CMD_SIGNAL_ACKNOWLEDGE", shape=box]
subgraph bl {
"PowerUp" -> "Wait for \"Enter bootloader\" request"
"Wait for \"Enter bootloader\" request" -> "Enter bootloader" [label="\"Enter bootloader\" request received"]
"Wait for \"Enter bootloader\" request" -> "Start Firmware" [label="Timeout while awaiting \"Enter bootloader\" request"]
"Enter bootloader" -> "idle" // [constraint=false]
"idle" -> "idle" [label="No command received"]
"idle" -> "Check device ID" [label="SET_BOOTLOAD_TARGET (Device ID) received"]
}
subgraph {
rankdir=LR
subgraph match {
"Check device ID" -> "Acknowledge1" [label="Match"]
"Acknowledge1" -> "isTarget (flash mode)"
"isTarget (flash mode)" -> "Acknowledge2" [label="CMD_START_DOWNLOAD (Byte count) received"]
"Acknowledge2" -> "isTarget (flash mode)"
"isTarget (flash mode)" -> "isTarget (flash mode)" [label="No data / commands received"]
"isTarget (flash mode)" -> "Process data (Hex records)" [label="Data received"]
"Process data (Hex records)" -> "isTarget (flash mode)" [constraint=false]
"isTarget (flash mode)" -> "Success1" [label="CMD_END_DOWNLOAD received"]
"Success1" -> "idle" [constraint=false]
//"Process data (Hex records)" -> "isTarget (flash mode)" [label="No error occured"]
//"Process data (Hex records)" -> "isTarget (flash mode)" [label="Error occured"]
}
subgraph mismatch {
"Check device ID" -> "Pass command to slaves (2nd tier)" [label="Mismatch"]
"Pass command to slaves (2nd tier)" -> "awaitingSlaveBootloadTargetAcknowledge"
"awaitingSlaveBootloadTargetAcknowledge" -> "awaitingSlaveBootloadTargetAcknowledge" [label="No acknowledge received"]
"awaitingSlaveBootloadTargetAcknowledge" -> "hasTarget" [label="Acknowledge received"]
"hasTarget" -> "hasTarget" [label="No command received"]
"hasTarget" -> "PassSlave1" [label="CMD_START_DOWNLOAD (Byte count) received"]
"PassSlave1" -> "awaitingSlaveStartDownloadAcknowledge"
"awaitingSlaveStartDownloadAcknowledge" -> "awaitingSlaveStartDownloadAcknowledge" [label="No acknowledge received"]
"awaitingSlaveStartDownloadAcknowledge" -> "hasDownloadTarget" [label="Acknowledge received"]
"hasDownloadTarget" -> "hasDownloadTarget" [label="No data / commands received"]
"hasDownloadTarget" -> "Pass data (Hex records) to slave (2nd tier)" [label="Data received"]
"Pass data (Hex records) to slave (2nd tier)" -> "hasDownloadTarget"
//"hasDownloadTarget" -> "awaitingSlaveEndDownloadResponse" [label="CMD_END_DOWNLOAD received"]
"hasDownloadTarget" -> "PassSlave2" [label="CMD_END_DOWNLOAD received"]
"PassSlave2" -> "awaitingSlaveEndDownloadResponse"
"awaitingSlaveEndDownloadResponse" -> "awaitingSlaveEndDownloadResponse" [label="No command received"]
"awaitingSlaveEndDownloadResponse" -> "Success2"
"Success2":e -> "idle":n [constraint=false]
}
}
}
【问题讨论】: