API Graphviz: макросы ND_width и ND_height не работают, а agsafeset с атрибутами width и height - не работает.В чем дело? - PullRequest
0 голосов
/ 06 января 2012

Я работаю с Graphviz API, Visual C ++.Прежде чем я вызову gvLayout для вычисления координат узла, я должен установить ширину и высоту узла (для каждого узла в графике).Проблема в том, что ND_width и ND_height макроподход, похоже, не оказывает влияния, хотя установка тех же значений с помощью agsafeset работает, как и ожидалось.Я просто не хочу использовать строковые API, такие как agsafeset , потому что я обрабатываю кучу узлов в цикле и предпочитаю устанавливать значения ширины и высоты с помощью ND_width (pNode) и ND_height (pNode) (или непосредственно как pNode-> u.width и pNode-> u.height ).Что я делаю не так?

Следующий код не работает (не оказывает никакого влияния):

const DWORD dwPixelsPerInch = 96;

ND_width(pGvzNode) = (double)dwWidthInPixels / dwPixelsPerInch;
ND_height(pGvzNode) = (double)dwHeightInPixels / dwPixelsPerInch;

Пока работает следующий код:

CStringA csaValue;

csaValue.Format("%f", (double)dwWidthInPixels / dwPixelsPerInch);
agsafeset(pGvzNode, "width", csaValue.GetBuffer(), "");

csaValue.Format("%f", (double)dwHeightInPixels / dwPixelsPerInch);
agsafeset(pGvzNode, "height", csaValue.GetBuffer(), "");

PS:Я использую Graphviz исключительно для разметки, я делаю пользовательский рендеринг, поэтому все, что мне нужно, это вычисление координат узлов и ребер (в пикселях) с учетом ширины и высоты узлов (в пикселях).Я устанавливаю эти значения непосредственно перед вызовом gvLayout (для «точки»).Я устанавливаю agsafeset (pGvzNode, "fixedsize", "1", "") .

1 Ответ

1 голос
/ 09 января 2012

agsafeset устанавливает атрибуты узла, которые используются gvLayout для вычисления информации о макете, а ND_width и ND_height используются для получения размера макета.Перед вызовом gvLayout значения ND_width и ND_height могут установить значения, но заданные вами значения будут перезаписаны gvLayout.Поэтому вы должны использовать agsafeset, ND_width и ND_height не могут работать.

...