Beispiel #1
0
 /// <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);
 }
Beispiel #2
0
        /// <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);
        }