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); } }
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); } }
internal void AssignHandles(DwgObjectMap objectMap) { objectMap.AssignHandle(this); foreach (var child in ChildItems) { child.AssignHandles(objectMap); } }
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); }
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); }
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); }
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); }
internal virtual void WriteCommonDataEnd(BitWriter writer, DwgObjectMap objectMap, int pointerOffset) { }
internal abstract void WriteSpecific(BitWriter writer, DwgObjectMap objectMap, int pointerOffset, DwgVersionId version);