Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GEF/draw2d线布线算法_Java_Eclipse_Draw2d_Eclipse Gef - Fatal编程技术网

Java GEF/draw2d线布线算法

Java GEF/draw2d线布线算法,java,eclipse,draw2d,eclipse-gef,Java,Eclipse,Draw2d,Eclipse Gef,我正在使用GEF和Draw2d创建一个图形 我想展示一个三层结构,这意味着: RootEditPart / Level1EditPart / Level2EditPart / Level3EditPart 其中Level2有多个子项 我想在Level3EditParts(在Level2容器中)之间绘制连接 我感到困惑的是,我在哪里为这些连接设置了线路路由算法,以及它是如何通过父/子EditPart/图层次结构继承的 理想情况下,我想使用最短路径连接路由器。 我尝试使用Level2EditPart

我正在使用GEF和Draw2d创建一个图形

我想展示一个三层结构,这意味着:

RootEditPart
/
Level1EditPart
/
Level2EditPart
/
Level3EditPart

其中Level2有多个子项

我想在Level3EditParts(在Level2容器中)之间绘制连接

我感到困惑的是,我在哪里为这些连接设置了线路路由算法,以及它是如何通过父/子EditPart/图层次结构继承的

理想情况下,我想使用最短路径连接路由器。 我尝试使用Level2EditPart中的图,将其设置为连接层的连接路由器。 我的理解是,它将使用这个数字的孩子作为要避免的障碍(因此它不会通过我的其他3级画线,而是尽量避免它们)

但它不是这样工作的,当我调试代码时,它看起来像是在最短路径路由算法中,使用一个坐标系作为连接图(我猜是连接层的坐标系),另一个坐标系作为三级图(其父图形的坐标系。二级图)。 这意味着,当它与我的3级中的一级相交时,它永远不会成功,所以永远不会试图避免它们


因此,我要么误解了ShortestPathConnectionRouter的功能,要么设置不正确。有人能给我一些帮助吗?

您不能将
最短路径连接路由器设置为连接层的路由器,因为您必须在构造函数中为其提供一个父图形。
要使用此路由器,您必须为要使用它的每个连接设置它,并且还必须提供一个易于检索的父图形,如下所示:

if(getSource().getParent() instanceof MyNodeEditPart) {
    MyNodeEditPart parent = (MyNodeEditPart) getSource().getParent();
    conn.setConnectionRouter(new ShortestPathConnectionRouter(parent.getFigure()));
}
这样就行了