Управление рендерингом растровых изображений - PullRequest
2 голосов
/ 29 апреля 2011

Я пытаюсь

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

Для этого мне нужно отобразить график

  • Какой атрибут я должен установить, чтобы получить максимальную ширину / высоту отображаемого графика?Я заглянул на страницу http://www.graphviz.org/doc/info/attrs.html и попытался манипулировать такими атрибутами, как size, но мне это не помогло.
  • Как мне следует интерпретировать атрибуты pos узлов икрая?

1 Ответ

9 голосов
/ 30 апреля 2011

Контроль размера

Как вы правильно предположили, это можно сделать, изменив size.

Вот несколько примеров:

digraph {1->2;}

Размеры изображения: 83 * 155px . Это размер графика с настройками по умолчанию.

digraph {size=1; 1->2;}

Размеры изображения: 51 * 96px . Изображение было уменьшено до 1 дюйма (96 dpi). Это ожидаемое поведение, потому что документация гласит:

Если определено и чертеж больше чем заданный размер, рисунок равномерно уменьшен, чтобы он соответствовал в пределах заданного размера.

digraph {size=2; 1->2;}

Размеры изображения: 83 * 155px . Опять же, ожидаемое поведение, график уже меньше 2 дюймов и его не нужно уменьшать.

digraph {size="2!"; 1->2;}

Размеры изображения: 103 * 192px . График масштабировался до тех пор, пока одно из измерений не равнялось 2 дюймам. Ожидаемое поведение, поскольку в документации указано:

Если размер оканчивается восклицательным знаком (!), то считается желаемый размер. В этом случае, если оба Размеры чертежа меньше чем размер, рисунок масштабируется равномерно, по крайней мере, до одного измерения равняется его размеру в размере.

Интерпретация pos-атрибутов узлов и ребер

Полагаю, вы имеете в виду pos значения формата xdot.

xdot графика

digraph {1->2;}

является следующим

digraph {
    node [label="\N"];
    graph [bb="0,0,54,108",
        _draw_="c 9 -#ffffffff C 9 -#ffffffff P 4 0 -1 0 108 55 108 55 -1 ",
        xdotversion="1.2"];
    1 [pos="27,90", width="0.75", height="0.5", _draw_="c 9 -#000000ff e 27 90 27 18 ", _ldraw_="F 14.000000 11 -Times-Roman c 9 -#000000ff T 27 84 0 7 1 -1 "];
    2 [pos="27,18", width="0.75", height="0.5", _draw_="c 9 -#000000ff e 27 18 27 18 ", _ldraw_="F 14.000000 11 -Times-Roman c 9 -#000000ff T 27 12 0 7 1 -2 "];
    1 -> 2 [pos="e,27,36.413 27,71.831 27,64.131 27,54.974 27,46.417", _draw_="c 9 -#000000ff B 4 27 72 27 64 27 55 27 46 ", _hdraw_="S 5 -solid c 9 -#000000ff C 9 -#000000ff P 3 31 46 27 36 24 46 "];
}

Положительные значения узлов обозначают центр положения узла. Поскольку ограничивающим прямоугольником графика является «0,0,54,108», позиции узлов «27,18» и «27,90» идеально отцентрированы по горизонтали.

Для ребер, я думаю, pos содержит точки сегментов ребер, тогда как _draw_ содержит контрольные точки B-Spline (но я не совсем уверен в этом).

...