Пример #1
0
        //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);
        }
Пример #2
0
        private static ToolpathGroup parse_toolpath_group(Queue <string> lines)
        {
            ToolpathGroup tpg = new ToolpathGroup();
            Indirv        current_indirv = new Indirv();
            string        cutter_line = "", tprint_line = "";
            GoTo          current_position = new GoTo();
            //double[] c_p = {0.0, 0.0, 0.0};
            string line;

            while (!lines.Peek().Contains("$$Machine Group-") && !lines.Peek().Contains("FINI"))
            {
                line = lines.Dequeue();

                if (line.Contains("PARTNO"))
                {
                    apt_data.PartNo = parse_apt_partno(line);
                    continue;
                }

                if (line.Contains("UNITS"))
                {
                    apt_data.Units = parse_apt_units(line);
                    continue;
                }

                if (line.Contains("MULTAX"))
                {
                    apt_data.Multax = parse_apt_multax(line);
                    continue;
                }

                /*
                 * if (line.Contains("MACHIN/"))
                 * {
                 *
                 *  continue;
                 * }
                 */

                if (line.Contains("CUTTER"))
                {
                    cutter_line = line;
                    continue;
                }

                if (line.Contains("TPRINT"))
                {
                    tprint_line = line;
                    continue;
                }

                if (line.Contains("LOAD"))
                {
                    LoadTL current_tool = parse_apt_loadtl(line);
                    if (!apt_data.CutterTools.ContainsKey(current_tool.ID))
                    {
                        CutterTool tool = new CutterTool();
                        tpg.Tool     = tool.ID = current_tool.ID;
                        tool.Label   = parse_apt_tprint(tprint_line);
                        tool.Tparams = parse_apt_cutter(cutter_line);
                        apt_data.CutterTools.Add(tool.ID, tool);
                    }
                    continue;
                }

                if (line.Contains("RAPID"))
                {
                    tpg.MachiningData.Add(new Rapid());
                    continue;
                }

                if (line.Contains("GOTO/"))
                {
                    current_position = parse_apt_goto(line);
                    tpg.MachiningData.Add(current_position);

                    continue;
                }

                if (line.Contains("INDIRV"))
                {
                    current_indirv = parse_apt_indirv(line);
                    tpg.MachiningData.Add(current_indirv);
                    continue;
                }

                if (line.Contains("CIRCLE/"))
                {
                    Circle current_circle = parse_apt_circle(current_position, current_indirv, line, lines.Dequeue(), lines.Dequeue());

                    current_position = new GoTo();

                    current_position.X = current_circle.X;
                    current_position.Y = current_circle.Y;
                    current_position.Z = current_circle.Z;

                    tpg.MachiningData.Add(current_circle);
                    continue;
                }

                if (line.Contains("FEDRAT"))
                {
                    tpg.MachiningData.Add(parse_apt_fedrate(line));
                    continue;
                }

                if (line.Contains("SPINDL"))
                {
                    tpg.MachiningData.Add(parse_apt_spinlespeed(line));
                    continue;
                }

                if (line.Contains("COOLNT"))
                {
                    tpg.MachiningData.Add(parse_apt_coolant(line));
                    continue;
                }
            }

            return(tpg);
        }