// ======================================== // method // ======================================== public void Route(IEdge edge) { var bendPts = default(Point[]); if (!edge.IsSourceConnected && !edge.IsTargetConnected) { bendPts = BothDisconnected(edge); } else if (edge.IsSourceConnected && !edge.IsTargetConnected) { bendPts = SourceConnected(edge); if (_NeedMoveSourcePoint) { edge.SourcePoint = GetSourceLocation(edge); } } else if (!edge.IsSourceConnected && edge.IsTargetConnected) { bendPts = TargetConnected(edge); if (_NeedMoveTargetPoint) { edge.TargetPoint = GetTargetLocation(edge); } } else if (edge.IsSourceConnected && edge.IsTargetConnected) { bendPts = BothConnected(edge); if (_NeedMoveSourcePoint) { edge.SourcePoint = GetSourceLocation(edge); } if (_NeedMoveTargetPoint) { edge.TargetPoint = GetTargetLocation(edge); } } edge.ClearBendPoints(); foreach (var pt in bendPts) { // todo: constraintでptをずらせるようにする edge.AddBendPoint(pt); } }