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); //在前 }
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; }
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; }