Exemplo n.º 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);
        }
Exemplo n.º 2
0
            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
                    }
                }
            }