Example #1
0
 public EscapeCommand(int identifier, StructuredDataRecord dataRecord)
     : base(6, 1)
 {
     Identifier = identifier;
     Name       = GetName(identifier);
     DataRecord = dataRecord;
 }
Example #2
0
 public override void ReadFromBinary(IBinaryReader reader)
 {
     CharacterSetIndex = reader.ReadIndex();
     Type          = (CharacterSetList.Type)reader.ReadEnum();
     SequenceTail  = reader.ReadFixedString();
     OctetsPerCode = reader.ReadInt();
     GlyphSource   = reader.ReadIndex();
     CodeAssocs    = reader.ReadSDR();
 }
Example #3
0
File: Tile.cs Project: twenzel/CGM
 public Tile(CgmFile container, CompressionType compressionType, int rowPaddingIndicator, int cellColorPrecision, StructuredDataRecord sdr, MemoryStream image)
     : this(container)
 {
     CompressionType     = compressionType;
     RowPaddingIndicator = rowPaddingIndicator;
     DataRecord          = sdr;
     Image = image;
     CellColorPrecision = cellColorPrecision;
 }
Example #4
0
 public GlyphMapping(CgmFile container, int characterSetIndex, CharacterSetList.Type type, string sequenceTail, int octetsPerCode, int glyphSource, StructuredDataRecord codeAssocs)
     : this(container)
 {
     CharacterSetIndex = characterSetIndex;
     Type          = type;
     SequenceTail  = sequenceTail;
     OctetsPerCode = octetsPerCode;
     GlyphSource   = glyphSource;
     CodeAssocs    = codeAssocs;
 }
Example #5
0
        private void UpdateLinkTarget(StructuredDataRecord dataRecord)
        {
            var firstElement = dataRecord.Elements.FirstOrDefault();

            object[] linkValues = firstElement != null ? firstElement.Values : new object[0];
            if (linkValues.Length == 3)
            {
                _currentNode.LinkTarget = new HotspotLinkTarget(Convert.ToString(linkValues[0]), Convert.ToString(linkValues[1]), Convert.ToString(linkValues[2]));
            }
        }
Example #6
0
        private void UpdateScreentip(StructuredDataRecord dataRecord)
        {
            var    firstElement    = dataRecord.Elements.FirstOrDefault();
            object screentipObject = firstElement != null?firstElement.Values.FirstOrDefault() : null;

            if (screentipObject != null)
            {
                _currentNode.Screentip = Convert.ToString(screentipObject);
            }
        }
Example #7
0
        private void UpdateName(StructuredDataRecord dataRecord)
        {
            var    firstElement = dataRecord.Elements.FirstOrDefault();
            object nameObject   = firstElement != null?firstElement.Values.FirstOrDefault() : null;

            if (nameObject != null)
            {
                _currentNode.Name = Convert.ToString(nameObject);
            }
        }
Example #8
0
 public BitonalTile(CgmFile container, CompressionType compressionType, int rowPaddingIndicator, CgmColor backgroundcolor, CgmColor foregroundcolor, StructuredDataRecord sdr, MemoryStream image)
     : this(container)
 {
     DataRecord          = sdr;
     CompressionType     = compressionType;
     RowPaddingIndicator = rowPaddingIndicator;
     Backgroundcolor     = backgroundcolor;
     Foregroundcolor     = foregroundcolor;
     Image = image;
 }
Example #9
0
        private void UpdateHotspotRegion(StructuredDataRecord dataRecord)
        {
            // region has 2 SDR elements; the region type and the actual values according to the type
            // just say its an object boundary hotspot if we can't find anything better
            if (dataRecord.Elements.Count() != 2)
            {
                return;
            }

            var    firstElement     = dataRecord.Elements.First();
            object regionTypeObject = firstElement != null?firstElement.Values.FirstOrDefault() : null;

            HotspotRegionType regionType;

            if (regionTypeObject != null && Enum.TryParse <HotspotRegionType>(Convert.ToString(regionTypeObject), out regionType))
            {
                _currentNode.RegionType   = regionType;
                _currentNode.RegionValues = dataRecord.Elements.Skip(1).First().Values.OfType <double>().ToArray();
            }
        }
Example #10
0
        public static EscapeCommand Escape(MetafileReader reader)
        {
            int identifier = reader.ReadInteger();

            string dataRecordString = reader.ReadString();
            // attempt to parse the data record as structured record, in case it is a known one
            // otherwise it is probably application specific and cannot be assumed to be a structured record
            StructuredDataRecord dataRecord;

            if (EscapeCommand.KnownEscapeTypes.ContainsKey(identifier))
            {
                dataRecord = ApplicationStructureDescriptorReader.ParseStructuredDataRecord(dataRecordString);
            }
            else
            {
                dataRecord = new StructuredDataRecord(new[]
                {
                    new StructuredDataElement(DataTypeIndex.String, new object[] { dataRecordString }),
                });
            }
            return(new EscapeCommand(identifier, dataRecord));
        }
Example #11
0
 public override void ReadFromBinary(IBinaryReader reader)
 {
     AttributeType = reader.ReadFixedString();
     Data          = reader.ReadSDR();
 }
Example #12
0
 public ApplicationStructureAttribute(CgmFile container, string attributeType, StructuredDataRecord sdr)
     : this(container)
 {
     AttributeType = attributeType;
     Data          = sdr;
 }
