我正在编写一个构建图表的软件。
在其最基本的形式中,图形将在一个文件中描述,就像在下一段中传递给 agmemread 的字符串一样。这是构建并将其保存为 PNG 的代码:
#include <gvc.h>
int main()
{
GVC_t* gvc;
Agraph_t* g;
gvc=gvContext();
g=agmemread
(
"digraph g"\
"{"\
" 1->2;"\
" 2->3;"\
" 2->13;"\
" 3->4;"\
" 4->5;"\
" 4->6;"\
" 5->8;"\
" 6->7;"\
" 7->8;"\
" 8->9;"\
" 8->10;"\
" 9->23;"\
" 10->11;"\
" 10->12;"\
" 11->23;"\
" 12->23;"\
" 13->14;"\
" 14->15;"\
" 15->16;"\
" 15->19;"\
" 16->17;"\
" 17->18;"\
" 18->21;"\
" 19->20;"\
" 20->21;"\
" 21->22;"\
" 22->23;"\
"}"
);
gvLayout(gvc,g,"dot");
gvRenderFilename(gvc,g,"png","g_gen.png");
gvFreeLayout(gvc, g);
agclose(g);
gvFreeContext(gvc);
return 0;
}
我的问题是,保存在“g_gen.png”(来自代码)中的图形如下所示:http: //i56.tinypic.com/25hk3de.png
我希望它类似于这种结构(使用 DIA for Windows 绘制):http:
//i56.tinypic.com/t070br.png
我的意思是节点的位置。尤其是:
- 拆分(如 2、4、8、10、15)应位于其子树上方的中间
- 连接点(如 8、23、21)应位于其子树下方的中间
- 分支应该被调平(5,6,15 在一个级别上;9,10,18 也是)
- 直边箭头(可能在这里走得太远,但值得一试)
- 总而言之 - 尽可能匹配第二张图片中呈现的结构