public static HoleCollection LoadFromFile(string fileName) { BaseInfoCollection collection = new BaseInfoCollection(fileName); HoleCollection holeCollection = new HoleCollection(); for (int i = 0; i < collection.Count; i++) { var baseInfo = collection[i]; if (baseInfo is SingleMoveInfo) { var singleMove = baseInfo as SingleMoveInfo; var holeInfo = new HoleInfo() { X = singleMove.X, Y = singleMove.Y, W = singleMove.W, B = singleMove.B, C = singleMove.C, Param = singleMove.Param }; if (i < collection.Count - 1 && collection[i + 1] is M21Info) { holeInfo.IsJiaGong = true; } holeCollection.Add(holeInfo); } } return(holeCollection); }
public object Clone() { var newCollection = new HoleCollection(); foreach (var item in this) { newCollection.Add(item.Clone() as HoleInfo); } return(newCollection); }
public static HoleCollection LoadCnc(string fileName, string mode) { using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) { var collection = new HoleCollection(); var axisType = "G54"; string line = sr.ReadLine().Replace(" ", ""); if (string.IsNullOrEmpty(line) || !line.StartsWith("O1234")) { throw new WarningException(L.R("PNCHelper.FileError1", "文件格式错误:缺少开始符!")); } HoleInfo holeInfo = null; int index = 2; Regex reg = new Regex(@"([X,Y,W,B,C])([-]?\d+(\.\d+)?)"); while (true) { line = sr.ReadLine().Replace(" ", ""); if (!string.IsNullOrEmpty(line)) { if (mode == "2") { if (line.StartsWith("G")) { holeInfo = new HoleInfo() { IsJiaGong = false, AxisType = axisType }; string[] list = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (list.Length != 7 && list.Length != 8) { throw new WarningException("无效的脚本:" + line); } holeInfo.AxisType = list[0]; holeInfo.X = Convert.ToDecimal(list[1]); holeInfo.Y = Convert.ToDecimal(list[2]); holeInfo.W = Convert.ToDecimal(list[3]); holeInfo.B = Convert.ToDecimal(list[4]); holeInfo.C = Convert.ToDecimal(list[5]); holeInfo.Param = list[6]; if (list.Length == 8) holeInfo.IsJiaGong = list[7] == "M21"; collection.Add(holeInfo); } else if ((line.StartsWith("M11") || line.StartsWith("M21")) && holeInfo != null) { holeInfo.IsJiaGong = true; } else if (line.StartsWith("M30")) { break; } else { throw new WarningException(L.R("PNCHelper.FileError3", "文件格式错误:无法解析的行[{0}],行{0}"), line, index); } } else { if (line.StartsWith("G0")) { holeInfo = new HoleInfo() { IsJiaGong = false, AxisType = axisType }; MatchCollection matchs = reg.Matches(line); foreach (Match match in matchs) { switch (match.Groups[1].Value) { case "X": holeInfo.X = Convert.ToDecimal(match.Groups[2].Value); break; case "Y": holeInfo.Y = Convert.ToDecimal(match.Groups[2].Value); break; case "W": holeInfo.W = Convert.ToDecimal(match.Groups[2].Value); break; case "B": holeInfo.B = Convert.ToDecimal(match.Groups[2].Value); break; case "C": holeInfo.C = Convert.ToDecimal(match.Groups[2].Value); break; } } collection.Add(holeInfo); } else if (line == "G54" || line == "G55" || line == "G56" || line == "G57" || line == "G58" || line == "G59") { axisType = line; } else if ((line.StartsWith("M11") || line.StartsWith("M21")) && holeInfo != null) { holeInfo.IsJiaGong = true; } else if (line.StartsWith("M30")) { break; } else { throw new WarningException(L.R("PNCHelper.FileError3", "文件格式错误:无法解析的行[{0}],行{0}"), line, index); } } index++; } } return collection; } } }