Example #1
0
        public static void sortByDistance()
        {
            List <BlockData> result = new List <BlockData>();
            xyPoint          first  = new xyPoint();
            double           distanceReverse;
            BlockData        tmp;
            bool             allowReverse = !VisuGCode.containsG2G3Command() && !VisuGCode.containsG91Command() && !VisuGCode.containsTangential();

            while (listFigures.Count > 0)
            {
                for (int i = 0; i < listFigures.Count; i++)
                {
                    tmp             = listFigures[i];
                    tmp.distance    = first.DistanceTo(tmp.posStart);
                    distanceReverse = first.DistanceTo(tmp.posEnd);
                    if (allowReverse && (distanceReverse < tmp.distance))
                    {
                        tmp.distance = distanceReverse;
                        tmp.reverse  = true;
                    }
                    listFigures[i] = tmp;
                }
                listFigures.Sort((x, y) => x.distance.CompareTo(y.distance));

                result.Add(listFigures[0]);
                first = listFigures[0].posEnd;
                listFigures.RemoveAt(0);
            }

            listFigures.Clear();
            foreach (BlockData item in result)
            {
                listFigures.Add(item);
            }
        }