Я пишу программное обеспечение для построения графика.
В своей основной форме график будет описан в файле, подобном строке, переданной 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 для Windows):
http://i56.tinypic.com/t070br.png
Я имею в виду размещение узлов. В частности:
- Сплиты (например, 2,4,8,10,15) должны быть посередине над их поддеревьями
- Соединения (например, 8,23,21) должны быть посередине ниже их поддеревьев
- Ветви должны быть выровнены (5,6,15 на одном уровне; 9,10,18 тоже)
- Стрелки с прямыми краями (возможно, заходят слишком далеко, но стоит попробовать)
- В целом - как можно точнее сопоставьте структуру, представленную на втором рисунке