1

グラフを描くために必要なデータに書いた描画関数を呼び出します。
描画機能は次のように機能します。まず、テキスト ファイルを作成します。これは基本的に .dot ファイルです。つまり、Graphviz / dot.exe はそれを処理する方法を知っています。生成されたファイルは次のようになります。

graph{
resolution=1000;
1[
label ="" 
pos = "552,552!"
width = 0.002
height = 0.002
fixedsize=true
fontsize = 8
color =red
penwidth = 0.1, color = black, shape = box, width = 0.07, height = 0.07, label = ""
]
74[
label ="" 
pos = "450,552!"
width = 0.002
height = 0.002
fixedsize=true
fontsize = 8
color =red
shape = point
]
(...)
1 -- 74[penwidth = 0.099, color="red"]
74 -- 40[penwidth = 0.099, color="red"]
40 -- 32[penwidth = 0.099, color="red"]
32 -- 18[penwidth = 0.099, color="red"]
(...)
}

ファイルを生成した後、関数は次のフラグを使用して dot.exe プロセスを呼び出します。

ProcessStartInfo startInfo = new ProcessStartInfo("dot.exe");
startInfo.Arguments = "-Kneato -Goverlap=prism -Tpng " + fileName + ".txt -o " + fileName + ".png";

さまざまなフラグ、画像形式などを使用してみましたが、どれも問題を解決しません。

私のアプリケーションは基本的に、いくつかのボタンと 2 つの PictureBox を備えたインターフェイスで構成されています。ボタンの 1 つをクリックすると、「プログラムの重要な部分」が実行されます。
「重要な部分」は実行に時間がかかるため、BackgroundWorker を使用しました。そこで (backgroundWorker1_DoWork 関数で) 何が起こるか:
いくつかの計算が行われ、結果のデータに対して描画関数が 2 回呼び出されます。2 つの画像を作成し、PictureBox に「配置」します。

ほとんどのデータでは問題なく機能しますが、一部のデータでは機能しません。一部のデータでは、PictureBoxes に画像が表示されません。テキストファイルと画像が作成されたはずのフォルダを確認すると、最初のPictureBoxに入るテキストファイルと結果の画像だけが作成されていることがわかります...しかし、それらも表示されません。私の結論は、何かが BackgroundWorker プロセス全体を停止させ、おそらく dot.exe プロセスで何らかのエラーが発生したということです。
これで、プロセスが呼び出されるたびに、コンソールが一瞬だけ表示されます。そこに役立つデータが表示されるかもしれませんが、それを読み取る方法がわかりません。

私のアプリケーションの以前のわずかに異なるバージョンがあります。これは、現在のバージョンが機能しないのと同じデータでは機能しません。
ただし、古いバージョンでは、コンソール出力を読み取ることができ (おそらくプログラム全体がクラッシュするため)、次の行に沿って何かが表示されます。

Graph is too large for cairo renderer bitmaps.   
Scaling by 0.4 to fit dot: failure to create cairo surface: out of memory. 

このエラーは、に大きなグラフで発生しますが、大きなグラフだけではありません。いくつかの大きなグラフは正常に機能し、一部の小さなグラフはうまく機能しません。とにかく、どれも特に大きなものではありません。最大のものは約 80 ノードです。解像度とか関係あるのかなと思ったのですが、パラメータをいくら変えてもダメでした。

誰が私が何を試すべきかについて考えを持っていますか? 私の問題について何か追加情報が必要ですか?

編集: また、 -G 属性を使用してサイズを変更しても役に立ちません。実際、私が何をしても、常にまったく同じエラーが発生します。つまり、エラーに記載されているスケーリング係数は変更されません。

4

1 に答える 1

0

私の問題は、Graphviz やグラフ固有のものではないことが判明しました。オンラインで見つけたテスト例で (メタヒューリスティック) アルゴリズムをテストしていました。最適解ファイルを1行ずつ読み込んで単語に分割すると""、単語として認識されてしまうことがありました。

于 2012-12-07T21:36:54.117 に答える