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)
現在可以正確返回解決方案。
感謝您的答覆。我嘗試過,但它不起作用:它返回連接到subgraphNodes的每條邊。但我只想要兩端都屬於subgraphNodes的那些。看我的編輯。 – Alsciende
在這種情況下,你已經發現[一個bug](https://github.com/cytoscape/cytoscape.js/issues/971),所以我原來的答案應該是正確的,但只是越野車。 – maxkfranz