//private----------------------------------------------------------------- private MetaData parseMastercamAPT(Queue <string> lines) { string line; Indirv current_indirv = new Indirv(); Point current_position = new Point(0.0, 0.0, 0.0); int current_tool = -1; MetaData metadata = new MetaData(); while (!lines.Peek().Contains("FINI"))//data parsing { if (lines.Peek().Contains("$$Machine Group-")) { MachineGroup mg = new MachineGroup(); mg.ID = Convert.ToInt32(lines.Peek().Substring("$$Machine Group-".Length)); while (!lines.Peek().Contains("FINI") || (lines.Peek().Contains("$$Machine Group-") && (Convert.ToInt32(lines.Peek().Substring("$$Machine Group-".Length)) == mg.ID))) { lines.Dequeue(); ToolpathGroup tpg = new ToolpathGroup(); tpg.ID++; while (!lines.Peek().Contains("$$Machine Group-") && !lines.Peek().Contains("FINI")) { line = lines.Dequeue(); if (line.Contains("PARTNO/")) { metadata.PartNo = line.Substring("PARTNO/".Length); continue; } if (line.Contains("UNITS/")) { metadata.Units = line.Substring("UNITS/".Length); metadata.Units = metadata.Units.Replace(" ", string.Empty); continue; } if (line.Contains("MULTAX/")) { metadata.Multax = line.Substring("MULTAX/".Length); metadata.Multax = metadata.Multax.Replace(" ", string.Empty); continue; } //if (line.Contains("MACHIN/")) //{ // string[] substrings = Regex.Split(line.Substring("MACHIN/".Length), ","); // metadata.Machin = substrings[0].Replace(" ", string.Empty); // continue; //} if (line.Contains("CUTTER/")) { Cutter tool = new Cutter(); string[] substrings = Regex.Split(line.Substring("CUTTER/".Length), ","); tool.Diameter = Convert.ToDouble(substrings[0].Replace(" ", string.Empty)); //tpg.tpgtool.length = Convert.ToDouble(substrings[1].Replace(" ", string.Empty)); line = lines.Dequeue(); tool.Name = line.Substring("TPRINT/".Length); line = lines.Dequeue(); string[] substrings2 = Regex.Split(line.Substring("LOAD/".Length), ","); current_tool = tpg.Tool = tool.ID = Convert.ToInt32(substrings2[1].Replace(" ", string.Empty).Replace(".", string.Empty)); if (!metadata.CutterTools.ContainsKey(tool.ID)) { metadata.CutterTools.Add(tool.ID, tool); } continue; } if (line.Contains("RAPID")) { tpg.MachiningData.Add(new Rapid()); continue; } if (line.Contains("GOTO/")) { GoTo gotoxyz = new GoTo(); gotoxyz.parseGoto(line); tpg.MachiningData.Add(gotoxyz); current_position = gotoxyz.point; continue; } if (line.Contains("INDIRV/")) { Indirv indirv = new Indirv(); indirv.parseIndirv(line); tpg.MachiningData.Add(indirv); current_indirv = indirv; continue; } if (line.Contains("CIRCLE/")) { Circle circle = new Circle(); circle.parseCircle(current_indirv, current_position, line, lines.Dequeue(), lines.Dequeue()); tpg.MachiningData.Add(circle); current_position = circle.endpoint; continue; } if (line.Contains("FEDRAT/")) { Feedrate fedrat = new Feedrate(); fedrat.parseFedrat(line); tpg.MachiningData.Add(fedrat); continue; } if (line.Contains("SPINDL/")) { SpindleSpeed spindle = new SpindleSpeed(); spindle.parseSpindleSpeed(line); tpg.MachiningData.Add(spindle); continue; } if (line.Contains("COOLNT/")) { Coolant coolant = new Coolant(); coolant.parseCoolant(line); tpg.MachiningData.Add(coolant); continue; } } if (tpg.Tool == -1) { tpg.Tool = current_tool; } mg.Operations.Add(tpg); //add toolpath to list } metadata.MachineGroups.Add(mg); //add current machine group to list } else { lines.Dequeue(); } } lines.Dequeue(); return(metadata); }
public void parseCircle(Indirv indirv, Point startpoint, string line1, string line2, string line3) { //getting center string[] substrings = Regex.Split(line1.Substring(line1.IndexOf("CIRCLE/") + "CIRCLE/".Length), ","); center.X = Convert.ToDouble(substrings[0].Replace(" ", string.Empty)); center.Y = Convert.ToDouble(substrings[1].Replace(" ", string.Empty)); center.Z = Convert.ToDouble(substrings[2].Replace(" ", string.Empty)); //getting radius radius = Convert.ToDouble(line2.Substring(0, line2.IndexOf(")") - 1).Replace(" ", string.Empty)); //getting end point string[] substring2 = line3.Split(','); endpoint.X = Convert.ToDouble(substring2[0].Replace(" ", string.Empty)); endpoint.Y = Convert.ToDouble(substring2[1].Replace(" ", string.Empty)); endpoint.Z = Convert.ToDouble(substring2[2].Replace(" ", string.Empty).Replace(")", string.Empty)); //determines the direction of movement if (indirv.i <= 0 && indirv.j < 0) { if (center.X < startpoint.X && center.Y >= startpoint.Y) { direction = false;//CW } else if (center.X > startpoint.X && center.Y <= startpoint.Y) { direction = true;//CCW } } if (indirv.i < 0 && indirv.j >= 0) { if (center.X >= startpoint.X && center.Y > startpoint.Y) { direction = false;//CW } else if (center.X <= startpoint.X && center.Y < startpoint.Y) { direction = true;//CCW } } if (indirv.i >= 0 && indirv.j > 0) { if (center.X > startpoint.X && center.Y <= startpoint.Y) { direction = false;//CW } else if (center.X < startpoint.X && center.Y >= startpoint.Y) { direction = true;//CCW } } if (indirv.i > 0 && indirv.j <= 0) { if (center.X <= startpoint.X && center.Y < startpoint.Y) { direction = false;//CW } else if (center.X >= startpoint.X && center.Y > startpoint.Y) { direction = true;//CCW } } }