Graphviz API:ND_width和ND_height宏不起作用,而agsafeset具有“width”和“height”属性。怎么了?

时间:2012-01-05 21:47:21

标签: graphviz

我正在使用Graphviz API,Visual C ++。在我调用 gvLayout 来计算节点坐标之前,我必须设置节点宽度和高度(对于图中的每个节点)。问题是, ND_width ND_height 宏方法,似乎没有影响,而使用 agsafeset 设置相同的值可以正常工作。我只是不想使用像 agsafeset 这样的基于字符串的API,因为我在循环中处理一堆节点,而更喜欢用 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(), "");

P.S。:我仅使用Graphviz进行布局,我进行自定义渲染,所以我需要的是给定节点的宽度和高度(以像素为单位)计算节点和边的坐标(以像素为单位)。我在调用gvLayout之前设置了这些值(对于“dot”)。我正在设置 agsafeset(pGvzNode,“fixedsize”,“1”,“”)

1 个答案:

答案 0 :(得分:1)

agsafeset设置节点属性,gvLayout使用这些属性来计算布局信息,而ND_width和ND_height用于获取布局大小。在调用gvLayout之前,ND_width和ND_height可以设置值,但是您设置的值将被gvLayout覆盖。所以你必须使用agsafeset,ND_width和ND_height不能工作。