コード例 #1
0
 /// <summary>
 /// 判断是否相交
 /// </summary>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static bool CheckIntersection(CullUnit a, CullUnit b)
 {
     if (b.max < a.min)
     {
         return(false);
     }
     if (b.min > a.max)
     {
         return(false);
     }
     return(true);
 }
コード例 #2
0
 /// <summary>
 /// 合并两个
 /// </summary>
 /// <param name="v"></param>
 public void Combine(CullUnit v)
 {
     this.min = System.Math.Min(this.min, v.min);
     this.max = System.Math.Max(this.max, v.max);
     if (this.listIndex == null)
     {
         this.listIndex = new List <int>();
     }
     if (v.listIndex != null && v.listIndex.Count > 0)
     {
         this.listIndex.AddRange(v.listIndex);
     }
     this.pointCounts += v.pointCounts;
 }
コード例 #3
0
        /// <summary>
        /// 添加一个挡格。
        /// </summary>
        /// <param name="ContourPolyIndex"></param>
        /// <param name="ab"></param>
        public static void Process(int index, TreeData data, bool isXCuling)
        {
            if (data == null)
            {
                return;
            }
            CullUnit unit = null;

            if (isXCuling == true)
            {
                unit = new CullUnit(data.min.x, data.max.x, index, data.Count);
            }
            else
            {
                unit = new CullUnit(data.min.y, data.max.y, index, data.Count);
            }
            AddLineUnit(ref s_ListLineUnit, unit);
        }
コード例 #4
0
 /// <summary>
 /// 查找到相交的区间
 /// </summary>
 /// <param name="listLineUnit"></param>
 /// <param name="unit"></param>
 /// <param name="retIndex"></param>
 /// <returns></returns>
 private static void AddLineUnit(ref List <CullUnit> listLineUnit, CullUnit unit)
 {
     if (listLineUnit.Count > 0)
     {
         bool isHaveCombine = false;
         // 找到起始位置
         for (int i = 0; i < listLineUnit.Count; i++)
         {
             if (CullUnit.CheckIntersection(unit, listLineUnit[i]) == true)
             {
                 if (isHaveCombine == false)
                 {
                     isHaveCombine = true;
                     listLineUnit[i].Combine(unit);
                     unit = listLineUnit[i];
                 }
                 else
                 {
                     unit.Combine(listLineUnit[i]);
                     listLineUnit.RemoveAt(i);
                     i--;
                 }
             }
             else if (unit.max < listLineUnit[i].min)
             {
                 if (isHaveCombine == false)
                 {
                     listLineUnit.Insert(i, unit);
                     isHaveCombine = true;
                 }
                 break;
             }
         }
         if (isHaveCombine == false)
         {
             listLineUnit.Insert(listLineUnit.Count, unit);
         }
     }
     else
     {
         listLineUnit.Add(unit);
     }
 }