//Link: https://vps2.hhk.de/geograf/Hilfe/GEOgraf/Anhang/Formatdokumentation/GRAFBAT_Format/GRAFBAT_Format.htm#DGM #endregion #region Constructor public OTriangle(int ElNum, OHorizon Hor, OPoint PNr1, OPoint PNr2, OPoint PNr3, int?ElNumN1, int?ElNumN2, int?ElNumN3, bool B1, bool B2, bool B3) { this.ElNum = ElNum; this.Hor = Hor; this.PNr1 = PNr1; this.PNr2 = PNr2; this.PNr3 = PNr3; this.ElNumN1 = ElNumN1; this.ElNumN2 = ElNumN2; this.ElNumN3 = ElNumN3; this.B1 = B1; this.B2 = B2; this.B3 = B3; }
//EMPTY #endregion //auslesen aller Punkte public static Result ReadOutData(string filePath, out IReadOnlyDictionary <int, int> pointIndex2NumberMap, out IReadOnlyDictionary <int, int> triangleIndex2NumberMap) { //Logger Logger logger = LogManager.GetCurrentClassLogger(); //Result definieren damit Tin übergeben werden kann Result result = new Result(); //Anlegen eines neuen Builder für TIN var tinB = Tin.CreateBuilder(true); //Übergabeklassen pointIndex2NumberMap = null; triangleIndex2NumberMap = null; if (File.Exists(filePath)) { foreach (var line in File.ReadAllLines(filePath)) { var values = line.Split(new[] { ',' }); if (line.StartsWith("PK") && values.Length > 4 && int.TryParse(values[0].Substring(2, values[0].IndexOf(':') - 2), out int pnr) && int.TryParse(values[1].Substring(0, values[1].IndexOf('.')), out int pointtype) && double.TryParse(values[2], NumberStyles.Float, CultureInfo.InvariantCulture, out double x) && double.TryParse(values[3], NumberStyles.Float, CultureInfo.InvariantCulture, out double y) && double.TryParse(values[4], NumberStyles.Float, CultureInfo.InvariantCulture, out double z) && int.TryParse(values[6], NumberStyles.Integer, CultureInfo.InvariantCulture, out int statPos) && int.TryParse(values[7], NumberStyles.Integer, CultureInfo.InvariantCulture, out int statHeight)) { //Punkt dem TIN hinzufügen, hier wird nur PNR + Koordinaten benötigt tinB.AddPoint(pnr, x, y, z); //Punkt erstellen OPoint point = new OPoint(pnr, pointtype, x, y, z, statPos, statHeight); //Punkt (Value) über Key (Punktnummer) in Punktliste einfügen pointList[pnr] = point; } //Linien auslesen /* --- FEHLER bei INDEXIERUNG ---!!! * if (line.StartsWith("LI") && values.Length > 11 * && int.TryParse(values[0].Substring(2, values[0].IndexOf(':')-2), out int ln) * && int.TryParse(values[0].Substring(12), out int la) * && int.TryParse(values[1].Substring(3), out int lb) * && int.TryParse(values[2].Substring(0, values[2].IndexOf('.')), out int linetype)) * { * //Linie aus Punkten bilden * OLine oline = new OLine(pointList[la], pointList[lb], linetype); * //Linie in Linienliste einfügen * lineList[ln] = oline; * } */ //Horizont auslesen if (line.StartsWith("HNR") && values.Length > 13 && int.TryParse(values[0].Substring(values[0].IndexOf(':') + 1, 3), out int hornr)) { //Abfragen, ob 2D (false) oder 3D (true) bool is3D = values[4].Equals("1") ? true : false; //Horizont bilden OHorizon horizon = new OHorizon(hornr, values[3].ToString(), is3D); //BEMERKUNG: Encoding von ANSI nicht berücksichtigt! //Horizont der Horizontliste hinzufügen horList[hornr] = horizon; } //Dreiecke auslesen if (line.StartsWith("DG") && values.Length > 9 && int.TryParse(values[0].Substring(2, values[0].IndexOf(':') - 2), out int tn) && int.TryParse(values[0].Substring(values[0].IndexOf(':') + 1, 3), out int hnr) && int.TryParse(values[1].Substring(3), out int va) && int.TryParse(values[2].Substring(3), out int vb) && int.TryParse(values[3].Substring(3), out int vc)) { int? na = !string.IsNullOrEmpty(values[4]) && int.TryParse(values[4], out int n) ? n : (int?)null; int? nb = !string.IsNullOrEmpty(values[5]) && int.TryParse(values[5], out n) ? n : (int?)null; int? nc = !string.IsNullOrEmpty(values[6]) && int.TryParse(values[6], out n) ? n : (int?)null; bool ea = !string.IsNullOrEmpty(values[7]); bool eb = !string.IsNullOrEmpty(values[8]); bool ec = !string.IsNullOrEmpty(values[9]); //Dreieck dem TIN hinzufügen tinB.AddTriangle(tn, va, vb, vc, na, nb, nc, ea, eb, ec, true); OTriangle triangle = new OTriangle(tn, horList[hnr], pointList[va], pointList[vb], pointList[vc], na, nb, nc, ea, eb, ec); triList[tn] = triangle; } } } result.Tin = tinB.ToTin(out pointIndex2NumberMap, out triangleIndex2NumberMap); logger.Info("Reading GEOgraf OUT successful"); logger.Info(result.Tin.Points.Count() + " points; " + result.Tin.NumTriangles + " triangels processed"); return(result); }