Beispiel #1
0
 public PathFinderNode GetNodeFromPosition(Triangulator.Geometry.Point pos)
 {
     foreach (var node in Nodes)
     {
         if ((int)(node.position * Bloodbender.meterToPixel).X == (int)pos.X &&
             (int)(node.position * Bloodbender.meterToPixel).Y == (int)pos.Y)
         {
             return(node);
         }
     }
     return(null);
 }
Beispiel #2
0
        /// <summary>
        /// Executes Delaunay triangulation on the Nodes and populates the Links accordingly.
        /// Note that Links currently existing are not removed by the function.
        /// </summary>
        public void Triangulate()
        {
            // Triangulate and extract links
            List <Triangulator.Geometry.Point> nodesToTriangulate = new List <Triangulator.Geometry.Point>();

            foreach (var node in Nodes)
            {
                nodesToTriangulate.Add(new Triangulator.Geometry.Point(node.NodeX, node.NodeY));
            }

            List <Triangulator.Geometry.Triangle> triangles = Triangulator.Delauney.Triangulate(nodesToTriangulate);

            foreach (Triangulator.Geometry.Triangle triangle in triangles)
            {
                Triangulator.Geometry.Point pt1 = nodesToTriangulate[triangle.p1];
                Triangulator.Geometry.Point pt2 = nodesToTriangulate[triangle.p2];
                Triangulator.Geometry.Point pt3 = nodesToTriangulate[triangle.p3];

                T n1 = Nodes.Find(n => n.NodeX == pt1.X && n.NodeY == pt1.Y);
                T n2 = Nodes.Find(n => n.NodeX == pt2.X && n.NodeY == pt2.Y);
                T n3 = Nodes.Find(n => n.NodeX == pt3.X && n.NodeY == pt3.Y);

                Link <T> l1 = new Link <T>()
                {
                    From = n1, To = n2, IsDirected = false, Weight = 1
                };
                Link <T> l2 = new Link <T>()
                {
                    From = n2, To = n3, IsDirected = false, Weight = 1
                };
                Link <T> l3 = new Link <T>()
                {
                    From = n3, To = n1, IsDirected = false, Weight = 1
                };

                if (!Links.Contains(l1))
                {
                    Links.Add(l1);
                }

                if (!Links.Contains(l2))
                {
                    Links.Add(l2);
                }

                if (!Links.Contains(l3))
                {
                    Links.Add(l3);
                }
            }
        }
Beispiel #3
0
        private List<Triangulator.Geometry.Point> Points3dtoPoints2d(Point3D[] points3d)
        {

            int index = 0;
            //Point[] points2d = new Point[points3d.Length];
            List<Triangulator.Geometry.Point> points2d = new List<Triangulator.Geometry.Point>();
            int count = 0;
            for (; index < points3d.Length; index++)
            {

                Triangulator.Geometry.Point gmpoint = new Triangulator.Geometry.Point(points3d[index].X, points3d[index].Y);
                points2d.Add(gmpoint);
                string s;
                s = gmpoint.X.ToString();
                s += gmpoint.Y.ToString();
                delaunaypoints[s] = points3d[index];
                count++;

            }
            return points2d;
        }
Beispiel #4
0
        private void button_Click(object sender, RoutedEventArgs e)
        {
            int liczba_iglic;
            int punkty_x, punkty_y;

            punkty_x     = Convert.ToInt16(tb_dlugosc.Text);
            punkty_y     = Convert.ToInt16(tb_szerokosc.Text);
            liczba_iglic = listBox.Items.Count;
            kontury      = new double[listBox1.Items.Count];
            Iglica[]    iglice = new Iglica[liczba_iglic];
            DxfDocument dxf    = new DxfDocument();

            Triangulator.Geometry.Point pNew;
            for (int i = 0; i < listBox.Items.Count; i++)
            {
                iglice[i] = new Iglica();

                string linia  = listBox.Items.GetItemAt(i).ToString();
                int    index0 = linia.IndexOf("x=");
                int    index1 = linia.IndexOf(";");
                iglice[i].X        = Convert.ToDouble(linia.Substring(index0 + 2, index1 - index0 - 2));
                linia              = linia.Substring(index1 + 1, linia.Length - index1 - 1);
                index0             = linia.IndexOf("y=");
                index1             = linia.IndexOf(";");
                iglice[i].Y        = Convert.ToDouble(linia.Substring(index0 + 2, index1 - index0 - 2));
                linia              = linia.Substring(index1 + 1, linia.Length - index1 - 1);
                index0             = linia.IndexOf("h=");
                index1             = linia.IndexOf(";");
                iglice[i].wysokosc = Convert.ToDouble(linia.Substring(index0 + 2, index1 - index0 - 2));

                pNew = new Triangulator.Geometry.Point(iglice[i].X, iglice[i].Y);
                if (!Vertices.Exists(delegate(Triangulator.Geometry.Point p) { return(pNew.Equals2D(p)); }))
                {
                    Vertices.Add(pNew);
                }
            }

            /*
             * for (int i=0; i<punkty_x;i++)
             * {
             *  pNew = new Triangulator.Geometry.Point(0, i);
             *  Vertices.Add(pNew);
             *  pNew = new Triangulator.Geometry.Point(Convert.ToInt16(tb_szerokosc.Text), i);
             *  Vertices.Add(pNew);
             *
             * }
             * for (int i = 0; i < punkty_y; i++)
             * {
             *  pNew = new Triangulator.Geometry.Point(i, 0);
             *  Vertices.Add(pNew);
             *  pNew = new Triangulator.Geometry.Point(i,Convert.ToInt16(tb_dlugosc.Text));
             *  Vertices.Add(pNew);
             *
             * }
             */
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                kontury[i] = new double();
                string linia  = listBox1.Items.GetItemAt(i).ToString();
                int    index0 = linia.IndexOf("=");
                int    index1 = linia.IndexOf("m");
                kontury[i] = Convert.ToDouble(linia.Substring(index0 + 1, index1 - index0 - 1));
            }

            string pathF = @"aCS_2.dxf";

            //wylicz_punkty(dxf, iglice, 60, 0.1, 0.005, kontury);
            rysuj_troj(dxf, iglice);

            try
            {
                dxf.Save(pathF);
            }
            catch (System.IO.IOException)
            {
                MessageBox.Show("Błąd zapisu pliku");
            }
        }