获取节点在graphviz中的位置

Getting position of nodes in graphviz

我在 C# 中使用 graphviz 作为库。我找到了一个有助于从 gvc.dll 和 cgraph.dll here.

导入函数的解决方案

我想要做的是获取节点在渲染图中的位置。在研究 library guide 之后,我在 RenderImage 函数中使用了这个解决方案:

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函数后,调试中止,提示:执行过程意外退出。但没有抛出异常。

我的代码有什么问题? 也许我可以使用像这样的宏:ND_pos?但我找不到它,也不知道如何在 C# 中声明它(使用 DllImport)。 或者也许在渲染图之后我可以从点文件中检索信息?如果可以,我该怎么做?

我设法使用 RenderFile 解决了它。 我将渲染的点文件导出到另一个点文件,然后从中读取。

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