diff --git a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs index 38d2be74e..bfe90594b 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs @@ -45,7 +45,6 @@ private bool skipEntry(NonGraphicalObject entry, out bool notify) case TableStyle: case ProxyObject: case BlockRepresentationData: - case BlockReferenceObjectContextData: case MTextAttributeObjectContextData: return true; } @@ -70,9 +69,22 @@ private void writeAcdbPlaceHolder(AcdbPlaceHolder acdbPlaceHolder) private void writeAnnotScaleObjectContextData(AnnotScaleObjectContextData annotScaleObjectContextData) { + this.writeObjectContextData(annotScaleObjectContextData); + this._writer.HandleReference(DwgReferenceType.HardPointer, annotScaleObjectContextData.Scale); } + private void writeBlockReferenceObjectContextData(BlockReferenceObjectContextData contextData) + { + this.writeAnnotScaleObjectContextData(contextData); + + this._writer.WriteBitDouble(contextData.Rotation); + this._writer.Write3BitDouble(contextData.InsertionPoint); + this._writer.WriteBitDouble(contextData.XScale); + this._writer.WriteBitDouble(contextData.YScale); + this._writer.WriteBitDouble(contextData.ZScale); + } + private void writeBookColor(BookColor color) { this._writer.WriteBitShort(0); @@ -724,7 +736,9 @@ private void writeMLineStyle(MLineStyle mlineStyle) private void writeMultiLeaderAnnotContext(MultiLeaderObjectContextData multiLeaderAnnotContext) { - writeMultiLeaderAnnotContextSubObject(false, multiLeaderAnnotContext); + this.writeAnnotScaleObjectContextData(multiLeaderAnnotContext); + + this.writeMultiLeaderAnnotContextSubObject(false, multiLeaderAnnotContext); } private void writeMultiLeaderStyle(MultiLeaderStyle mLeaderStyle) @@ -863,6 +877,9 @@ private void writeObject(NonGraphicalObject obj) case BookColor bookColor: this.writeBookColor(bookColor); break; + case BlockReferenceObjectContextData blockContextData: + this.writeBlockReferenceObjectContextData(blockContextData); + break; case CadDictionaryWithDefault dictionarydef: this.writeCadDictionaryWithDefault(dictionarydef); break; @@ -897,8 +914,6 @@ private void writeObject(NonGraphicalObject obj) this.writeMultiLeaderStyle(multiLeaderStyle); break; case MultiLeaderObjectContextData multiLeaderObjectContextData: - this.writeObjectContextData(multiLeaderObjectContextData); - this.writeAnnotScaleObjectContextData(multiLeaderObjectContextData); this.writeMultiLeaderAnnotContext(multiLeaderObjectContextData); break; case PdfUnderlayDefinition pdfDefinition: @@ -939,8 +954,6 @@ private void writeObjectContextData(ObjectContextData objectContextData) { //BS 70 Version. this._writer.WriteBitShort(objectContextData.Version); - //B - Has file to extension dictionary. - this._writer.WriteBit(objectContextData.HasFileToExtensionDictionary); //B 290 Default flag. this._writer.WriteBit(objectContextData.Default); } diff --git a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs index a3da4ff6e..aea69819a 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs @@ -379,13 +379,19 @@ protected void writeObject(T co) { case AcdbPlaceHolder acdbPlaceHolder: this.writeAcdbPlaceHolder(acdbPlaceHolder); - return; + break; + case BlockReferenceObjectContextData blockContextData: + this.writeBlockReferenceObjectContextData(blockContextData); + break; + case MTextAttributeObjectContextData mtextContextData: + this.writeMTextAttributeObjectContextData(mtextContextData); + break; case BookColor bookColor: this.writeBookColor(bookColor); - return; + break; case CadDictionary cadDictionary: this.writeDictionary(cadDictionary); - return; + break; case DictionaryVariable dictvar: this.writeDictionaryVariable(dictvar); break; @@ -400,10 +406,10 @@ protected void writeObject(T co) break; case ImageDefinition imageDefinition: this.writeImageDefinition(imageDefinition); - return; + break; case ImageDefinitionReactor reactor: this.writeImageDefinitionReactor(reactor); - return; + break; case Layout layout: this.writeLayout(layout); break; @@ -587,8 +593,6 @@ private bool isObjectSupported(CadObject co) case TableStyle: case ProxyObject: case BlockRepresentationData: - case MTextAttributeObjectContextData: - case BlockReferenceObjectContextData: this.notify($"Object not implemented : {co.GetType().FullName}", NotificationType.NotImplemented); return false; default: @@ -600,6 +604,44 @@ private void writeAcdbPlaceHolder(AcdbPlaceHolder acdbPlaceHolder) { } + private void writeAnnotScaleObjectContextData(AnnotScaleObjectContextData contextData) + { + this._writer.Write(100, DxfSubclassMarker.AnnotScaleObjectContextData); + + this._writer.WriteHandle(340, contextData.Scale); + } + + private void writeBlockReferenceObjectContextData(BlockReferenceObjectContextData contextData) + { + DxfClassMap map = DxfClassMap.Create(); + + this.writeAnnotScaleObjectContextData(contextData); + + this._writer.Write(50, contextData.Rotation, map); + + this._writer.Write(10, contextData.InsertionPoint, map); + + this._writer.Write(41, contextData.XScale, map); + this._writer.Write(42, contextData.YScale, map); + this._writer.Write(43, contextData.ZScale, map); + } + + private void writeMTextAttributeObjectContextData(MTextAttributeObjectContextData contextData) + { + DxfClassMap map = DxfClassMap.Create(); + + this.writeAnnotScaleObjectContextData(contextData); + + this._writer.Write(70, contextData.AttachmentPoint, map); + + this._writer.Write(50, contextData.Rotation, map); + + this._writer.Write(10, contextData.AlignmentPoint, map); + this._writer.Write(11, contextData.InsertPoint, map); + + this._writer.Write(290, contextData.Value290, map); + } + private void writeDimensionAssociation(DimensionAssociation dimAssociation) { DxfClassMap map = DxfClassMap.Create();