隣接するノードを取得する

Inkpodのマップは、ネットワーク構造のデータとしてみることができます。関連線には向きがあるため、有向グラフとして扱えます。

ネットワーク構造のデータとして扱う場合、ノード・オブジェクト(PNodeObject)と対になる、jp.carabiner.inkpod.pi.model.PNetworkNodeオブジェクト、関連・オブジェクト(PRelationObject)と対になる、jp.carabiner.inkpod.pi.model.PNetworkEdgeオブジェクトを使用します。PNetworkNodeオブジェクトは、PNodeObjectオブジェクトのnodeプロパティから、PNetworkEdgeオブジェクトは、PRelationObjectのedgeプロパティから得られます。

次のような、ノード・オブジェクトと、関連・オブジェクトが合った場合、
PNodeObjectオブジェクト、PRelationObjectオブジェクト、PNetworkNodeオブジェクト、PNetworkEdgeオブジェクトの関係は以下の図のようになります。

サンプル

「オブジェクト」メニューに、「次のノードの値を表示」を追加します。オブジェクトを選択して、「次のノードの値を表示」を選ぶと、矢印でつながった次のノードの値を表示します。

function extendUI(event) {
    inkpod.ui.actions.addAction({
        id     : "SAMPLE_NEXT_NODE",
        text   : "次のノードの値を表示",
        action : function(frame, event) {
            var model = frame.model;
            var object = model.singleSelectedObject;
            if(!object) {
                frame.alert("オブジェクトを選択してください");
                return;
            }
            
            if(!(object instanceof Packages.jp.carabiner.inkpod.pi.model.PNodeObject)) {
                frame.alert("ノードを選択してください");
                return;
            }
            
            var node = object.node;     // ノードの取得
            var nodes = node.nextNodes; // 次のノードの取得
            if(nodes.length == 0) {
                frame.showInfo("次のノードはありません");
            } else {
                frame.showInfo("次のノード:" + nodes[0].value);
            }
        }
    });
    
    inkpod.ui.menuBar.objectMenu.addMenuItem("SAMPLE_NEXT_NODE");
}

function init()
{
    inkpod.ui.addUIExtensionListener(extendUI);
}

function dispose()
{
}

plugin = {
    init : init,
    dispose : dispose
}

まず、ユーザーが選択してるマップ・オブジェクトを、modelのsingleSelectedObjectプロパティで得ます。このマップ・オブジェクトがノード・オブジェクト(PNodeObject)で無い場合は、処理を中断します。PNodeObjectの、nodeプロパティで、オブジェクトと対応するノード(PNetworkNode)を取得します。これで、ユーザーが選択してるノードが得られます。

次に、PNetworkNodeオブジェクトのnextNodesプロパティで、矢印の順方向に隣接しているノードの配列を得ます。このサンプルでは、隣接しているノードのうち、最初のノードのvalueプロパティの内容を表示します。PNetworkNodeのvalueプロパティは、ノードの値です。オブジェクトに書かれているテキストに対応してます。

関連するクラス/インタフェース