2017-05-03 53 views
1

突出显示多个边缘我有一个无向图是这样的:Cytoscape中JS

var cy = cytoscape({ 
      container: document.getElementById('cy'), 
      elements: [ 
      // nodes 
      { data: { id: 'a' } }, 
      { data: { id: 'b' } }, 
      { data: { id: 'c' } }, 
      { data: { id: 'd' } }, 

      // edges 
      { 
       data: { 
       id: 'ab', 
       source: 'a', 
       target: 'b' 
       } 
      }, 
      { 
       data: { 
       id: 'bc', 
       source: 'b', 
       target: 'c' 
       } 
      }, 
      { 
       data: { 
       id: 'cd', 
       source: 'c', 
       target: 'd' 
       } 
      } 
      ], 
      style: [ 
      { 
       selector: 'node', 
       style: { 
       shape: 'hexagon', 
       'background-color': 'red', 
       label: 'data(id)' 
       } 
      }], 
      layout: { 
      name: 'grid' 
      } 
     }); 

正如你可以看到你可以通过使用cdda。我试图实现的是,如果边缘ab突出显示,边缘bccd也将突出显示。有没有办法做到这一点?我在互联网上找不到任何来源......谢谢。

+0

我不清楚你的意思。你想突出显示组件中的所有边缘?在附近?还有别的吗? – maxkfranz

+0

@maxkfranz我想突出显示一条路径。我实际上将路径传递给节点。 – jason

+0

@maxkfranz我的意思是如果你可以从'a'到'd'并且你知道路径,我想突出显示所有路径上的节点和边缘。 – jason

回答

1

查看包含的算法,如Floyd-WarshallDijkstra。从它们的输出中,您应该能够为相关边缘生成突出显示。

Ex。

var dijkstra = cy.elements().dijkstra('#an_id') 
var path = dijkstra.pathTo(cy.elements('node#another_id')) 

path.forEach(function(ele){ 
    if (ele.isEdge()){ 
    ele.addClass("class_that_has_highlight_styling") 
    } 
}) 
+0

我没有确定路径的问题,我无法突出显示所选路径。 – jason

+0

我加了一个例子 –

+0

它工作!谢谢! – jason