2017-04-18 55 views
1

我有一個包含18個頂點和很多邊的圖。由於所涉及的元素數量及其結構,可用的內置算法(即,用於所示圖像的mxHierarchicalLayout)未按預期工作,導致大部分描述的邊緣重疊,如圖所示 Current status sampleJGraphX:重新定位頂點上的邊緣終端

做一些測試和檢查的源代碼,我設法改變的邊緣只有幾件事情線槽mxCell的幾何形狀:

  • 邊緣拉布勒
  • 控制點

然而我找不到任何方式來操縱源和目標終端的點。任何人都可以建議我使用適當的類別/方法來控制終端應該連接的位置。

任何幫助/信息將不勝感激。

我設法測試操縱邊緣上的代碼如下:

.. 
    Arrays.asList(edges).stream().map(edge -> (mxCell) edge).forEach(edge -> { 
      mxGeometry newGeo = (mxGeometry) edge.getGeometry().clone(); 
      // TODO calculate condition 
      // This code actually move the label from the default 
      // position 
      mxPoint offset = new mxPoint(edge.getGeometry().getPoint().getX() + EDGE_OFFSET, 
        edge.getGeometry().getPoint().getY() + EDGE_OFFSET); 
      newGeo.setOffset(offset); 
      newGeo.setX(newGeo.getX() + 1); 
      if (newGeo.getPoints() != null) { 
       newGeo.getPoints().forEach(point -> { 
        point.setX(point.getX() + 200); 
        point.setY(point.getY() + 200); 
       }); 
      } 
      model.setGeometry(edge,newGeo); 
    }); 

感謝和問候

回答

0

源和目標終端的位置被確定根據小區和它的形狀邊境。這可以通過使用mxGraphView.getPerimeterPoint(cellState, point...),並使用mxGraphView.getPerimeterFunctionmxGraphView.getPerimeterBounds來獲得。

這適用於邊緣標籤的初始放置(我使用它來放置多個邊緣標籤 - 例如UML類圖中的基數)。

但是,此方法使用mxCellState,出於某種原因,我不知道在移動事件中使用mxEventListener重新定位時無法使用此方法。當事件被觸發時,單元格狀態仍然設​​置在單元格的前一個位置。