/// <summary> /// Wczytaj szkic z pliku xml /// </summary> /// <param name="xmlFile"></param> /// <returns></returns> public static Szkic FromXML(string xmlFile) { Szkic szkic = null; StreamReader reader = null; try { XmlSerializer xmlSer = new XmlSerializer(typeof(Szkic)); reader = new StreamReader(xmlFile); szkic = (Szkic)xmlSer.Deserialize(reader); } catch (Exception ex) { throw ex; } finally { if (reader != null) { reader.Close(); } } szkic._zmodyfikowany = false; return(szkic); }
/// <summary> /// Aktualizuj zmienne pikiet, na podstawie podanych indeksów /// </summary> /// <param name="szkic"></param> /// <returns></returns> protected bool AktualizujPikiety(Szkic szkic) { if (_startIndex == _endIndex) { return(false); } _startPikieta = szkic[_startIndex]; _endPikieta = szkic[_endIndex]; if (_startPikieta == null || _endPikieta == null) { return(false); } if (this is Skarpa) { if (_startPikieta.Rzedna < _endPikieta.Rzedna) { _startPikieta = szkic[_endIndex]; _endPikieta = szkic[_startIndex]; } } return(true); }
/// <summary> /// Zapisz szkic do pliku xml /// </summary> /// <param name="xmlFile"></param> /// <param name="model"></param> public static void ToXML(string xmlFile, Szkic model) { XmlSerializer xmlSer = new XmlSerializer(typeof(Szkic)); StreamWriter writer = new StreamWriter(xmlFile); xmlSer.Serialize(writer, model); writer.Close(); }
/// <summary> /// Rysuj skarpę na szkicu /// </summary> /// <param name="g"></param> /// <param name="szkic"></param> public override void Rysuj(Graphics g, Szkic szkic) { if (!AktualizujPikiety(szkic)) { return; } int x1 = szkic.Obszar.Left, y1 = _startPikieta.Y; int x2 = szkic.Obszar.Right, y2 = _endPikieta.Y; int w = x2 - x1; //szerokość int h = y2 - y1; //wysokość int y = (y1 + y2) / 2; //środek wysokości if (h < 0) { h = -h; } if (h == 0) { h = 2; } //Rysowanie linii pionowych | for (int x = x1; x < x2; x += h) //przesuwamy się w prawo co jedną wysokość { g.DrawLine(StylSzkicu.TekstPen, x, y1, x, y2); } //Rysowanie linii pionowych o połowe niższych | for (int x = x1 + h / 2; x < x2; x += h) //przesuwamy się w prawo co jedną wysokość (od połowy wysokości) { g.DrawLine(StylSzkicu.TekstPen, x, y1, x, y); } //Rysowanie linii poziomych for (int x = x1; x < x2; x += h / 2) //przesuwamy się w prawo co jedną wysokość { int dx = x + h / 3; if (dx > x2) { dx = x2; } g.DrawLine(StylSzkicu.TekstPen, x, y1, dx, y1); //Dla brzegu pomijamy rysowanie drugiej linii if (!_naBrzegu) { g.DrawLine(StylSzkicu.TekstPen, x, y2, dx, y2); } } }
/// <summary> /// Rysuj koryto na szkicu /// </summary> /// <param name="g"></param> /// <param name="szkic"></param> public override void Rysuj(Graphics g, Szkic szkic) { if (!AktualizujPikiety(szkic)) { return; } int x1 = szkic.Obszar.Left, y1 = _startPikieta.Y; int x2 = szkic.Obszar.Right, y2 = _endPikieta.Y; int korytoX = x1; int korytoY = (y1 + y2) / 2; //środek koryta _format.Alignment = StringAlignment.Near; _format.LineAlignment = StringAlignment.Center; //Brzeg lewy g.DrawLine(StylSzkicu.SzkicPen, szkic.Obszar.Left, y1, szkic.Obszar.Right, y1); g.DrawString(string.Format("{0:F2} [m] n.p.m.", _startPikieta.Rzedna), StylSzkicu.TekstFont, StylSzkicu.TekstBrush, korytoX, y1); g.DrawString("zww", StylSzkicu.TekstFont, StylSzkicu.TekstBrush, korytoX - 35, y1, _format); g.DrawString("Brzeg lewy", StylSzkicu.TekstFont, StylSzkicu.TekstBrush, korytoX - 120, (szkic.Obszar.Top + y1) / 2, _format); //Kierunek (na środku) g.DrawLine(StylSzkicu.SzkicPen, x1, korytoY, x1 + 100, korytoY); StylSzkicu.DrawDart(g, x1 + 100, korytoY, StylSzkicu.SzkicColor, 10, 0, true); //Brzeg prawy g.DrawLine(StylSzkicu.SzkicPen, szkic.Obszar.Left, y2, szkic.Obszar.Right, y2); _format.Alignment = StringAlignment.Near; _format.LineAlignment = StringAlignment.Far; g.DrawString(string.Format("{0:F2} [m] n.p.m.", _endPikieta.Rzedna), StylSzkicu.TekstFont, StylSzkicu.TekstBrush, korytoX, y2, _format); g.DrawString("zww", StylSzkicu.TekstFont, StylSzkicu.TekstBrush, korytoX - 35, y2, _format); g.DrawString("Brzeg prawy", StylSzkicu.TekstFont, StylSzkicu.TekstBrush, korytoX - 120, (szkic.Obszar.Bottom + y2) / 2, _format); _format.Alignment = StringAlignment.Near; _format.LineAlignment = StringAlignment.Center; }
/// <summary> /// Rysowanie drogi na szkicu /// </summary> /// <param name="g"></param> /// <param name="szkic"></param> public override void Rysuj(Graphics g, Szkic szkic) { if (!AktualizujPikiety(szkic)) { return; } int x1 = szkic.Obszar.Left, y1 = _startPikieta.Y; int x2 = szkic.Obszar.Right, y2 = _endPikieta.Y; int w = x2 - x1; //szerokość int h = y2 - y1; //wysokość int y = (y1 + y2) / 2; //środek wysokości if (h < 0) { h = -h; } if (h == 0) { h = 2; } g.DrawString(KodTerenu.OpisDrogi(_endPikieta.KodFormyTerenu), StylSzkicu.TekstFont, StylSzkicu.TekstBrush, x1, y, _format); //Rysowanie przerywanych linii drogi for (int x = x1; x < x2; x += h / 2) //przesuwamy się w prawo co jedną wysokość { int dx = x + h / 4; if (dx > x2) { dx = x2; } g.DrawLine(StylSzkicu.TekstPen, x, y1, dx, y1); g.DrawLine(StylSzkicu.TekstPen, x, y2, dx, y2); } }
/// <summary> /// Zapisz szkic do pliku xml /// </summary> /// <param name="xmlFile"></param> public void ToXML(string xmlFile) { Szkic.ToXML(xmlFile, this); _zmodyfikowany = false; }
/// <summary> /// Rysowanie obiektu między pikietami /// </summary> /// <param name="g"></param> /// <param name="szkic"></param> public virtual void Rysuj(Graphics g, Szkic szkic) { }