public static Polygon SortNumbers12(List <Node> nodesintersects, Node begin, Polygon polygon1) { Node nodeoporniy = new Node(1, 1); Node nodet = new Node(1, 1); if (nodesintersects.Count != 0) { for (int i = 0; i < nodesintersects.Count; i++) { for (int j = nodesintersects.Count - 1; j > i; j--) { if (Math.Abs(begin.X - nodesintersects[j].X) < Math.Abs(begin.X - nodesintersects[j - 1].X)) { nodeoporniy = nodesintersects[j - 1]; nodesintersects[j - 1] = nodesintersects[j]; nodesintersects[j] = nodeoporniy; } } } for (int t = 0; t < nodesintersects.Count; t++) { nodet = nodesintersects[t]; nodet.IsInPolygon = true; polygon1.AddNode(nodet); } return(polygon1); } return(polygon1); }
public Map() { this.MouseWheel += Map_MouseWheel; testgrid = new Grid(5, 100, 51, 5, 5); (testgrid as Grid).GenerateSurface(); Polygon polygon = new Polygon(); polygon.AddNode(5, 5); polygon.AddNode(500, 5); polygon.AddNode(5, 255); VectorLayer vectorlayer = new VectorLayer(); vectorlayer.AddObject(polygon); AddLayer(vectorlayer); AddLayer(testgrid); InitializeComponent(); // Line line = new Line(0,0,0,0); // this.onSelects += line.ClearSelections; }
private void Form1_Load(object sender, EventArgs e) { Core.Point point = new Core.Point(0, 0); Core.Line line = new Core.Line(1, 2, 500, 300); // line.Selected = true; Core.PolyLine polyLine = new Core.PolyLine(); polyLine.AddNode(0, 0); polyLine.AddNode(-500, 300); polyLine.AddNode(-300, -500); polyLine.AddNode(500, 0); Random random = new Random(); // polyLine.RemoveNode(1); Core.Polygon polygon = new Core.Polygon(); polygon.AddNode(700, 0); polygon.AddNode(0, 400); polygon.AddNode(-100, 0); polygon.AddNode(0, -300); SolidBrush ownBrush = new SolidBrush(Color.Aquamarine); Pen ownPen = new Pen(Color.Green); polygon.OwnBrush = ownBrush; polygon.OwnPen = ownPen; /*Core.Node node = polyLine.GetNode(0); * polyLine.Clear();*/ /* for (int i=0; i<100; i++) * { * polyLine.AddNode(i, -i); * } * //polyLine[0] = polyLine[2]; */ Core.Layer layer = new Layer(); layer.AddObject(point); layer.AddObject(line); layer.AddObject(polyLine); layer.AddObject(polygon); int pointCount = 0, lineCount = 0, polyLineCount = 0, polygonCount = 0; foreach (MapObject obj in layer._objects) { switch (obj.Type) { case MapObjectType.Point: pointCount++; break; case MapObjectType.Line: lineCount++; break; case MapObjectType.PolyLine: polyLineCount++; break; case MapObjectType.Polygon: polygonCount++; break; } } MyMap.AddLayer(layer); MyMap.MapScale *= 2; }
public static Polygon SumPolygons(List <Polygon> polygons) { int nodecounts = 0; List <Node> NodeIntersects = new List <Node>(); Polygon newPolygon = new Polygon(); List <Node> formingnodes = new List <Node>(); //Нахождение узлов не являющихся подмножеством другого полигона for (int i = 0; i < polygons[1].NodeCount; i++) { Node node = new Node(0, 0); node = polygons[1]._nodes[i]; if (Analysis.IsNodeInPolygon(polygons[0], node) == true) { newPolygon.AddNode(node); formingnodes.Add(node); } } for (int i = 0; i < polygons[0].NodeCount; i++) { Node node = new Node(0, 0); node = polygons[0]._nodes[i]; if (Analysis.IsNodeInPolygon(polygons[1], node) == true) { newPolygon.AddNode(node); formingnodes.Add(node); } } //Найти пересечения узлы полигонов /* polygons[0].AddNode(polygons[0].GetNode(0)); * polygons[1].AddNode(polygons[1].GetNode(0)); * for (int i =0;i<polygons[0].NodeCount-1;i++) * { * * Node node = new Node(0, 0); * Node begin = polygons[0]._nodes[i]; * Node end = polygons[0]._nodes[i + 1]; * for (int j=0;j<polygons[1].NodeCount-1;j++) * { * Node p1 = polygons[1].GetNode(j); * Node p2 = polygons[1].GetNode(j + 1); * node = Analysis.PointofIntercestcs(begin, end, p1, p2); * if (node.X != 0 && node.Y != 0) * { * nodecounts++; * node = Analysis.PointofIntercestcs(begin, end, p1, p2); * } * * * * } * * } */ polygons[0].AddNode(polygons[0].GetNode(0)); polygons[1].AddNode(polygons[1].GetNode(0)); List <Node> nodesintersects = new List <Node>(); //Формируем полигоны с новыми вершинами, которые включают также пересечения Polygon newpolygon1 = new Polygon(); for (int i = 0; i < polygons[0].NodeCount - 1; i++) { // Node node = new Node(0, 0); Node node = null; Node begin = polygons[0]._nodes[i]; Node end = polygons[0]._nodes[i + 1]; newpolygon1.AddNode(begin); for (int j = 0; j < polygons[1].NodeCount - 1; j++) { Node p1 = polygons[1].GetNode(j); Node p2 = polygons[1].GetNode(j + 1); node = Analysis.PointofIntercestcs(begin, end, p1, p2); if (node != null) { nodecounts++; nodesintersects.Add(node); NodeIntersects.Add(node); node = Analysis.PointofIntercestcs(begin, end, p1, p2); } } newpolygon1 = SortNumbers12(nodesintersects, begin, newpolygon1); nodesintersects.Clear(); } Polygon newpolygon2 = new Polygon(); nodesintersects.Clear(); for (int i = 0; i < polygons[1].NodeCount - 1; i++) { Node node = null; // Node node = new Node(0, 0); Node begin = polygons[1]._nodes[i]; Node end = polygons[1]._nodes[i + 1]; newpolygon2.AddNode(begin); for (int j = 0; j < polygons[0].NodeCount - 1; j++) { Node p1 = polygons[0].GetNode(j); Node p2 = polygons[0].GetNode(j + 1); node = Analysis.PointofIntercestcs(begin, end, p1, p2); if (node != null) { nodecounts++; nodesintersects.Add(node); NodeIntersects.Add(node); node = Analysis.PointofIntercestcs(begin, end, p1, p2); } } newpolygon2 = SortNumbers12(nodesintersects, begin, newpolygon2); nodesintersects.Clear(); } if (NodeIntersects.Count > 0) { bool x = false; //Узнаем, есть ли такие вершины, что является часть другого полигона Polygon newpolygon1s = new Polygon(); Polygon newpolygon2s = new Polygon(); Polygon newpolygon3s = new Polygon(); for (int i = 0; i < newpolygon1.NodeCount; i++) { for (int j = 0; j < formingnodes.Count; j++) { if (newpolygon1.GetNode(i) == formingnodes[j]) { x = true; // newpolygon1s.AddNode(newpolygon1.GetNode(i)); } } if (x == false) { newpolygon1s.AddNode(newpolygon1.GetNode(i)); } x = false; } bool t = false; for (int i = 0; i < newpolygon2.NodeCount; i++) { for (int j = 0; j < formingnodes.Count; j++) { if (newpolygon2.GetNode(i) == formingnodes[j]) { t = true; // newpolygon2s.AddNode(newpolygon2.GetNode(i)); } } if (t == false) { newpolygon2s.AddNode(newpolygon2.GetNode(i)); } t = false; } //Идем по вершинам составляя новый полигон for (int i = 0; i < newpolygon1s.NodeCount; i++) { int k = 0; // int j = 0; newpolygon3s.AddNode(newpolygon1s.GetNode(i)); if (newpolygon1s.GetNode(i).IsInPolygon == true) { for (int j = 0; j < newpolygon2s.NodeCount; j++) { if ((newpolygon2s.GetNode(j).X == newpolygon1s.GetNode(i).X) && (newpolygon2s.GetNode(j).Y == newpolygon1s.GetNode(i).Y)) { k = j + 1; } } while (newpolygon2s.GetNode(k).IsInPolygon != true) { int tm = 7; newpolygon3s.AddNode(newpolygon2s.GetNode(k)); k++; if (k >= newpolygon2s.NodeCount) { k = 0; } } } } int s = 4; return(newpolygon3s); } else { return(null); } }