问题标签 [ogdf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
197 浏览

c++ - 在 OGDF 中使用 GraphCopy::initByCC 维护 GraphAttributes

我正在尝试使用 OGDF 对从 GML 文件加载的图形执行一些处理。这些图仅在维护节点标签时才有意义。不幸的是,OGDF 无法轻松保留节点属性(如标签),因为它们保存在一个名为GraphAttributes. 我的问题是将GraphAttributes节点标签与节点索引相关联,这不是由我需要使用的一些图形转换维护的。

我需要对 Graphs 执行的转换之一是在 GML 文件中拆分每个连接的子图。加载图形及其节点标签很简单:

同样,OGDF 提供CCsInfo类来查找图的连接子图。因为,我想独立处理这些子图,所以我使用该GraphCopy::initByCC方法来创建单独的Graph实例。

这有效,并且copy仅包含连接子图的节点和边。但是,副本中节点的索引与原始图中节点的索引不同。这意味着标签到attributes对象中节点的映射不适用于 中的节点copy

有没有办法对attributes对象执行相同的转换,以便我可以获得复制的连接子图中节点的正确标签?

0 投票
1 回答
59 浏览

c++ - OGDF PQTree:如何添加叶子?

使用 OGDF 我创建并初始化了一个 PQTree。初始化是用 3 条边完成的,其中节点 a 是根,b、c 和 d 是 a 的叶子。现在,经过计算,我需要将叶子 e、d 和 f 添加到 b 作为叶子。但问题是,b 是叶子,所以既不接受孩子也不接受叶子。代码在这里。作为 std::cout,我已经添加了它们,但是如果我使用 writeGML 将其写入 GML 文件,则添加节点之前和之后没有区别,它们不在树中。我认为,这是因为 PQLeafKey,对于非叶边/节点,它应该是 PQNodeKey。根据文档,ablk->nodePointer() 应该返回 PQLeaf,它派生自 PQNode,并且与同样派生 PQNode 的 PQInternelNode 不“兼容”。但我不知道,如何以不同的方式添加。代码:

0 投票
2 回答
293 浏览

c++ - 任何 GraphAttributes 函数调用上的 OGDF 段错误

我刚刚开始使用 OGDF,并尝试通过运行 OGDF 网页上 How-Tos 下的一些示例来掌握它。我的代码可以编译,但是当我尝试在节点上调用 GraphAttributes 函数时会出现段错误。

这是我的代码:

如果我注释掉我在评论中提到的导致段错误的行,则程序运行良好而没有段错误。如果我然后查看写出的 .gml 文件,则节点具有 x 和 y 坐标。我收到以下消息:

当我在 GraphAttributes 上调用不同的函数时也会发生这种情况,例如 .idNode(v)。

有人可以指出我正确的方向,为什么会发生这种情况?我现在完全不明白这是从哪里来的,而且 OGDF 太大了,无法浏览代码并理解它。(至少对我来说)

非常感谢您!

0 投票
1 回答
119 浏览

c++ - 在 OGDF 中设置节点边界框​​大小

我正在尝试使用 OGDF 库和 Sugiyama 布局在 Qt 中布局和可视化代码流图。我使用的版本是 v2020.02,在撰写本文时应该是最新的。

我的问题: 创建节点时,我将它们设置为各种大小,但在调用SugiyamaLayout算法后,所有节点大小都重置为 20x20(大概是默认值?)。如果我改用另一种算法(例如PlanarizationLayout),问题就会消失,节点大小会保持其分配的值。我尝试了不同的配置,例如排名、crossMins 和布局,但节点大小不受这些影响。

最小的可重现示例: