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