示例#1
0
        //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;
        }
示例#2
0
        //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);
        }