私は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を使用して)それを宣言する方法を知らない。 グラフを描画した後、ドットファイルから情報を取得できますか?もしそうなら、どうしたらいいですか?