internal LayersTable(DxfTableTemplate template) : base(template) { }
internal LineTypesTable(DxfTableTemplate template) : base(template) { }
internal BlockRecordsTable(DxfTableTemplate template) : base(template) { }
internal UCSTable(DxfTableTemplate template) : base(template) { }
internal AppIdsTable(DxfTableTemplate template) : base(template) { }
internal Table(DxfTableTemplate template) { Handle = template.Handle; OwnerHandle = template.OwnerHandle; }
internal ViewPortsTable(DxfTableTemplate template) : base(template) { }
internal DimensionStylesTable(DxfTableTemplate template) : base(template) { }
/// <summary> /// Read the tables in the document. /// </summary> /// <param name="document">Document where the tables reside.</param> private void readTable(CadDocument document) { //https://help.autodesk.com/view/OARX/2021/ENU/?guid=GUID-5926A569-3E40-4ED2-AE06-6ACCE0EFC813 Debug.Assert(m_reader.LastValueAsString == DxfFileToken.TableEntry); //Read the table name m_reader.ReadNext(); DxfTableTemplate template = new DxfTableTemplate(); //Loop until the common data while (m_reader.LastDxfCode != DxfCode.Start) { switch (m_reader.LastCode) { //Table name case 2: template.Name = m_reader.LastValueAsString; break; //Handle case 5: template.Handle = m_reader.LastValueAsHandle; break; //Start of application - defined group case 102: //TODO: read dictionary groups for entities do { m_reader.ReadNext(); }while (m_reader.LastDxfCode != DxfCode.ControlString); break; //Soft - pointer ID / handle to owner BLOCK_RECORD object case 330: template.OwnerHandle = m_reader.LastValueAsHandle; break; //Subclass marker(AcDbSymbolTable) case 100: Debug.Assert(m_reader.LastValueAsString == DxfSubclassMarker.Table || m_reader.LastValueAsString == DxfSubclassMarker.DimensionStyleTable); break; case 71: //Number of entries for dimension style table case 340: //Dimension table has the handles of the styles at the begining break; //Maximum number of entries in table case 70: template.MaxEntries = m_reader.LastValueAsInt; break; default: Debug.Fail($"Unhandeled dxf code {m_reader.LastCode} at line {m_reader.Line}."); break; } m_reader.ReadNext(); } List <TableEntry> entries = new List <TableEntry>(); //Check if the table is empty if (m_reader.LastValueAsString != DxfFileToken.EndTable) { //Get the table entries Debug.Assert(m_reader.LastValueAsString == template.Name); entries = readEntries(); } switch (template.Name) { case DxfFileToken.TableAppId: document.AppIds = new AppIdsTable(template); //Add the entries foreach (TableEntry item in entries) { document.AppIds.Add(item as AppId); } break; case DxfFileToken.TableBlockRecord: document.BlockRecords = new BlockRecordsTable(template); //Add the entries foreach (TableEntry item in entries) { document.BlockRecords.Add(item as BlockRecord); } break; case DxfFileToken.TableDimstyle: document.DimensionStyles = new DimensionStylesTable(template); //Add the entries foreach (TableEntry item in entries) { document.DimensionStyles.Add(item as DimensionStyle); } break; case DxfFileToken.TableLayer: document.Layers = new LayersTable(template); //Add the entries foreach (TableEntry item in entries) { document.Layers.Add(item as Layer); } break; case DxfFileToken.TableLinetype: document.LineTypes = new LineTypesTable(template); //Add the entries foreach (TableEntry item in entries) { document.LineTypes.Add(item as LineType); } break; case DxfFileToken.TableStyle: document.Styles = new StylesTable(template); //Add the entries foreach (TableEntry item in entries) { document.Styles.Add(item as Style); } break; case DxfFileToken.TableUcs: document.UCSs = new UCSTable(template); //Add the entries foreach (TableEntry item in entries) { document.UCSs.Add(item as UCS); } break; case DxfFileToken.TableView: document.Views = new ViewsTable(template); //Add the entries foreach (TableEntry item in entries) { document.Views.Add(item as View); } break; case DxfFileToken.TableVport: document.ViewPorts = new ViewPortsTable(template); //Add the entries foreach (TableEntry item in entries) { document.ViewPorts.Add(item as VPort); } break; default: Debug.Fail($"Unhandeled table {template.Name}."); break; } }
internal StylesTable(DxfTableTemplate template) : base(template) { }