2015-01-27 7 views
0

GEF를 사용하여 파일 간의 종속성을 시각화하는 도구를 만듭니다. 노드 간 연결을 성공적으로 관리했으며 ManhattenConnectionRouter을 사용하는 기능을 전환 할 수도 있습니다.Eclipse GEF FanRouter

그러나 FanRouter을 사용하는 데 문제가 있습니다.

GEF에서 제공하는 논리 예제를 따라했으나 여전히 문제가 있습니다. 불행하게도 FanRouter을 구현하는 방법을 보여주는 다른 튜토리얼은 없습니다. 구현의 FreeformLayer

기본 클래스 :

public class DependencyGraphPart extends AbstractGraphicalEditPart implements LayerConstants { 

    private DependencyGraphAdapter adapter; 

    public DependencyGraphPart(){ 
     super(); 
     adapter = new DependencyGraphAdapter(); 
    } 

    @Override protected IFigure createFigure() { 
     FreeformLayer layer = new FreeformLayer(); 
     layer.setLayoutManager(new FreeformLayout()); 
     layer.setBorder(new LineBorder(1)); 

     return layer; 
    } 

    @Override protected void refreshVisuals(){ 
     ConnectionLayer cLayer = (ConnectionLayer) getLayer(CONNECTION_LAYER); 
     cLayer.setAntialias(SWT.ON); 
     AutomaticRouter frouter = new FanRouter(); 
     cLayer.setConnectionRouter(frouter); 
    } 

그리고 여기 내 ConnectionClass :

여기 내 코드의 발췌 나는 ManhattenConnectionRouter I를 구현하기 위해 노력

public class DCDependencyPart extends AbstractConnectionEditPart{  
    private DCDependencyAdapter adapter; 
    private Label label; 

    public DCDependencyPart() { 
     super(); 
     adapter = new DCDependencyAdapter(); 
    } 

    @Override protected void createEditPolicies() { 
     installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy()); 
    } 

    @Override 
    protected IFigure createFigure(){ 
     PolylineConnection conn = new PolylineConnection(); 
     conn.setLineWidth(conn.getLineWidth()*2); 
     conn.setConnectionRouter(new FanRouter()); 
     conn.setTargetDecoration(new PolylineDecoration()); 
     conn.setToolTip(new TooltipFigure()); 

     label = new Label("1"); 
     label.setOpaque(true); 
     label.setBackgroundColor(ColorConstants.buttonLightest); 
     label.setBorder(new LineBorder()); 
     conn.add(label, new MidpointLocator (conn, 0)); 

     return conn; 
    } 

그것을 Connection 클래스에 추가하는 것만으로는 아무런 문제가 없었다. (DependencyGraphPart의 수정 없음)

이들은 두 곳에서 활발하게 사용합니다 (Router). 불행히도 나는 내 문제를 찾기에 충분할만큼 draw2d 및/또는 GEF를 모른다.

답변

1

FanRouter는 충돌을 처리하는 라우터입니다. 예를 들어 BendpointConnectionRouter가 될 수있는 "다음"라우터가 필요합니다.이 라우터는 연결 레이아웃을 위해 모든 노력을 다할 것입니다. 일단 Fanrouter가 연결을 레이아웃하면 "다음"라우터를 사용하여 실제 연결 레이아웃을 수행 한 다음이 연결이 동일한 소스 및 대상과의 다른 연결과 겹치지 않는지 확인한 다음 추가 연결 지점을 소개합니다 conneftions가 서로 겹치지 않도록 보장합니다. 아래는 FanRouter의 적절한 사용의 예입니다 : 그래서

AutomaticRouter router = new FanRouter(); 
router.setNextRouter(new BendpointConnectionRouter()); 
connectionLayer.setConnectionRouter(router); 
+0

, 나는 당신의 예와 같이의 EditPart 클래스에'BendpointConnectionRouter을()'추가했습니다. 이러한 것들을 Connection 클래스에도 추가해야합니까, 아니면 라우팅을 완전히 제거해야합니까? 또한 모델에 저장하지 않으려면 BendpointEditPolicy가 필요합니까? – stklik

+1

아니요, 원하지 않는 절곡 점을 편집 할 수 있으므로 절곡 점에 대한 편집 정책이 필요하지 않습니다. 라우팅은 연결 계층에 설정되므로 모든 연결에 대해 설정됩니다. 연결 숫자에 수동으로 추가 된 라우터 설정을 제거하십시오. – aboyko