0

この典型的なスニペット (prefuse の例から) を使用して、マウスがノードの上にあるときにノードの 1 つの色を変更します。

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 に答える