Beispiel #1
0
        public Line(DataRecordRow row)
            : this()
        {
            ID = LoadAttributeID( row.Fields, DirectoryDataType.LINE );
            PolygonIDLeft = LoadAttributeID( row.Fields, DirectoryDataType.PIDL );
            PolygonIDRight = LoadAttributeID( row.Fields, DirectoryDataType.PIDR );
            StartNodeID = LoadAttributeID( row.Fields, DirectoryDataType.SNID );
            EndNodeID = LoadAttributeID( row.Fields, DirectoryDataType.ENID );

            AttributeIDs = new List<KeyValuePair<string, int>>();
            var attr = row.Fields.Where( field => field.FieldDefinition.Directory.Tag == DirectoryDataType.ATID );
            if( attr.Any() )
            {
                for( int i = 0; i < attr.Count(); i += 2 )
                    AttributeIDs.Add( new KeyValuePair<string,int>(attr.ElementAt( i ).AsString, attr.ElementAt( i + 1 ).AsInt) );
            }

            var firstX = row.Fields.First( field => field.FieldDefinition.Name == "X" );
            var startIndex = row.Fields.IndexOf( firstX );
            for( int i = startIndex; i < row.Fields.Count; i += 2 )
            {
                var point = new PointD { X = row.Fields[ i ].AsInt / 100.0, Y = row.Fields[ i + 1 ].AsInt / 100.0 };
                Points.Add( point );
            }

            DataRow = row;
        }
 public CatalogDirectoryEntry( DataRecordRow row )
 {
     FileName = row.Fields.ElementAt( 4 ).AsString;
     Contents = row.Fields.ElementAt( 3 ).AsString;
     Type = row.Fields.ElementAt( 2 ).AsString;
 }
Beispiel #3
0
        private DataRecordRow LoadRow( List<KeyValuePair<DDRDirectoryEntry, byte[]>> rowData )
        {
            DataRecordRow row = new DataRecordRow();

            row.ID = int.Parse( new string( rowData[ 0 ].Value.AsCharArray() ) );

            row.Fields = new List<DataRecordField>();
            for( int dataIndex = 1; dataIndex < rowData.Count; dataIndex++ )
            {
                var fieldDescDir = DescriptiveRecord.Directories.OfType<DDRDirectoryEntry>().FirstOrDefault( entry => entry.Fields.First() == rowData[ dataIndex ].Key.Tag.GetDescription() );
                if( fieldDescDir == null )
                    throw new InvalidDataException( String.Format( "Could not find directory for data block {0}", rowData[ dataIndex ].Key.Tag ) );
                if( fieldDescDir.SubFields[ 0 ].Length.HasValue )
                {
                    int currentIndex = 0;
                    for( int fieldIndex = 0; fieldIndex < fieldDescDir.SubFields.Count; fieldIndex++ )
                    {
                        byte[] field = new byte[fieldDescDir.SubFields[fieldIndex].Length.Value];
                        Array.Copy( rowData[ dataIndex ].Value, currentIndex, field, 0, field.Length );
                        row.Fields.Add( new DataRecordField( fieldDescDir.SubFields[ fieldIndex ], field ) );
                        currentIndex += fieldDescDir.SubFields[ fieldIndex ].Length.Value;
                    }
                }
                else
                {
                    var fields = rowData[ dataIndex ].Value.SplitOnSeparator( INT_FieldSeparator );
                    if( fields.Count != fieldDescDir.SubFields.Count )
                        throw new InvalidDataException( "The number of fields does not match expected" );
                    for( int fieldIndex = 0; fieldIndex < fields.Count; fieldIndex++ )
                    {
                        row.Fields.Add( new DataRecordField( fieldDescDir.SubFields[ fieldIndex ], fields[ fieldIndex ] ) );
                    }
                }
            }
            return row;
        }