Example #1
0
        void AnalyzeFile(BinaryReaderWriter brrgn, BinaryReaderWriter brtre, BinaryReaderWriter brlbl, bool show = false)
        {
            Clear();

            StdFile_TRE tre = new StdFile_TRE();

            if (brtre != null)
            {
                tre.Read(brtre);
            }

            StdFile_RGN rgn = new StdFile_RGN(tre);

            if (brrgn != null)
            {
                rgn.Read(brrgn);
            }

            StdFile_LBL lbl = new StdFile_LBL();

            if (brlbl != null)
            {
                lbl.Read(brlbl);
            }

            int typ;

            for (int i = 0; i < rgn.SubdivList.Count && i < tre.SubdivInfoList.Count; i++)
            {
                StdFile_RGN.SubdivData sd = rgn.SubdivList[i];

                foreach (var item in sd.AreaList)
                {
                    typ = item.Type << 8 | item.Subtype;
                    string txt = null;
                    if (item.LabelOffsetInLBL != 0 && lbl.TextList.Count > 0)
                    {
                        if (!item.LabelInNET)      // das dürfte immer so sein
                        {
                            txt = lbl.GetText(item.LabelOffsetInLBL, false);
                        }
                    }
                    RegisterArea(typ, txt);
                }

                foreach (var item in sd.ExtAreaList)
                {
                    typ = ((0x100 | item.Type) << 8) | item.Subtype;
                    string txt = null;
                    if (item.HasLabel && lbl.TextList.Count > 0)
                    {
                        txt = lbl.GetText(item.LabelOffsetInLBL, false);
                    }
                    RegisterArea(typ, txt);
                }

                foreach (var item in sd.LineList)
                {
                    typ = item.Type << 8 | item.Subtype;
                    string txt = null;
                    if (item.LabelOffsetInLBL != 0 && lbl.TextList.Count > 0)
                    {
                        if (!item.LabelInNET)
                        {
                            txt = lbl.GetText(item.LabelOffsetInLBL, false);
                        }
                    }
                    //   else
                    //      p.NetData = new DetailMap.RoadDataExt(net.Roaddata[net.Idx4Offset[item.LabelOffset]], lbl);
                    RegisterLine(typ, txt);
                }

                foreach (var item in sd.ExtLineList)
                {
                    typ = ((0x100 | item.Type) << 8) | item.Subtype;
                    string txt = null;
                    if (item.HasLabel && lbl.TextList.Count > 0)
                    {
                        txt = lbl.GetText(item.LabelOffsetInLBL, false);
                    }
                    RegisterLine(typ, txt);
                }

                foreach (var item in sd.PointList2)    // vor den "normalen" Punkten einlesen, damit der ev. Index-Verweise stimmen (z.B. für Exits)
                {
                    typ = item.Type << 8 | item.Subtype;
                    string txt = null;
                    if (item.LabelOffsetInLBL != 0 && lbl.TextList.Count > 0)
                    {
                        if (!item.IsPoiOffset)
                        {
                            txt = lbl.GetText(item.LabelOffsetInLBL, false);
                        }
                    }
                    //   else {
                    //      int idx = lbl.POIPropertiesListOffsets[item.LabelOffset];
                    //      DetailMap.PoiDataExt pd = new DetailMap.PoiDataExt(lbl.POIPropertiesList[idx], lbl);
                    //      p.LblData = pd;
                    //      p.Label = p.LblData.Text;
                    //   }
                    RegisterPoint(typ, txt);
                }

                foreach (var item in sd.PointList1)
                {
                    typ = item.Type << 8 | item.Subtype;
                    string txt = null;
                    if (item.LabelOffsetInLBL != 0 && lbl.TextList.Count > 0)
                    {
                        if (!item.IsPoiOffset)
                        {
                            txt = lbl.GetText(item.LabelOffsetInLBL, false);
                        }
                    }
                    //   else {
                    //      int idx = lbl.POIPropertiesListOffsets[item.LabelOffset];
                    //      DetailMap.PoiDataExt pd = new DetailMap.PoiDataExt(lbl.POIPropertiesList[idx], lbl);
                    //      p.LblData = pd;
                    //      p.Label = p.LblData.Text;
                    //   }
                    RegisterPoint(typ, txt);
                }

                foreach (var item in sd.ExtPointList)
                {
                    typ = ((0x100 | item.Type) << 8) | item.Subtype;
                    string txt = null;
                    if (item.HasLabel && lbl.TextList.Count > 0)
                    {
                        txt = lbl.GetText(item.LabelOffsetInLBL, false);
                    }
                    RegisterPoint(typ, txt);
                }
            }

            if (show)
            {
                Console.WriteLine("Punkttypen");
                foreach (var item in PointType)
                {
                    Console.WriteLine(string.Format(" {0,5:X} {1}x", item.Key, item.Value));
                }
                Console.WriteLine("Linientypen");
                foreach (var item in LineType)
                {
                    Console.WriteLine(string.Format(" {0,5:X} {1}x", item.Key, item.Value));
                }
                Console.WriteLine("Flächentypen");
                foreach (var item in AreaType)
                {
                    Console.WriteLine(string.Format(" {0,5:X} {1}x", item.Key, item.Value));
                }
            }

            BuildSum();
        }