2012-06-01 4 views
0

Каждый раз, когда я конвертирую объект графа в язык точки, используя подход, показанный ниже - порядок братьев и сестер теряется. Есть ли способ избежать этого?Graphviz порядок братьев и сестер

StringWriter theGraph = new StringWriter(); 
graph.printGraph(theGraph); 
theGraph.toString(); 

Обновление:

Моя программа генерирует графики и отображает их в Java-апплета. Чтобы их форматировать, я использую функцию GrappaSupport.filterGraph для подачи неформатированного графика в dot.exe и получения отформатированного графика. Функция возвращает объект графа. Однако, чтобы отправить граф в апплет, мне нужно отобразить его как строку, чтобы преобразовать его обратно в язык точек (используя приведенный выше код).

График порождена моей программы:

digraph "Graph" { 
    i168CF2[label="PROPERTY\n(2-cur.)" ] 
    i168D02[style=filled, label="NAME\n(2-9, 13-cur.)", color=palegreen ] 
    i168CF2->i168D02 
    i168D010[style=filled, label="NAME\n(10-12)", color=lightgrey ] 
    i168CF2->i168D010 [color=lightgrey] 
    i168D22[style=filled, label="TEXT\n(2-9)", color=lightgrey ] 
    i168CF2->i168D22 [color=lightgrey] 
    i168D210[style=filled, label="TEXT\n(10, 12-cur.)", color=palegreen ] 
    i168CF2->i168D210 
    i168D211[style=filled, label="TEXT\n(11)", color=lightgrey ] 
    i168CF2->i168D211 [color=lightgrey] 
} 

Layouted по dot.exe и преобразуются обратно в дот языка графа:

digraph "Graph" { 
    graph [bb = "0,0,552,144"]; 
    i168D22 [ 
     height = "0.74639", 
     style = filled, 
     color = lightgray, 
     width = "1.0344", 
     label = "TEXT\n(2-9)", 
     pos = "37,27" 
    ]; 
    i168CF2 [ 
     height = "0.74639", 
     width = "1.7589", 
     label = "PROPERTY\n(2-cur.)", 
     pos = "250,117" 
    ]; 
    i168D211 [ 
     height = "0.74639", 
     style = filled, 
     color = lightgray, 
     width = "1.0344", 
     label = "TEXT\n(11)", 
     pos = "130,27" 
    ]; 
    i168D02 [ 
     height = "0.74639", 
     style = filled, 
     color = palegreen, 
     width = "1.7826", 
     label = "NAME\n(2-9, 13-cur.)", 
     pos = "250,27" 
    ]; 
    i168D210 [ 
     height = "0.74639", 
     style = filled, 
     color = palegreen, 
     width = "1.6779", 
     label = "TEXT\n(10, 12-cur.)", 
     pos = "393,27" 
    ]; 
    i168D010 [ 
     height = "0.74639", 
     style = filled, 
     color = lightgray, 
     width = "1.1153", 
     label = "NAME\n(10-12)", 
     pos = "512,27" 
    ]; 
    i168CF2 -> i168D010 [ 
     color = lightgray, 
     pos = "e,481.77,44.917 304.57,103.17 347.98,92.22409.87,74.943462,54465.47,52.605 469.02,51.046 472.55,49.404" 
    ]; 
    i168CF2 -> i168D210 [ 
      pos = "e,358.38,49.305 284.98,94.473 304.52,82.452 329.02,67.371 349.75,54.614" 
    ]; 
    i168CF2 -> i168D22 [ 
      color = lightgray, 
      pos = "e,65.486,44.636 200.92,99.814 167.46,88.26 122.43,71.686 84,54 80.855,52.553 77.634,50.978 74.425,49.344" 
    ]; 
    i168CF2 -> i168D211 [ 
      color = lightgray, 
      pos = "e,155.54,46.726 219.1,93.338 202.15,80.909 181.11,65.483 163.74,52.741" 
    ]; 
    i168CF2 -> i168D02 [ 
      pos = "e,250,54.046 250,90.073 250,81.999 250,72.943 250,64.296" 
    ]; 

}

Как вы можете видеть порядок i168CF2 узла дети изменены с: i168D02, i168D010, i168D22, i168D210, i168D211

To: i168D22, i168D211, i168D02, i168D210, i168D010

Есть ли способ избежать этого? Эта перетасовка происходит во время разговора с объекта графика до точки, но не во время автоматического компоновки с использованием dot.exe (он возвращает тот же порядок).

+0

Ожидаете ли вы, что мы можем воспроизвести вашу проблему с помощью этого фрагмента кода? – Thor

+0

Проблема заключается в том, что последовательность входных узлов не сохраняется после разговора (я вставил код, чтобы показать, какой разговор я использую, возможно, есть и другие способы), а порядок сестер отличается от того, который был изначально. Возможно, существуют некоторые параметры, которые явно определяют порядок братьев и сестер в направленном графе? –

+0

Можете ли вы показать это с помощью файла '.dot'? – Thor

ответ

0

Это, вероятно, не будет решить вашу проблему, но только в том случае: если ваша цель состоит в том, чтобы приукрасить точечные графики, вы можете рассмотреть возможность использования dot с выходным форматом canon. От documentation:

Использование canon дает довольно печатную версию ввода без макета.

Это преобразование соответствует порядку внешнего вида узлов.

Смежные вопросы