首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Graphviz API (Graphviz作为库)的问题

关于Graphviz API (Graphviz作为库)的问题
EN

Stack Overflow用户
提问于 2012-01-04 22:20:54
回答 3查看 1.8K关注 0票数 2

我正在使用Graphviz作为库(C++)。我需要Graphviz为我的节点和相应的边缘计算坐标。我正在进行自我渲染(即不使用Graphviz的渲染器)。我的节点是矩形,具有定义的宽度和高度(以像素为单位)。

我用agopen创建图形。然后使用agnode创建节点,用agedge创建边缘。据我所知,应该使用gvLayout来计算坐标。

现在我要知道:

  1. 如何在使用gvLayout之前指定节点的矩形宽度和高度
  2. gvLayout之后,如何得到节点的计算坐标和边缘的样条坐标?
  3. 如何从图中删除节点(以及相应的边)或边(Agraph_t),这能做到吗?
  4. 当我使用agnodeagedge创建节点和边缘时,难道我不需要释放/删除它们以进行清理(当我完成图形处理时)吗?或者agclose会隐式地处理这个问题吗?

重要:我不想使用基于文本的接口(即获取参数作为文本),我想访问所提到的参数(节点的宽度和高度、边的样条、节点的坐标……)直接作为数据变量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-05 15:29:44

在前面的响应中添加一些更详细的内容:

1 )节点的宽度由多个属性决定:“宽度”属性指定最小宽度;标记或图像在节点中的宽度;标签周围边距的“页边距”属性;外围设备的数量;等等。如果您确实想要固定宽度,请将“宽度”属性设置为所需的值,并将“固定大小”设置为1。如上所述,您使用agset函数设置属性,该函数假定属性以前使用agnodeattr函数为节点声明。或者只是使用agsafeset,它结合了这些操作。

2)如果n是节点指针,则它的位置在ND_coord(n)中存储为(x,y)对。如果e是边指针,则值ED_spl(e)指向包含描述立方B样条的结构数组的结构。(通常只有一个。)如果bz = ED_spl(e)->list,那么*bz有关于点数、点和边是否在头和/或尾处有箭头的信息。这些值的这个含义被描述为这里

3)从图g中删除节点n,使用agdelete(g,n);

4)调用图上的agclose将自动释放所有节点和边。如果您已经调用了gvLayout,那么首先需要调用gvFreeLayout来释放分配给执行布局的数据。

您可能会发现文档很有用。

票数 4
EN

Stack Overflow用户

发布于 2012-01-05 09:17:01

Q1

代码语言:javascript
复制
agset (void* pointer_to_component, char* name_of_attribute, char* value_of_attribute)
gsafeset which has the same signature.

Q2

代码语言:javascript
复制
for (n = agfstnode(g); n; n = agnxtnode(n)) { /* do something with n */ }

Q3

代码语言:javascript
复制
Agnode_t *n;
n = agnode(g, "some_specific_node_name_to_find", FALSE);
agdelnode(n);

有关更多信息,请访问Agraph教程

票数 1
EN

Stack Overflow用户

发布于 2012-03-25 18:01:23

Q1:您必须设置宽度并修复它:

代码语言:javascript
复制
agsafeset(node, "width", "1");
agsafeset(node, "fixedsize", "1", "");

如果在修复后更改宽度,请确保在使用新值设置“宽度”之前,使用"0“调用”固定大小“。

Q2:与使用ND_coord(n)不同,以下内容也能工作:

代码语言:javascript
复制
node->u.coord.x
node->graph->u.bb.UR.y - node->u.coord.y

要将边包装成bezier线,请看一下例如http://mupuf.org/blog/article/34/,我已经基于它完成了到CGMutablePathRef的转换(如果您感兴趣的话)。

关于Q3 & Q4,请看Emden的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8734936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档