5

Graphviz を使用して、C ヘッダー ファイル間の依存関係のグラフを描画しようとしています。

基本的に、私がやっていることは、表示されるすべての #include と条件 (つまり #if 条件) をログに記録することです。ファイルに別のファイルが含まれている場合、そのファイルはグラフ内でその親になり、潜在的な条件はエッジ ラベルです。

かなり大きなグラフが得られます。この問題は、常に水平 (変更できない) であり、常に左揃えのように見えるエッジ ラベルに起因します (labelloc と labeljust を試しましたが、何も変わりません。「中央」にする正しい方法は何ですか? 1 つのエッジのラベル。

この問題を回避するために、条件をノードとしてレンダリングしようとしました。Ah が ANSI 条件下で Bh を含む場合、Ah から ANSI へのリンクがあり、次に ANSI から Bh へのリンクがあります。問題ないように見えますが、問題は、Ch が同じ条件下で Dh を含む場合、Ah から ANSI へのリンクが表示されることです。 、Ch から ANSI への 1 つ。1 つは ANSI から Bh へ、もう 1 つは ANSI から Dh へ。問題は、 Bh を含むのが Ah なのか Ch なのかわからないことです。ノードを通過するようなものを指定する方法はありますか (ANSI の下にある Ah から Bh へのリンクは、透過性を利用している可能性があります)。

4

2 に答える 2

4

labelloc と labeljust は、エッジには意味がありません。hereを参照してください。「GC」はグラフ、クラスター、「N」はノードとしてそれぞれ表示されます。

ただし、ラベルを使用して条件ごとに一意のノードを生成することを検討できます。次に、異なる「ドット ID」を持つ複数のノードが存在しますが、ラベル (条件のテキスト) は同じであるため、含まれているか含まれているかはA.h明らかC.hですB.h。すでに大丈夫だと仰っていたので、結果に満足していただけると思います。

幸運を!

于 2009-05-06T17:57:36.953 に答える
2

説明している内容に応じて、同じラベルを持つ一意のノードを使用して多くの成功を収めました。エッジ ラベルが必要に応じて中央に配置されているように見せるための興味深い方法は、shape=plaintext でノードを使用することです。

これを使用して、結合ポイントを提供することもできます。以下に示すように、プレーンテキスト ノードに出入りする多数のエッジがあります。

digraph joins {

node [shape=box weight=bold fontsize=18 color=black fontcolor=black]
edge [color=black fontcolor=black ]
graph[size="6,4",ratio=fill,center=1]

tblXXMaster[shape=record label="tblXXMaster | <f0>intMasterXXNumber | <f1>boolXXsPrinting"] 
set[shape=plaintext label="sets flag"]
setandclear[shape=plaintext label="sets next value\nand clears flag"]
setandclear->tblXXMaster:f0
setandclear->tblXXMaster:f1

set->tblXXMaster:f1
use[shape=plaintext label="uses current\nnumber"]
tblXXMaster:f0->use
XX[shape=plaintext label="XXs\nflag"]
tblXXMaster:f1->XX

"wndManualReceipt\n.procOne"->setandclear
"wndManualDebit\n.procOne"->setandclear
"wndApproveXXs\n.procOne\n.d005TempSetBitToZero"->setandclear
"wndPrintXXs\n.procZero\n.procOne"->setandclear
"wndUnapproveXXs\n.procZero\n.procOne"->setandclear
"wndWriteXXForMultipleInvoices\n.procOne\n.d005TempSetBitToZero"->setandclear
"wndWriteManualXX\n.procOne\n.procZero"->setandclear

"wndConfirmXXPrint\n.applyLock"->set
"wndConfirmMultiInvoiceXXPrint\n.applyLock"->set

use->"wndConfirmXXPrint\n.nextNumber"
use->"wndConfirmManualXXPrint\n.nextNumber"
use->"wndConfirmMultiInvoiceXXPrint\n.nextNumber"
XX->"wndConfirmManualXXPrint\n.doPrint"
XX->"wndConfirmMultiInvoiceXXPrint\n.doPrint"
}
于 2009-05-27T16:09:05.650 に答える