어쨌든 그래프 스트림을 사용하여 그래프에서 특정 수의 노드를 접을 수 있습니까? ui.hide 특성을 추가하려고했지만 원하는 것은 아닙니다. 이상적으로 나는 접힌 첫 번째 노드에 + 기호를 넣고 + 기호를 클릭하면 나머지 노드가 나타나야합니다. 아무도 이것으로 나를 도울 수 있습니까? TIAGraphstream의 노드 축소
0
A
답변
1
정확히 맞았는지는 모르겠지만, 여러분은 IDE (eclipse, netbean ...)의 패키지/파일 시스템보기와 같은 트리를 접거나 펼치 길 원합니다.
제가 맞다면 GraphStream에서 도움이 될 수있는 몇 가지 트릭이 있습니다.
- 위에서 언급 한 바와 같이 노드와 가장자리에 사용 된
ui.hide
속성입니다. - 선택한 노드에서 레이아웃 알고리즘을 차단하고 위치를 제어 할 수있는
layout.frozen
속성입니다. 클릭 된 노드의 위치에서 "접힌"시각적 느낌을주기 위해 "접힌"위치의 위치를 설정할 수 있습니다. - CSS 클래스를 노드에 할당하고 노드 접기/펼치기 노드에 특정 스타일을 지정할 수있는
ui.class
속성 (예 : "더하기"기호 아이콘 추가). 노드가 클릭되었을 때 알림을 받으려면 뷰어에서
ProxyPipe
을 검색하고 해당 뷰어에서 오는 수정 사항을 수신해야합니다. 특히ui.clicked
속성은 클릭 한 노드에 자동으로 할당됩니다.ProxyPipe fromViewer = viewer.newViewerPipe(); fromViewer.addSink(new SinkAdapter(){ @Override public void nodeAttributeAdded(String sourceId, long timeId, String nodeId, String attribute, Object value) { if(attribute.equals("ui.clicked")){ // Being notified that a node was clicked... } } });
마지막으로 접을 노드를 결정해야합니다. 클릭 한 노드를 기반으로하는 간단한 반복기가 필요한 것입니다.
// let n be the clicked node... Iterator<Node> it = n.getBreadthFirstIterator(true); while(it.hasNext()){ Node m = it.next(); for(Edge e : m.getLeavingEdgeSet()) { e.setAttribute("ui.hide"); } if(n != m) { m.setAttribute("ui.hide"); } }

:
여기 https://gist.github.com/pigne/2d4c0cbe8583f8a8f6b03309becaff3f
하위 트리를 붕괴하기 전에 예를 들어 트리 그래프 :
당신은 클릭 노드는 자신의 서브 트리를 축소 요지의 작동 예를 찾을 수 있습니다 클릭 후 노드 13 및 15가 축소 된 동일한 그래프 :