Влияние на размещение узлов в GraphViz при использовании движка DOT - PullRequest
1 голос
/ 27 февраля 2011

Я пишу программное обеспечение для построения графика.
В своей основной форме график будет описан в файле, подобном строке, переданной 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

Я имею в виду размещение узлов. В частности:

  1. Сплиты (например, 2,4,8,10,15) должны быть посередине над их поддеревьями
  2. Соединения (например, 8,23,21) должны быть посередине ниже их поддеревьев
  3. Ветви должны быть выровнены (5,6,15 на одном уровне; 9,10,18 тоже)
  4. Стрелки с прямыми краями (возможно, заходят слишком далеко, но стоит попробовать)
  5. В целом - как можно точнее сопоставьте структуру, представленную на втором рисунке

1 Ответ

0 голосов
/ 20 мая 2011

Я думаю, что это то же самое, что и сложная структура дерева графиков вопрос (на который уже дан ответ).

...