2016-12-29 4 views
0

저는 C#에서 graphviz를 라이브러리로 사용하고 있습니다. 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"); 

다음 I가 agget 함수를 정의 :

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

다하지만 agget 기능을 실행 한 후 디버깅 infromation으로 중단되고, 잘 보인다 library guide에 조사한 후 I는 RenderImage 기능이 용액을 사용했을 예기치 않게 실행 프로세스가 종료되었습니다. 그러나 아무 예외도 던지지 않았다.

내 코드가 잘못되었습니다. 아마도 매크로를 사용할 수 있습니다 : ND_pos? 하지만 그것을 찾을 수 없으며 C#에서 (DllImport 사용) 선언하는 방법을 모르겠습니다. 그래프를 렌더링 한 후 도트 파일에서 정보를 검색 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

답변

0

gvRenderFile을 사용하여 문제를 해결했습니다. 렌더링 된 도트 파일을 다른 도트 파일로 내보내고 읽습니다.

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