2011-03-13 5 views
3

아래 그림과 같이 JUNG2을 사용하여 표시하고 싶은 그래프가 있습니다.JUNG 레이아웃 질문

enter image description here

내가 JUNG2의 일부 레이아웃을 연주했습니다,하지만 난 항상이 같은 이미지는군요 :

enter image description here

그것은 내가 원하는대로 그래프를 배치하는 것이 가능한가를 새로운 레이아웃을 작성하지 않고도? 사전에

감사

드미트리

UPD :

private Embedded createSampleGraph() { 
Embedded imageComponent = null; 

try { 
    final DocumentBuilderFactory docBuilderFactory = 
      DocumentBuilderFactory 
        .newInstance(); 
    final DocumentBuilder docBuilder = 
      docBuilderFactory.newDocumentBuilder(); 
    final Document document = docBuilder.newDocument(); 
    final Element svgelem = document.createElement("svg"); 
    document.appendChild(svgelem); 

    final SVGGraphics2D graphic2d = new SVGGraphics2D(document); 

    final Graph<String, String> graph = createGraph(); 
    final VisualizationImageServer<String, String> server = 
      createServer(graph); 

    server.printAll(graphic2d); 

    final Element el = graphic2d.getRoot(); 
    el.setAttributeNS(null, "viewBox", "0 0 350 350"); 
    el.setAttributeNS(null, "style", "width:100%;height:100%;"); 

    final ByteArrayOutputStream bout = new ByteArrayOutputStream(); 

    final Writer out = new OutputStreamWriter(bout, "UTF-8"); 
    graphic2d.stream(el, out); 

    final JungResource source = new JungResource(bout); 

    TPTApplication.getCurrentApplication().addResource(source); 

    imageComponent = new Embedded("", source); 

    imageComponent.setWidth(DEFAULT_WIDTH_PIXELS, UNITS_PIXELS); 
    imageComponent.setHeight(DEFAULT_HEIGHT_PIXELS, UNITS_PIXELS); 
    imageComponent.setMimeType("image/svg+xml"); 
    addComponent(imageComponent); 
} catch (final UnsupportedEncodingException exception) { 
    LOGGER.error(ErrorCodes.M_001_UNSUPPORTED_ENCONDING, exception); 
} catch (final SVGGraphics2DIOException exception) { 
    LOGGER.error(ErrorCodes.M_002_SVG_GRAPHICS_2D_IO, exception); 
} catch (final ParserConfigurationException exception) { 
    LOGGER.error(ErrorCodes.M_003_PARSER_CONFIGURATION, exception); 
} 
return imageComponent; 
} 

private VisualizationImageServer<String, String> createServer(
    final Graph<String, String> aGraph) { 
final Layout<String, String> layout = new FRLayout<String, String>(
     aGraph); 

layout.setSize(new Dimension(300, 300)); 
final VisualizationImageServer<String, String> vv = 
     new VisualizationImageServer<String, String>(
       layout, new Dimension(350, 350)); 
vv.getRenderContext().setVertexLabelTransformer(
     new ToStringLabeller<String>()); 
return vv; 
} 

private Graph<String, String> createGraph() { 
final Graph<String, String> graph = 
     new DirectedSparseMultigraph<String, String>(); 
final String vertex1 = "IE"; 
final String vertex2 = "P1"; 
final String vertex3 = "P2"; 
final String vertex4 = "P3"; 
final String vertex5 = "FE"; 

graph.addVertex(vertex1); 
graph.addVertex(vertex2); 
graph.addVertex(vertex3); 
graph.addVertex(vertex4); 
graph.addVertex(vertex5); 

graph.addEdge("1", vertex1, vertex2, EdgeType.DIRECTED); 
graph.addEdge("2", vertex2, vertex3, EdgeType.DIRECTED); 
graph.addEdge("3", vertex3, vertex5, EdgeType.DIRECTED); 
graph.addEdge("4", vertex1, vertex4, EdgeType.DIRECTED); 
graph.addEdge("5", vertex4, vertex5, EdgeType.DIRECTED); 
return graph; 
} 

