2012-01-05 92 views
0

我正在使用Graphviz API,Visual C++。在我调用gvLayout来计算节点坐标之前,我必须设置节点宽度和高度(对于图中的每个节点)。问题是,ND_widthND_height宏观方法,只是似乎没有影响,而设置相同的值与agsafeset按预期工作。我只是不想使用基于字符串的API,比如agsafeset,因为我在循环中处理一堆节点,并且宁愿使用设置宽度和高度值ND_width(pNode)ND_height(pNode)(或直接作为pNode-> u.widthpNode-> u.height)。我究竟做错了什么?Graphviz API:ND_width和ND_height宏不起作用,而具有“width”和“height”属性的agsafeset却起作用。怎么了?

下面的代码无法正常工作(不具有任何影响):

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

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