示例#1
0
        internal void Write(BitWriter writer, DwgObjectMap objectMap, HashSet <int> writtenHandles, int pointerOffset, DwgVersionId version)
        {
            if (!writtenHandles.Add(Handle.HandleOrOffset))
            {
                // already been written
                return;
            }

            PrepareCommonValues();
            OnBeforeObjectWrite();
            SetCommonValues();
            objectMap.SetOffset(Handle.HandleOrOffset, writer.Position);

            // write object to memory so the size can be computed
            using (var ms = new MemoryStream())
            {
                var tempWriter = new BitWriter(ms);
                tempWriter.Write_BS((short)Type);
                WriteCommonDataStart(tempWriter, objectMap, pointerOffset);
                WriteSpecific(tempWriter, objectMap, pointerOffset, version);
                WriteCommonDataEnd(tempWriter, objectMap, pointerOffset);
                var tempBytes = tempWriter.AsBytes();

                // now output everything
                writer.StartCrcCalculation(initialValue: DwgHeaderVariables.InitialCrcValue);
                writer.Write_MS(tempBytes.Length);
                writer.WriteBytes(tempBytes);
                writer.WriteCrc();
            }

            foreach (var child in ChildItems)
            {
                child.Write(writer, objectMap, writtenHandles, pointerOffset, version);
            }
        }
示例#2
0
        internal override void WriteCommonDataEnd(BitWriter writer, DwgObjectMap objectMap, int pointerOffset)
        {
            if (_entityMode == 0)
            {
                writer.Write_H(_subentityRef);
            }

            for (int i = 0; i < _reactorCount; i++)
            {
                writer.Write_H(_reactorHandles[i]);
            }

            writer.Write_H(_xDictionaryObjectHandle);
            writer.Write_H(LayerHandle);
            if (!_isLineTypeByLayer)
            {
                writer.Write_H(LineTypeHandle);
            }

            if (!_noLinks)
            {
                writer.Write_H(PreviousEntityHandle);
            }

            if (!_noLinks)
            {
                writer.Write_H(NextEntityHandle);
            }
        }
示例#3
0
 internal void AssignHandles(DwgObjectMap objectMap)
 {
     objectMap.AssignHandle(this);
     foreach (var child in ChildItems)
     {
         child.AssignHandles(objectMap);
     }
 }
示例#4
0
 internal virtual void WriteCommonDataStart(BitWriter writer, DwgObjectMap objectMap, int pointerOffset)
 {
     writer.Write_H(Handle);
     writer.Write_BS((short)_xData.Length);
     writer.Write_Bytes(_xData);
     writer.Write_RL(_objectSize);
     writer.Write_BL(_reactorCount);
 }
示例#5
0
        internal override void WriteCommonDataStart(BitWriter writer, DwgObjectMap objectMap, int pointerOffset)
        {
            writer.Write_H(Handle);
            writer.Write_BS((short)_xData.Length);
            writer.Write_Bytes(_xData);
            writer.Write_B(_isGraphicPresent);
            if (_isGraphicPresent)
            {
                writer.Write_RL(_graphicsData.Length);
                writer.Write_Bytes(_graphicsData);
            }

            writer.Write_RL(_objectSize);
            writer.Write_BB(_entityMode);
            writer.Write_BL(_reactorCount);
            writer.Write_B(_isLineTypeByLayer);
            writer.Write_B(_noLinks);
            writer.Write_BS(Color.RawValue);
            writer.Write_BD(LineTypeScale);
            writer.Write_BS(_invisibility);
        }
示例#6
0
 internal override void WriteSpecific(BitWriter writer, DwgObjectMap objectMap, int pointerOffset, DwgVersionId version)
 {
     writer.Write_T(Name);
     writer.Write_T(Description);
     writer.Write_BS(Flags);
     writer.Write_BS(FillColor.RawValue);
     writer.Write_BD(StartAngle);
     writer.Write_BD(EndAngle);
     writer.Write_RC(_lineStyleCount);
     for (int i = 0; i < _lineStyleCount; i++)
     {
         writer.Write_BD(_lineStyleOffsets[i]);
         writer.Write_BS(_lineStyleColors[i]);
         writer.Write_BS(_lineStyleLineTypeIndicies[i]);
     }
     writer.Write_H(_parentHandle);
     for (int i = 0; i < _reactorCount; i++)
     {
         writer.Write_H(_reactorHandles[i]);
     }
     writer.Write_H(_xDictionaryObjectHandle);
 }
示例#7
0
 internal override void WriteSpecific(BitWriter writer, DwgObjectMap objectMap, int pointerOffset, DwgVersionId version)
 {
     writer.Write_T(Name);
     writer.Write_B(_64flag);
     writer.Write_BS(_xrefIndex);
     writer.Write_B(_isDependentOnXRef);
     writer.Write_T(Description);
     writer.Write_BD(PatternLength);
     writer.Write_RC((byte)_alignment);
     writer.Write_RC((byte)DashInfos.Count);
     foreach (var dashInfo in DashInfos)
     {
         dashInfo.Write(writer);
     }
     writer.Write_H(LineTypeControlHandle);
     foreach (var reactorHandle in _reactorHandles)
     {
         writer.Write_H(reactorHandle);
     }
     writer.Write_H(_xDictionaryObjectHandle);
     writer.Write_H(_nullHandle);
 }
示例#8
0
 internal virtual void WriteCommonDataEnd(BitWriter writer, DwgObjectMap objectMap, int pointerOffset)
 {
 }
示例#9
0
 internal abstract void WriteSpecific(BitWriter writer, DwgObjectMap objectMap, int pointerOffset, DwgVersionId version);