Example #13
0
        public StructuredDataRecord ReadSDR()
        {
            var ret       = new StructuredDataRecord();
            var sdrLength = GetStringCount();
            var startPos  = CurrentArg;

            while (CurrentArg < (startPos + sdrLength))
            {
                var dataType  = (StructuredDataRecord.StructuredDataType)ReadIndex();
                var dataCount = ReadInt();
                var data      = new List <object>();
                for (var i = 0; i < dataCount; i++)
                {
                    switch (dataType)
                    {
                    case StructuredDataRecord.StructuredDataType.SDR:
                        data.Add(ReadSDR());
                        break;

                    case StructuredDataRecord.StructuredDataType.CI:
                        data.Add(ReadColorIndex());
                        break;

                    case StructuredDataRecord.StructuredDataType.CD:
                        data.Add(ReadDirectColor());
                        break;

                    case StructuredDataRecord.StructuredDataType.N:
                        data.Add(ReadName());
                        break;

                    case StructuredDataRecord.StructuredDataType.E:
                        data.Add(ReadEnum());
                        break;

                    case StructuredDataRecord.StructuredDataType.I:
                        data.Add(ReadInt());
                        break;

                    case StructuredDataRecord.StructuredDataType.RESERVED:
                        // reserved
                        break;

                    case StructuredDataRecord.StructuredDataType.IF8:
                        data.Add(ReadSignedInt8());
                        break;

                    case StructuredDataRecord.StructuredDataType.IF16:
                        data.Add(ReadSignedInt16());
                        break;

                    case StructuredDataRecord.StructuredDataType.IF32:
                        data.Add(ReadSignedInt32());
                        break;

                    case StructuredDataRecord.StructuredDataType.IX:
                        data.Add(ReadIndex());
                        break;

                    case StructuredDataRecord.StructuredDataType.R:
                        data.Add(ReadReal());
                        break;

                    case StructuredDataRecord.StructuredDataType.S:
                        data.Add(ReadString());
                        break;

                    case StructuredDataRecord.StructuredDataType.SF:
                        data.Add(ReadString());
                        break;

                    case StructuredDataRecord.StructuredDataType.VC:
                        data.Add(ReadVc());
                        break;

                    case StructuredDataRecord.StructuredDataType.VDC:
                        data.Add(ReadVdc());
                        break;

                    case StructuredDataRecord.StructuredDataType.CCO:
                        data.Add(ReadDirectColor());
                        break;

                    case StructuredDataRecord.StructuredDataType.UI8:
                        data.Add(ReadUInt8());
                        break;

                    case StructuredDataRecord.StructuredDataType.UI32:
                        data.Add(ReadUInt32());
                        break;

                    case StructuredDataRecord.StructuredDataType.BS:
                        // bit stream? XXX how do we know how many bits to read?
                        throw new NotImplementedException("ReadSDR- bit stream");

                    case StructuredDataRecord.StructuredDataType.CL:
                        // color list? XXX how to read? -> evtl wie in CellArray
                        throw new NotImplementedException("ReadSDR - color list");

                    case StructuredDataRecord.StructuredDataType.UI16:
                        data.Add(ReadUInt16());
                        break;

                    default:
                        throw new NotSupportedException("ReadSDR()-unsupported dataTypeIndex " + dataType);
                    }
                }
                ret.Add(dataType, dataCount, data);
            }
            return(ret);
        }
 public ApplicationStructureAttribute(string attributeType, StructuredDataRecord dataRecord)
     : base(9, 1)
 {
     AttributeType = attributeType;
     DataRecord    = dataRecord;
 }
Example #15
0
        public void WriteSDR(StructuredDataRecord data)
        {
            var oldBucket = _bucket;

            _bucket = new WriterBucket();

            var argumentsCount = data.Members.Count;

            foreach (var record in data.Members)
            {
                argumentsCount += 2 + record.Data.Count;
            }


            //WriteDataLength(argumentsCount);

            foreach (var record in data.Members)
            {
                WriteIndex((int)record.Type);
                WriteInt(record.Count);
                foreach (var val in record.Data)
                {
                    switch (record.Type)
                    {
                    case StructuredDataRecord.StructuredDataType.SDR:
                        WriteSDR((StructuredDataRecord)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.CI:
                        WriteColorIndex((int)val, _cgm.ColourIndexPrecision);
                        break;

                    case StructuredDataRecord.StructuredDataType.CD:
                        WriteDirectColor((System.Drawing.Color)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.N:
                        WriteName((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.E:
                        WriteEnum((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.I:
                        WriteInt((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.RESERVED:
                        // reserved
                        break;

                    case StructuredDataRecord.StructuredDataType.IF8:
                        WriteSignedInt8((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.IF16:
                        WriteSignedInt16((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.IF32:
                        WriteSignedInt32((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.IX:
                        WriteIndex((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.R:
                        WriteReal((double)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.S:
                        WriteString((string)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.SF:
                        WriteFixedString((string)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.VC:
                        WriteVc((VC)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.VDC:
                        WriteVdc((double)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.CCO:
                        WriteDirectColor((System.Drawing.Color)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.UI8:
                        WriteUInt8((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.UI32:
                        WriteUInt32((int)val);
                        break;

                    case StructuredDataRecord.StructuredDataType.BS:
                        _bucket.AddRange((byte[])val);
                        break;

                    case StructuredDataRecord.StructuredDataType.CL:
                        // color list? XXX how to read?  -> evtl wie in CellArray
                        throw new NotImplementedException("Write SDR color list");

                    case StructuredDataRecord.StructuredDataType.UI16:
                        WriteUInt16((int)val);
                        break;

                    default:
                        throw new NotSupportedException($"Data type {record.Type} is not supported by WriteSDR");
                    }
                }
            }

            var sdrBucket = _bucket;

            _bucket = oldBucket;

            WriteDataLength(sdrBucket.Count);
            _bucket.AddRange(sdrBucket);
        }