2016-05-08 10 views
0

最初のノードの向きに応じて、ノードのポイントを他のノードのポイントに接続しようとしています。問題は、XとYの位置と幅と高さが与えられているかどうかをノードコールが左か右か北か南かを示す方法を考えるのが難しいことです。ここ は、問題の画像である:(child.Y> parent.Y)の場合、私は、例えば、X及びY値を比較しようとしているenter image description hereあるノードから他のノードへの向きを比較する方法

- >サウスポイントにスナップ、それはあまりにも曖昧であり、意志右または左に配置されている場合は、北または南にスナップします。私は正しい方向を得るために使うことができるより具体的な条件に関するアイデアはありますか?あなたはボックス上のアンカーポイントを定義することでそれを行うことができ、あなたに

+0

私はあなたの質問を理解していません。あなたは2つのノードの向きやノードの位置だけを見つけようとしていますか? – ItachiUchiha

+0

こんにちは、混乱している場合はごめんなさい。 defaultClassのラインをdefaultInterfaceの右端に接続します。私がここに持っている最初の条件は、defaultClassのYがdefaultInterfaceのYよりも小さい場合、北の点にスナップすることです。これは、defaultClassのYがdefaultInterfaceの右側にあるものの、より高い場合は常にそうです。 – ricefieldboy

+0

右側にあるかどうかは、ノードのX座標を知ることによって計算できます。したがって、最も簡単な解決策は、ペインの両方の 'layoutX' /' layoutY'を知り、それを比較することです。 – ItachiUchiha

答えて

0

ありがとう:

public class UMLClassBox { 
    private Point2D north; 
    private Point2D east; 
    private Point2D south; 
    private Point2D west; 
    public List<Point> getAnchorPoints() { 
    ... 
    } 
} 

あなたが最も近い2つのノードを見つけるためのメソッドを持つことができる第二段階として:

public Point2D[] findClosestNodes(UMLClassBox box1, UMLClassBox box2) { 
    Point2D[] closest = new Point2D[2]; 
    double shortestDistance = Double.MAX_VALUE; 
    for (Point2D anchorBox1 : box1.getAnchorPoints()) { 
    for (Point2D anchorBox2 : box2.getAnchorPoints()) { 
     double distance = anchorBox1.distance(anchorBox2); 
     if (distance < shortestDistance) { 
     shortestDistance = distance; 
     closest[0] = anchorBox1; 
     closest[1] = anchorBox2; 
     } 
    } 
    } 
    return closest; 
} 

2つのアンカーポイントのペアが同じ距離を持つ可能性はありますが、いずれの場合も同じように有効なので、この場合は問題にはなりません。