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(); }