0

当鼠标悬停在一个节点上时,我使用这个典型的片段(来自 prefuse 示例)来更改我的一个节点的颜色:

ColorAction nFill = new ColorAction(NODES, VisualItem.FILLCOLOR);
nFill.setDefaultColor(ColorLib.gray(255));
nFill.add("_hover", ColorLib.gray(200));

我也想将此节点内外边缘的颜色设置为不同的颜色,最好是输入的颜色与输出的颜色不同,但我找不到要使用的正确谓词。

我正在使用有向图,以防万一。

有没有办法在谓词 API 中迭代当前节点/边缘的子节点/父节点?您对我的实际问题有解决方案吗?

4

2 回答 2

2

我找到了一种不使用谓词的方法,但是通过创建我自己的 ColorAction 子类:

class ConnectedEdgeColorAction extends ColorAction {

    final int outgoing = ColorLib.rgb(255, 100, 100);
    final int incoming = ColorLib.rgb(100, 255, 100);
    final int none = ColorLib.gray(100);

    public ConnectedEdgeColorAction(String group, String field) {
        super(group, field);
    }

    @Override
    public int getColor(VisualItem item) {
        if (item instanceof EdgeItem) {
            if (((EdgeItem) item).getSourceItem().isHover()) {
                return outgoing;
            } else if (((EdgeItem) item).getTargetItem().isHover()) {
                return incoming;
            }
        }

        return none;
    }

}

然后,我将其用作边缘的主要颜色动作:

ColorAction nEdges = new ConnectedEdgeColorAction(EDGES, VisualItem.STROKECOLOR);

我不知道这是否是“首选”方式,但它对我来说足够好。

于 2014-10-20T14:18:21.300 回答
0

另一种解决方案可能是

  • 创建 Action 的子类
  • 使用谓词 _hover 在节点上调用此操作
  • 在 Action 子类中转到传入和传出边缘并设置它们的颜色
于 2014-10-21T05:24:53.203 回答