Exemplo n.º 1
0
 public int Distance(JamRangeOld range)
 {
     if (range.StartIndex > EndIndex)
        return range.StartIndex - EndIndex - 1;  //在後
        else
        return -(this.StartIndex - range.EndIndex - 1);  //在前
        //if (range.StartIndex == StartIndex && range.EndIndex== EndIndex )
        //    return 0;
        //if (range.StartIndex > EndIndex)
        //    return range.StartIndex - EndIndex-1;  //在後
        //else
        //    return -(this.StartIndex - range.EndIndex-1);  //在前
 }
Exemplo n.º 2
0
        public JamRangeOld[] Split()
        {
            //chek 22

               for (int i = 1; i < devlist.Count - 1; i++)
               {

               VDDeviceWrapper vd =devlist[i] as VDDeviceWrapper;
               int jamLevel, nextJamLevel;
               jamLevel = vd.jamLevel;
               nextJamLevel = ((VDDeviceWrapper)vd.NextDevice).jamLevel;
               if ((jamLevel == 2 && nextJamLevel == 2) || (jamLevel ==-1 && nextJamLevel == 2) ||  jamLevel < 2 &&  jamLevel >= 0) //2013-5-22
               {
                   JamRangeOld[] splitrang = new JamRangeOld[2];

                   splitrang[0] = new JamRangeOld(devlist[0] as VDDeviceWrapper);
                   splitrang[1]=new JamRangeOld(devlist[devlist.Count-1]  as VDDeviceWrapper);

                   for (int j = 1; j < i; j++)
                       splitrang[0].Merge(new JamRangeOld(devlist[j]  as VDDeviceWrapper));

                  for (int j = (vd.jamLevel==2)?i + 2:i+1; j < devlist.Count-1; j++)
                       splitrang[1].Merge(new JamRangeOld(devlist[j] as VDDeviceWrapper));

                   return splitrang;
               }

               }

               return null;
        }
Exemplo n.º 3
0
        public bool Merge( JamRangeOld range)
        {
            //if (this.Equals(range)) //#
               //    return false;

               int distance = Distance(range);

               //相鄰超過兩座以上
               if (Math.Abs(distance) > 2) //2013-6-7  >= --> >
               return false;

               //相鄰一座
               if (distance == 1)
               {
               VDDeviceWrapper vd = (VDDeviceWrapper)range.devlist[0];
               if (((VDDeviceWrapper)vd.PreDevice).jamLevel < 2  && ((VDDeviceWrapper)vd.PreDevice).jamLevel>=0)  //2013-5-22
                   return false;

               }

               if (distance == -1)
               {

               VDDeviceWrapper vd = (VDDeviceWrapper)this.devlist[0];
               if (((VDDeviceWrapper)vd.PreDevice).jamLevel < 2 && ((VDDeviceWrapper)vd.PreDevice).jamLevel >=0) //2013-5-22
                   return false;
               }

               //2013-5-22 相鄰兩座
               if (distance == 2)  //range 在後
               {
               VDDeviceWrapper vd = (VDDeviceWrapper)range.devlist[0];
               VDDeviceWrapper pre_vd = (VDDeviceWrapper)vd.getPrevDev();
               VDDeviceWrapper prepre_vd = (VDDeviceWrapper)pre_vd.getPrevDev();
               if (!(pre_vd.jamLevel == -1 && prepre_vd.jamLevel == -1))
                   return false;
               }
               if (distance == -2)  //range 在前
               {
               VDDeviceWrapper vd = (VDDeviceWrapper)this.devlist[0];
               VDDeviceWrapper pre_vd = (VDDeviceWrapper)vd.getPrevDev();
               VDDeviceWrapper prepre_vd = (VDDeviceWrapper)pre_vd.getPrevDev();
               if (!(pre_vd.jamLevel == -1 && prepre_vd.jamLevel == -1))
                   return false;
               }

               foreach (VDDeviceWrapper dev in range.devlist)
               {
               if(!this.devlist.Contains(dev))
               this.devlist.Add(dev);
               }

               this.devlist.Sort();
               range.DelMark = true;
               return true;
             //  int distance=Distance(range);
             //  VDDeviceWrapper middledev=null;
             //  //相鄰超過兩座以上
             // if (Math.Abs(distance)>=2   )
             //    return false;

             // if (distance == 0)
             // {
             //     range.DelMark = true;
             //     return false;
             // }
             //  //相鄰一座

             //if (distance == 1)// range 在後
             //{
             //    VDDeviceWrapper vd = (VDDeviceWrapper)range.devlist[0];
             //    middledev = (VDDeviceWrapper)vd.PreDevice;
             //    if (middledev.jamLevel < 2)
             //        return false;

             //}

             //if (distance == -1)  //range 在前
             //{

             //    VDDeviceWrapper vd = (VDDeviceWrapper)this.devlist[0];
             //    middledev = (VDDeviceWrapper)vd.PreDevice;

             //    if (middledev.jamLevel < 2)
             //        return false;
             //}

             //foreach (VDDeviceWrapper dev in range.devlist.ToArray())
             //{
             //    if (!devlist.Contains(dev))  //#2013/4/20
             //            this.devlist.Add(dev);
             //}

             //if (middledev != null)
             //{
             //    if(!this.devlist.Contains(middledev)) //#2013/4/20
             //       this.devlist.Add(middledev);
             //}

             //  this.devlist.Sort();
             //  range.DelMark = true;
             //return true;
        }