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); }
/// <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); } } }
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; }
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"); } }