私は現在、ユーザーがマウス操作でオブジェクトを移動することにより、スクロール可能な領域上のオブジェクトを見つけることができる Winforms C# アプリケーションを開発しています。スクロール可能領域とオブジェクトはどちらもパネル コントロールです。
ユーザーは、ツールバーからオブジェクト タイプを選択した後、マウス クリックによって、スクロール可能な領域にオブジェクトを動的に配置します。
ユーザーがオブジェクトをある場所から別の場所に移動しているときに、スクロール可能な領域でオブジェクトの境界が交差しないようにする必要があります。
基本的に、linq の intersect メソッドを使用して交差点を確認することは難しくないことを知っています。ただし、ほとんどの場合、スクロール可能な領域には多くのオブジェクトがあります。そのため、n個のオブジェクトの交差の可能性をチェックするための効率的で高速なロジックを見つけることを考えていました。
ご提案をいただければ幸いです。
ありがとう
MouseUpイベント(ユーザーがオブジェクトを離したとき)で次のメソッドを試しました
private bool IsIntersected(BaseNode movingControl)
{
List<BaseNode> controls = (from x in Controls.Cast<Control>()
.Where(x => x.GetType()
.IsSubclassOf(typeof(BaseNode)))
select (BaseNode)x).ToList();
if (controls.Count > 0 && controls.Contains(movingControl))
controls.Remove(movingControl);
foreach (BaseNode o in controls)
if (o.DisplayRectangle.IntersectsWith(movingControl.DisplayRectangle))
return true;
return false;
}