/// <summary> /// 指定した二つのパーツの重なり判定をする /// </summary> /// <param name="p1">パーツ1</param> /// <param name="p2">パーツ2</param> /// <param name="isIllusionCheck">true = イリュージョンを考慮する</param> /// <returns>true = 重なっている / false = 重なっていない</returns> public override bool IsOverlapped(IRichPane pane1, PartsBase parts1, IRichPane pane2, PartsBase parts2, bool isIllusionCheck) { try { if (isIllusionCheck) { foreach (IRichPane pp1 in PartsIllusionProjector.GetEnumerator(pane1, getProjectors(pane1, false), parts1)) { var sr1 = parts1.GetScRect(pp1, parts1.Rect); foreach (IRichPane pp2 in PartsIllusionProjector.GetEnumerator(pane2, getProjectors(pane2, false), parts2)) { var sr2 = parts2.GetScRect(pp2, parts2.Rect); var union = sr1 & sr2; if (union != null) { return(true); } } } } else { if (pane1 == pane2) { var pt1 = parts1.GetPtRect(parts1.Rect); var pt2 = parts2.GetPtRect(parts2.Rect); return(pt1.IsIn(pt2)); } else { var sr1 = parts1.GetScRect(pane1, parts1.Rect); var sr2 = parts2.GetScRect(pane2, parts2.Rect); return(sr1.IsIn(sr2)); } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("IsOverlappedは次の例外でキャンセル; " + e.Message); } return(false); }
/// <summary> /// 指定パーツを再描画要求する /// </summary> /// <param name="parts">再描画するパーツの領域</param> /// <param name="rp">指定パーツに属すリッチペーン</param> public virtual void Invalidate(PartsBase parts, IRichPane rp) { var r = ((ScreenRect)parts.GetScRect(rp, parts.Rect).GetPpSize()) & rp.GetPaneRect(); rp.Invalidate(r); }