diff --git a/ACadSharp.Tests/IO/WriterSingleObjectTests.cs b/ACadSharp.Tests/IO/WriterSingleObjectTests.cs index 3eee8d2a..8943841b 100644 --- a/ACadSharp.Tests/IO/WriterSingleObjectTests.cs +++ b/ACadSharp.Tests/IO/WriterSingleObjectTests.cs @@ -36,6 +36,14 @@ public void DefaultLayer() this.Document.Layers.Add(new Layer("default_layer")); } + public void LayerTrueColor() + { + Layer layer = new Layer("Layer_true_color"); + layer.Color = Color.FromTrueColor(1151726); + + this.Document.Layers.Add(layer); + } + public void EntityColorByLayer() { Layer layer = new Layer("Test"); @@ -171,6 +179,7 @@ static WriterSingleObjectTests() Data.Add(new(nameof(SingleCaseGenerator.EntityColorByLayer))); Data.Add(new(nameof(SingleCaseGenerator.EntityColorTrueColor))); Data.Add(new(nameof(SingleCaseGenerator.DefaultLayer))); + Data.Add(new(nameof(SingleCaseGenerator.LayerTrueColor))); Data.Add(new(nameof(SingleCaseGenerator.SingleMText))); Data.Add(new(nameof(SingleCaseGenerator.SingleMTextSpecialCharacter))); Data.Add(new(nameof(SingleCaseGenerator.SingleMTextMultiline))); diff --git a/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderAC18.cs b/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderAC18.cs index e9e77a6d..ee7f1eb7 100644 --- a/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderAC18.cs +++ b/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderAC18.cs @@ -72,6 +72,7 @@ public override Color ReadEnColor(out Transparency transparency, out bool flag) { //color flags: first byte of the bitshort. ushort flags = (ushort)((ushort)size & 0b1111111100000000); + //0x4000: has AcDbColor reference (0x8000 is also set in this case). if ((flags & 0x4000) > 0) { @@ -83,6 +84,7 @@ public override Color ReadEnColor(out Transparency transparency, out bool flag) else if ((flags & 0x8000) > 0) { //Next value is a BS containing the RGB value(last 24 bits). + //flags: 0b1100_0010_0000_0000_0000_0000_0000_0000 uint rgb = (uint)this.ReadBitLong(); color = Color.FromTrueColor(rgb & 0b00000000111111111111111111111111); } diff --git a/ACadSharp/IO/DWG/DwgStreamWriters/DwgStreamWriterAC18.cs b/ACadSharp/IO/DWG/DwgStreamWriters/DwgStreamWriterAC18.cs index 4570e0b5..12a0cee0 100644 --- a/ACadSharp/IO/DWG/DwgStreamWriters/DwgStreamWriterAC18.cs +++ b/ACadSharp/IO/DWG/DwgStreamWriters/DwgStreamWriterAC18.cs @@ -20,9 +20,9 @@ public override void WriteCmColor(Color value) if (value.IsTrueColor) { - arr[0] = (byte)(value.R); - arr[1] = (byte)(value.G); - arr[2] = (byte)(value.B); + arr[0] = (byte)value.R; + arr[1] = (byte)value.G; + arr[2] = (byte)value.B; arr[3] = 0b1100_0010; } else @@ -55,7 +55,7 @@ public override void WriteEnColor(Color color, Transparency transparency) //0x2000: color is followed by a transparency BL if (!transparency.IsByLayer) { - size = (ushort)(size | 0x2000); + size = (ushort)(size | 0b10000000000000); } //0x8000: complex color (rgb). @@ -73,7 +73,8 @@ public override void WriteEnColor(Color color, Transparency transparency) if (color.IsTrueColor) { - base.WriteBitLong(color.TrueColor); + uint rgb = (uint)(0b1100_0010_0000_0000_0000_0000_0000_0000 | color.TrueColor); + base.WriteBitLong((int)rgb); } if (!transparency.IsByLayer)