2016-12-29 14 views
0

私はgraphvizをC#のライブラリとして使用しています。 gvc.dllとcgraph.dll hereから関数をインポートするのに役立つ解決策を見つけました。graphvizのノードの位置を取得する

私がしたいことは、レンダリングされたグラフのノードの位置を取得することです。

if (gvLayout(gvc, g, layout) != SUCCESS) 
    throw new Exception("Layout failed."); 
if (gvRender(gvc, g, "dot", IntPtr.Zero) != SUCCESS) 
    throw new Exception("Render failed."); 

IntPtr np = agnode(g, "1", 0); 
if (np == IntPtr.Zero) 
    throw new Exception("Node not found."); 
string pos = agget(np, "pos"); 

次のように私はagget機能を定義した:

[DllImport(LIB_GRAPH, CallingConvention = CallingConvention.Cdecl)] 
public static extern string agget(IntPtr node, string attribute); 

すべてがしかしagget機能を実行した後、デバッグがのinfromationで中止され、罰金だlibrary guideに調査した結果、私はRenderImage機能で、このソリューションを使用しました。予期せず実行プロセスが終了しました。しかし例外は投げられませんでした。

私のコードで何が問題になっていますか? 多分私はND_posのようなマクロを使うことができますか?しかし、私はそれを見つけることができなかったと私はC#で(DllImportを使用して)それを宣言する方法を知らない。 グラフを描画した後、ドットファイルから情報を取得できますか?もしそうなら、どうしたらいいですか?

答えて

0

gvRenderFileを使用して解決するように指示しました。 レンダリングされたドットファイルを別のドットファイルにエクスポートし、そこから読み込みます。

if (gvRenderFilename(gvc, g, "dot", path) != SUCCESS) 
    throw new Exception("Render failed."); 
string text = File.ReadAllText(path); 
関連する問題