public List <Milestone> GetRangeMileage(int totalSmapleCount) { List <Milestone> rangeMileage = new List <Milestone>(WaveformDataCount); long endPostion = -1; long[] postions = CitFileProcess.GetPositons(_citFilePath); long postion = CitFileProcess.GetAppointEndPostion(CitFilePath, postions[0], totalSmapleCount); rangeMileage = CitFileProcess.GetMileStoneByRange(CitFilePath, postion, WaveformDataCount, ref endPostion); if (IsLoadIndex) { if (MileageFix.FixData.Count > 0) { rangeMileage = MileageFix.GetMileageReviseData(rangeMileage); } else { IsLoadIndex = false; } } return(rangeMileage); }
/// <summary> /// 根据起始位置加载波形数据 /// </summary> /// <param name="startPostion">起始点</param> public void GetWaveformData(long startPostion) { if (File.Exists(_citFilePath)) { long endPos = 0; long startPos = 0; long realStartPos = 0; long[] postions = CitFileProcess.GetPositons(_citFilePath); startPos = startPostion; if (LayerConfig.IsReverse) { startPos -= ReviseValue * _citFile.iChannelNumber * 2; } else { startPos += ReviseValue * _citFile.iChannelNumber * 2; } realStartPos = startPos; int pointCount = 0; if (startPos < postions[0]) { while (startPos < postions[0] && pointCount < WaveformDataCount) { startPos += _citFile.iChannelNumber * 2; pointCount++; } pointCount = WaveformDataCount - pointCount; } else if (startPos > postions[1]) { while (startPos > postions[1] && pointCount < WaveformDataCount) { startPos -= _citFile.iChannelNumber * 2; pointCount++; } pointCount = WaveformDataCount - pointCount; } else { pointCount = WaveformDataCount; } if (LayerConfig.IsReverse) { pointCount = pointCount * -1; } CurrentPostion = startPos; endPos = CitFileProcess.GetAppointEndPostion(_citFilePath, startPos, pointCount); List <double[]> data = null; if (LayerConfig.IsReverse) { data = CitFileProcess.GetAllChannelDataInRange(_citFilePath, endPos, startPos); MileList.milestoneList = CitFileProcess.GetMileStoneByRange(_citFilePath, endPos, startPos); } else { data = CitFileProcess.GetAllChannelDataInRange(_citFilePath, startPos, endPos); MileList.milestoneList = CitFileProcess.GetMileStoneByRange(_citFilePath, startPos, endPos); } if (IsLoadIndex) { MileList.milestoneList = MileageFix.GetMileageReviseData(MileList.milestoneList); } data.RemoveAt(0); data.RemoveAt(0); if (ChannelList.Count > 0) { for (int i = 0; i < data.Count; i++) { if (ChannelList.Count > i) { ChannelList[i].Data = new double[WaveformDataCount]; if (data[i].Length < WaveformDataCount) { double[] temp = new double[data[i].Length]; Array.Copy(data[i], temp, data[i].Length); data[i] = new double[WaveformDataCount]; if (realStartPos < postions[0]) { Array.Copy(temp, 0, data[i], WaveformDataCount - temp.Length, temp.Length); } else { Array.Copy(temp, data[i], temp.Length); } } if (LayerConfig.IsReverse) { Array.Reverse(data[i]); } Array.Copy(data[i], ChannelList[i].Data, WaveformDataCount); } else { break; } } if (MileList.milestoneList.Count < WaveformDataCount) { int count = WaveformDataCount - MileList.milestoneList.Count; for (int i = 0; i < count; i++) { if (realStartPos < postions[0]) { MileList.milestoneList.Insert(0, new Milestone() { mKm = 0, mMeter = 0 }); } else { MileList.milestoneList.Add(new Milestone() { mKm = 0, mMeter = 0 }); } } } if (LayerConfig.IsReverse) { MileList.milestoneList.Reverse(); } } } else { throw new InvalidDataException("CIT文件路径无效或为空!"); } }