2012-01-05 2 views
0

Visual C++의 Graphviz API를 사용하고 있습니다. gvLayout을 호출하여 노드 좌표를 계산하기 전에 그래프의 각 노드에 대해 노드 너비와 높이를 설정해야합니다. 문제는 ND_widthND_height 매크로 접근 방식이 영향을 미치지 않는 것일뿐 아니라 agsafeset과 같은 값을 예상대로 설정하는 것입니다. 루프에서 많은 노드를 처리하고 폭 및 높이 값을 함께 설정하기 때문에 agsafeset과 같은 문자열 기반 API를 사용하고 싶지 않습니다. ND_width (pNode)ND_height (pNode) (또는 직접적으로 pNode-> u.widthpNode-> u.height). 내가 도대체 ​​뭘 잘못하고있는 겁니까?Graphviz API : ND_width 및 ND_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는 작동하지 않습니다.

관련 문제