我正在使用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」,「」)。