2015-05-26 46 views
0

我沒有看到一個簡單的方法來獲取子圖的邊緣,即連接一組節點的邊緣。在子圖中獲取邊緣

我能做的最好的是計算連接邊緣減去輸出邊沿:

function getInsideEdges(nodes) { 
    var connectedEdges = nodes.connectedEdges(); 
    var complement = nodes.absoluteComplement(); 
    var outgoingEdges = nodes.edgesWith(complement); 
    var insideEdges = connectedEdges.difference(outgoingEdges); 
    return insideEdges; 
} 

這似乎好不尷尬,考慮了很多其他的操作由API被簡化。我錯過了什麼?

編輯:我嘗試的第一個解決方案不起作用:nodes.edgesWith(nodes)返回的設置與nodes.connectedEdges()相同。

var cy = cytoscape({headless:true,elements:{ 
    nodes:[ 
     {data:{id:'n1'}}, 
     {data:{id:'n2'}}, 
     {data:{id:'n3'}} 
    ], 
    edges:[ 
     {data:{id:'e1-2',source:'n1',target:'n2'}}, 
     {data:{id:'e1-3',source:'n1',target:'n3'}}, 
     {data:{id:'e2-3',source:'n2',target:'n3'}} 
    ] 
}}); 
var nodes = cy.nodes(); 
var subgraphNodes = cy.$('#n1,#n2'); 
// we want to obtain the edges inside that subgraph: the collection ['e1-2'] 

subgraphNodes.connectedEdges().size(); 
// -> 3 

subgraphNodes.edgesWith(subgraphNodes).size(); 
// -> 3 

subgraphNodes.connectedEdges().difference(subgraphNodes.edgesWith(subgraphNodes.absoluteComplement())).size(); 
// -> 1 

// another solution 
subgraphNodes.outgoers('edge').intersection(subgraphNodes.incomers('edge')).size(); 
// -> 1 

編輯:@maxkfranz固定cytoscape.js使subgraphNodes.edgesWith(subgraphNodes)現在可以正確返回解決方案。

回答

0

subgraphNodes.edgesWith(subgraphNodes) - 既然你想內側邊緣(即連接到節點)的子

+0

感謝您的答覆。我嘗試過,但它不起作用:它返回連接到subgraphNodes的每條邊。但我只想要兩端都屬於subgraphNodes的那些。看我的編輯。 – Alsciende

+0

在這種情況下,你已經發現[一個bug](https://github.com/cytoscape/cytoscape.js/issues/971),所以我原來的答案應該是正確的,但只是越野車。 – maxkfranz