private void MAP_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (isMouseDown) { switch (ActiveTool) { case MapToolType.select: break; case MapToolType.zoomin: double Dx2 = e.X - mouseDownPosition.X; double Dy2 = e.Y - mouseDownPosition.Y; if (Math.Abs(Dx2) > SHAKE || Math.Abs(Dy2) > SHAKE) { Delete(Cosmetic); Cosmetic.Objects.Remove(border); border = new PolyLine(); border.Style.Fatness = 1; border.Style.LColour = Color.Aqua; GeoPoint first = ScreenToMap(mouseDownPosition); GeoPoint second = ScreenToMap(e.Location); border.AddNode(first); border.AddNode(new GeoPoint(second.x, first.y)); border.AddNode(second); border.AddNode(new GeoPoint(first.x, second.y)); border.AddNode(first); Cosmetic.AddObject(border); Cosmetic.Name = "Рамка"; AddLayer(Cosmetic); Refresh(); } break; case MapToolType.zoomout: break; case MapToolType.pan: double Dx = (e.X - mouseDownPosition.X) / mapScale; double Dy = (e.Y - mouseDownPosition.Y) / mapScale; mapCenter.x -= Dx; mapCenter.y += Dy; this.Refresh(); mouseDownPosition = e.Location; break; default: break; } } } }
public override void LoadFromFile(string filename) { System.IO.StreamReader FileText = new System.IO.StreamReader(filename); string TempLine; List <string> DataStrings = new List <string>(); bool DataBegin = false; Name = Path.GetFileNameWithoutExtension(filename); while ((TempLine = FileText.ReadLine()) != null) { TempLine = TempLine.ToLower(); if ((DataBegin == true) && (TempLine != "")) { DataStrings.Add(TempLine); } if (TempLine == "data") { DataBegin = true; } } List <string> SeparatorArray; char[] SeparatorSymbols = new char[] { ',', ' ', '(', ')' }; char[] SeparatorSymbolsCoord = new char[] { ' ', '(', ')' }; for (int i = 0; i < DataStrings.Count; i++) { SeparatorArray = (DataStrings[i].Split(SeparatorSymbolsCoord)).ToList(); Split(SeparatorArray); double x, y, z; if (SeparatorArray.Count > 0) { switch (SeparatorArray[0]) { case "point": ConvertPointInCorrectFormat(SeparatorArray); x = double.Parse(SeparatorArray[1].Replace('.', ',')); y = double.Parse(SeparatorArray[2].Replace('.', ',')); z = double.Parse(SeparatorArray[3].Replace('.', ',')); Point point = new Point(x, y, z); CountHeightAndConvert(point); AddObject(point); break; case "line": double x1, y1; x = double.Parse(SeparatorArray[1].Replace('.', ',')); y = double.Parse(SeparatorArray[2].Replace('.', ',')); x1 = double.Parse(SeparatorArray[3].Replace('.', ',')); y1 = double.Parse(SeparatorArray[4].Replace('.', ',')); Line line = new Line(new GeoPoint(x, y), new GeoPoint(x1, y1)); if ((i + 1) < DataStrings.Count) { SeparatorArray = (DataStrings[i + 1].Split(SeparatorSymbols)).ToList(); Split(SeparatorArray); if (SeparatorArray[0] == "pen") { i++; line.Style.Fatness = int.Parse(SeparatorArray[1]); line.Style.Type = int.Parse(SeparatorArray[2]); int Colour = int.Parse(SeparatorArray[3]); line.Style.LColour = System.Drawing.Color.FromArgb((Colour & 0xFF0000) / 65536, (Colour & 0xFF00) / 256, (Colour & 0xFF)); } } AddObject(line); break; case "pline": i++; SeparatorArray = (DataStrings[i].Split(SeparatorSymbols)).ToList(); Split(SeparatorArray); int count = int.Parse(SeparatorArray[0]); PolyLine ponyline = new PolyLine(); for (int k = 0; k < count; k++) { i++; SeparatorArray = (DataStrings[i].Split(SeparatorSymbolsCoord)).ToList(); Split(SeparatorArray); x = double.Parse(SeparatorArray[0].Replace('.', ',')); y = double.Parse(SeparatorArray[1].Replace('.', ',')); ponyline.AddNode(new GeoPoint(x, y)); if ((i + 1) < DataStrings.Count && (k == count - 1)) { SeparatorArray = (DataStrings[i + 1].Split(SeparatorSymbols)).ToList(); Split(SeparatorArray); if (SeparatorArray[0] == "pen") { i++; ponyline.Style.Fatness = int.Parse(SeparatorArray[1]); ponyline.Style.Type = int.Parse(SeparatorArray[2]); int Colour = int.Parse(SeparatorArray[3]); ponyline.Style.LColour = System.Drawing.Color.FromArgb((Colour & 0xFF0000) / 65536, (Colour & 0xFF00) / 256, (Colour & 0xFF)); } } AddObject(ponyline); } break; case "region": i++; SeparatorArray = (DataStrings[i].Split(SeparatorSymbols)).ToList(); Split(SeparatorArray); count = int.Parse(SeparatorArray[0]); Polygone ponygnya = new Polygone(); for (int k = 0; k < count; k++) { i++; SeparatorArray = (DataStrings[i].Split(SeparatorSymbolsCoord)).ToList(); Split(SeparatorArray); x = double.Parse(SeparatorArray[0].Replace('.', ',')); y = double.Parse(SeparatorArray[1].Replace('.', ',')); ponygnya.AddNode(new GeoPoint(x, y)); if ((i + 1) < DataStrings.Count && (k == count - 1)) { SeparatorArray = (DataStrings[i + 1].Split(SeparatorSymbols)).ToList(); Split(SeparatorArray); if (SeparatorArray[0] == "pen") { i++; ponygnya.Style.Fatness = int.Parse(SeparatorArray[1]); ponygnya.Style.Type = int.Parse(SeparatorArray[2]); int Colour = int.Parse(SeparatorArray[3]); ponygnya.Style.LColour = System.Drawing.Color.FromArgb((Colour & 0xFF0000) / 65536, (Colour & 0xFF00) / 256, (Colour & 0xFF)); } } if ((i + 1) < DataStrings.Count && (k == count - 1)) { SeparatorArray = (DataStrings[i + 1].Split(SeparatorSymbols)).ToList(); Split(SeparatorArray); if (SeparatorArray.Count > 0) { if (SeparatorArray[0] == "brush") { i++; int Colour = int.Parse(SeparatorArray[2]); ponygnya.Brush.Color = System.Drawing.Color.FromArgb((Colour & 0xFF0000) / 65536, (Colour & 0xFF00) / 256, (Colour & 0xFF)); } } } } AddObject(ponygnya); break; default: break; } } } }