UPD 17.03.2011 이제

내가 그래프를 그릴 수 있습니다 : 여기 그래프를 시각화에 사용되는 코드입니다 이렇게 :

enter image description here

+0

이미지는 http://i.imgur.com/ 개인 STOR입니다 ... 그들은 1 × 1 이미지를했다 ... 표시하지 않았다 나이 웹 사이트? – eee

+0

신경 쓰지 마라. 내 사무실 방화벽이 i.imgur.com에 대한 링크를 막는 것 같다. – eee

답변

1

이것은 정에서 정점과 모서리를 만드는 방법과 관련이 있습니다. 우위를 선점를 들어

, 나는 당신이 중구 샘플에서 edu.uci.ics.jung.samples에 createVertices()와 createEdges()는 JUNG 예 의 방법에 패키지를 WorldMapGraphDemo.class를 참조하는 것이 좋습니다 JUNG 2.0 Framework 라이브러리의 -2.0.1.jar.

메서드에서 사용 된 접근법은 Map 객체를 사용하여 사용자 정의 정점 및 가장자리 정보를 저장하는 다른 제공된 예제와 비교하여 명확합니다. 나머지는 임의 생성, 라이브러리 생성 또는 파일 생성 정보를 사용합니다. 그것은 당신에게 명확되면

, 당신은 각각의 패키지 edu.uci.ics.jung.visualization.decorators에서 변압기렌더러 클래스를 장식처럼 (그래프를 개선하기 위해 PluggableRendererDemo.class을 참조 할 수 있습니다 정점, 가장자리, 방향 화살표, 모양, 크기 등)을 장식하고 렌더링edu.uci.ics.jung.visualization.renderers

+0

고마워. JUNG2의 기본 사항을 이해합니다. 그러나 그래프에 적용해야하는 변환을 이해하지 못합니다. 예를 들어 IE 노드가 그래프의 가장 왼쪽에 배치되고 수직으로 가운데에 배치됩니다 FE를 제외하고 다른 모든 노드에) 그리고 b) FE 노드는 (IE를 제외한 다른 모든 노드에 대해) 맨 오른쪽 위치와 수직 중심에 배치됩니다. 어떻게해야합니까? –

1

좋아요 ... 지금, 나는 당신이 정말로 원하는 것을 이해 풀다. 드미트리, 또 다른 정 예를 확인할 수 있습니다. L2RTreeLayoutDemo.class ... 달성하고자하는 목표에 너무 가깝게 보입니다.

또는, SO 아래 게시 공부할 수 있습니다 : Can Jung graphics appear in the same place every time?

+0

힌트를 보내 주셔서 감사합니다. 실제로 L2RTreeLayoutDemo를보고 이제는 나무를 시각화 할 수 있습니다 (내 메시지의 마지막 이미지 참조). 그러나 문제는 프로젝트 네트워크가 나무가 아니라는 것입니다. 모든 "최종"노드는 "최종 이벤트"노드에 연결됩니다. 어떻게 든 비 나무에 대해 TreeLayout 코드를 다시 사용할 수 있습니까? –

+0

@Dmitri :이 경우에는'Tree' 또는'Forest' 클래스를 사용할 수 없습니다 ... 아마도 ** WorldMapGraphDemo.class ** 예제에서와 같이'StaticLayout' 레이아웃을 사용하여 노드를 배치하도록 수정할 수 있습니다 M x N 그리드 (각 노드 위치는 레이아웃의 각 그리드 지점에 위치) – eee

+0

FRLayout을 구성하여 원하는대로 할 수있는 다른 솔루션이 있습니까? 그 그리드 알고리즘에 대해서는 알고 있지만 바퀴를 다시 발명하지 않는 것을 선호합니다. –