Esempio n. 1
0
 internal LayersTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 2
0
 internal LineTypesTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 3
0
 internal BlockRecordsTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 4
0
 internal UCSTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 5
0
 internal AppIdsTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 6
0
 internal Table(DxfTableTemplate template)
 {
     Handle      = template.Handle;
     OwnerHandle = template.OwnerHandle;
 }
Esempio n. 7
0
 internal ViewPortsTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 8
0
 internal DimensionStylesTable(DxfTableTemplate template) : base(template)
 {
 }
Esempio n. 9
0
        /// <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;
            }
        }
Esempio n. 10
0
 internal StylesTable(DxfTableTemplate template) : base(template)
 {
 }