Example #1
0
        /// <summary>
        /// Сгенерировать и показать треугольную сетку
        /// </summary>
        /// <param name="box"></param>
        private void GenerateMesh(EntityBox box)
        {
            Delaunay delaunay = new Delaunay();

            List <Point2D> points = new List <Point2D>();

            //
            // Получить ключевые точки
            //

            foreach (Entity entity in box.GetEntities())
            {
                if (entity.IsVias())
                {
                    Point   p     = box.LambdaToScreen(entity.LambdaX, entity.LambdaY);
                    Point2D point = new Point2D(p.X, p.Y);
                    points.Add(point);
                }
            }

            if (points.Count < 3)
            {
                MessageBox.Show("3 or more keypoints required!", "Error",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            //
            // Добавить ключевые точки по углам
            //

            AddCornerKeypoints(ref points, 25, 25);

            //
            // Триангулируем
            //

            List <Triangle> mesh = delaunay.GenMesh(points);

            //
            // Отобразить треугольную сетку
            //

            Random rnd = new Random();

            foreach (Triangle tri in mesh)
            {
                Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));

                AddTriangle(box, tri, randomColor);
            }
        }