Example #1
0
 /// <summary>
 /// Добавить контуры другого региона, применив к ним трансформацию.
 /// </summary>
 /// <param name="region">Регион, из которого будут копироваться контуры.</param>
 /// <param name="trans">Трансформация, которая будет применяться к контурам.</param>
 public void AddWithTransform(IRegion region, Transform trans)
 {
     foreach (IContour cont in region.Contours)
     {
         BasicContour ncont = new BasicContour();
         ncont.AddWithTransform(cont, trans);
         DrawningContours.Add(ncont);
     }
 }
Example #2
0
        /// <summary>
        /// Сгенерировать контуры по списку отрезков.
        /// </summary>
        /// <param name="points">Массив начальных и конечных точек отрезков.
        /// ([0] - начало первого, [1] - конец первого, [2] - начало второго и т.п.)</param>
        /// <returns>Сгенерированные контуры.</returns>
        static List<BasicContour> GenerateContours(ICollection<Point> segments)
        {
            List<Point> segs = new List<Point>(segments);
            List<BasicContour> contours = new List<BasicContour>();
            if (segments.Count < 2 || segments.Count % 2 != 0)
                return contours;

            BasicContour cont = new BasicContour();
            cont.DrawningPoints.Add(segs[0]);
            cont.DrawningPoints.Add(segs[1]);
            segs.RemoveAt(0);
            segs.RemoveAt(0); // Не ошибка.

            while (segs.Count != 0)
            {
                bool inserted = false;

                for (int i = 0; i < segs.Count - 1; i += 2)
                {
                    Point p1 = segs[i];
                    Point p2 = segs[i+1];
                    bool contFinished = false;

                    if (GrUtil.IsPointsEqual(
                        p1,
                        cont.DrawningPoints[cont.DrawningPoints.Count - 1],
                        2
                        ))
                    {
                        if(!GrUtil.IsPointsEqual(
                            p2,
                            cont.DrawningPoints[0],
                            2
                            ))
                        {
                            cont.DrawningPoints.Add(p2);
                        }
                        else
                        {
                            contFinished = true;
                        }

                        inserted = true;

                    }
                    else
                    if (GrUtil.IsPointsEqual(
                        p2,
                        cont.DrawningPoints[cont.DrawningPoints.Count - 1],
                        2
                        ))
                    {
                        if (!GrUtil.IsPointsEqual(
                            p1,
                            cont.DrawningPoints[0],
                            2
                            ))
                        {
                            cont.DrawningPoints.Add(p1);
                        }
                        else
                        {
                            contFinished = true;
                        }
                        inserted = true;
                    }

                    if (inserted)
                    {
                        segs.RemoveAt(i);
                        segs.RemoveAt(i); // Не ошибка.

                        if (contFinished)
                        {
                            contours.Add(cont);
                            cont = null;

                            if (segs.Count >= 2)
                            {
                                cont = new BasicContour();
                                cont.DrawningPoints.Add(segs[0]);
                                cont.DrawningPoints.Add(segs[1]);
                                segs.RemoveAt(0);
                                segs.RemoveAt(0); // Не ошибка.
                            }
                        }

                        break;
                    }

                } // for i
            } // while

            if (cont != null)
                contours.Add(cont);

            return contours;
        }