From 518ae7830d91941124d2a5d947cde9268351887c Mon Sep 17 00:00:00 2001 From: DomCR Date: Mon, 27 Jan 2025 12:49:56 +0100 Subject: [PATCH] image reactor --- .../{CadImageBase.cs => CadWipeoutBase.cs} | 33 +++++++++++++++---- src/ACadSharp/Entities/RasterImage.cs | 2 +- src/ACadSharp/Entities/Wipeout.cs | 2 +- .../DWG/DwgStreamReaders/DwgObjectReader.cs | 2 +- .../DwgObjectWriter.Entities.cs | 4 +-- .../DxfSectionWriterBase.Entities.cs | 2 +- .../IO/Templates/CadImageTemplate.cs | 4 +-- src/ACadSharp/Objects/ImageDefinition.cs | 4 +-- .../Objects/ImageDefinitionReactor.cs | 9 +++++ 9 files changed, 46 insertions(+), 16 deletions(-) rename src/ACadSharp/Entities/{CadImageBase.cs => CadWipeoutBase.cs} (88%) diff --git a/src/ACadSharp/Entities/CadImageBase.cs b/src/ACadSharp/Entities/CadWipeoutBase.cs similarity index 88% rename from src/ACadSharp/Entities/CadImageBase.cs rename to src/ACadSharp/Entities/CadWipeoutBase.cs index d917d42e..2288e050 100644 --- a/src/ACadSharp/Entities/CadImageBase.cs +++ b/src/ACadSharp/Entities/CadWipeoutBase.cs @@ -4,6 +4,7 @@ using System; using ACadSharp.Objects; using System.Linq; +using CSUtilities.Extensions; namespace ACadSharp.Entities { @@ -11,7 +12,7 @@ namespace ACadSharp.Entities /// Common base class for and . /// [DxfSubClass(null, true)] - public abstract class CadImageBase : Entity + public abstract class CadWipeoutBase : Entity { /// /// Class version @@ -38,20 +39,39 @@ public abstract class CadImageBase : Entity public XYZ VVector { get; set; } = XYZ.AxisY; /// - /// Image size in pixels + /// Image size in pixels. /// /// - /// 2D point(U and V values) + /// 2D point(U and V values). /// [DxfCodeValue(13, 23)] public XY Size { get; set; } /// - /// Image display properties + /// Image display properties. /// [DxfCodeValue(70)] public ImageDisplayFlags Flags { get; set; } + /// + /// Add the ShowImage flag to the display flags property. + /// + public bool ShowImage + { + get { return this.Flags.HasFlag(ImageDisplayFlags.ShowImage); } + set + { + if (value) + { + this.Flags = this.Flags.AddFlag(ImageDisplayFlags.ShowImage); + } + else + { + this.Flags = this.Flags.RemoveFlag(ImageDisplayFlags.ShowImage); + } + } + } + /// /// Clipping state /// @@ -169,7 +189,7 @@ public ImageDefinition Definition } /// - /// Reference to image definition reactor + /// Reference to image definition reactor. /// //It seems that is not necessecary, keep it hidden for now [DxfCodeValue(DxfReferenceType.Handle, 360)] @@ -179,6 +199,7 @@ internal ImageDefinitionReactor DefinitionReactor set { this._definitionReactor = value; + this._definitionReactor.Owner = this; } } @@ -213,7 +234,7 @@ public override BoundingBox GetBoundingBox() /// public override CadObject Clone() { - CadImageBase clone = (CadImageBase)base.Clone(); + CadWipeoutBase clone = (CadWipeoutBase)base.Clone(); clone.Definition = (ImageDefinition)this.Definition?.Clone(); diff --git a/src/ACadSharp/Entities/RasterImage.cs b/src/ACadSharp/Entities/RasterImage.cs index e1bd76db..2c648cbb 100644 --- a/src/ACadSharp/Entities/RasterImage.cs +++ b/src/ACadSharp/Entities/RasterImage.cs @@ -12,7 +12,7 @@ namespace ACadSharp.Entities /// [DxfName(DxfFileToken.EntityImage)] [DxfSubClass(DxfSubclassMarker.RasterImage)] - public class RasterImage : CadImageBase + public class RasterImage : CadWipeoutBase { /// public override ObjectType ObjectType => ObjectType.UNLISTED; diff --git a/src/ACadSharp/Entities/Wipeout.cs b/src/ACadSharp/Entities/Wipeout.cs index e2fa7ad1..723b3a4e 100644 --- a/src/ACadSharp/Entities/Wipeout.cs +++ b/src/ACadSharp/Entities/Wipeout.cs @@ -11,7 +11,7 @@ namespace ACadSharp.Entities /// [DxfName(DxfFileToken.EntityWipeout)] [DxfSubClass(DxfSubclassMarker.Wipeout)] - public class Wipeout : CadImageBase + public class Wipeout : CadWipeoutBase { /// public override ObjectType ObjectType => ObjectType.UNLISTED; diff --git a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs index d0b268d5..c88eb4e7 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs @@ -5418,7 +5418,7 @@ private CadTemplate readVisualStyle() return null; } - private CadTemplate readCadImage(CadImageBase image) + private CadTemplate readCadImage(CadWipeoutBase image) { CadImageTemplate template = new CadImageTemplate(image); diff --git a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Entities.cs b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Entities.cs index 85eb5a6f..d91cccc2 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Entities.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Entities.cs @@ -135,7 +135,7 @@ private void writeEntity(Entity entity) case Spline spline: this.writeSpline(spline); break; - case CadImageBase image: + case CadWipeoutBase image: this.writeCadImage(image); break; case TextEntity text: @@ -1752,7 +1752,7 @@ private void writeSolid3D(Solid3D solid) { } - private void writeCadImage(CadImageBase image) + private void writeCadImage(CadWipeoutBase image) { this._writer.WriteBitLong(image.ClassVersion); diff --git a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs index b71c087a..5fa82bbb 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs @@ -1213,7 +1213,7 @@ private void writeViewport(Viewport vp) } private void writeCadImage(T image) - where T : CadImageBase + where T : CadWipeoutBase { DxfClassMap map = DxfClassMap.Create(); diff --git a/src/ACadSharp/IO/Templates/CadImageTemplate.cs b/src/ACadSharp/IO/Templates/CadImageTemplate.cs index c93b0399..2c1c53e3 100644 --- a/src/ACadSharp/IO/Templates/CadImageTemplate.cs +++ b/src/ACadSharp/IO/Templates/CadImageTemplate.cs @@ -9,13 +9,13 @@ internal class CadImageTemplate : CadEntityTemplate public ulong? ImgReactorHandle { get; set; } - public CadImageTemplate(CadImageBase image) : base(image) { } + public CadImageTemplate(CadWipeoutBase image) : base(image) { } public override void Build(CadDocumentBuilder builder) { base.Build(builder); - CadImageBase image = this.CadObject as CadImageBase; + CadWipeoutBase image = this.CadObject as CadWipeoutBase; if (builder.TryGetCadObject(this.ImgDefHandle, out ImageDefinition imgDef)) { diff --git a/src/ACadSharp/Objects/ImageDefinition.cs b/src/ACadSharp/Objects/ImageDefinition.cs index 350f3294..9511b540 100644 --- a/src/ACadSharp/Objects/ImageDefinition.cs +++ b/src/ACadSharp/Objects/ImageDefinition.cs @@ -27,7 +27,7 @@ public class ImageDefinition : NonGraphicalObject /// Class version /// [DxfCodeValue(90)] - public int ClassVersion { get; set; } + public int ClassVersion { get; internal set; } /// /// File name of image @@ -51,7 +51,7 @@ public class ImageDefinition : NonGraphicalObject /// Image-is-loaded flag. /// [DxfCodeValue(280)] - public bool IsLoaded { get; set; } = false; + public bool IsLoaded { get; set; } = true; /// /// Resolution units. diff --git a/src/ACadSharp/Objects/ImageDefinitionReactor.cs b/src/ACadSharp/Objects/ImageDefinitionReactor.cs index 042e2953..f13bd517 100644 --- a/src/ACadSharp/Objects/ImageDefinitionReactor.cs +++ b/src/ACadSharp/Objects/ImageDefinitionReactor.cs @@ -1,4 +1,5 @@ using ACadSharp.Attributes; +using System; namespace ACadSharp.Objects { @@ -11,6 +12,7 @@ namespace ACadSharp.Objects /// [DxfName(DxfFileToken.ObjectImageDefinitionReactor)] [DxfSubClass(DxfSubclassMarker.RasterImageDefReactor)] + [Obsolete("This object doesn't seem to be needed for any kind of app.")] public class ImageDefinitionReactor : NonGraphicalObject { /// @@ -33,5 +35,12 @@ public class ImageDefinitionReactor : NonGraphicalObject /// [DxfCodeValue(DxfReferenceType.Handle, 330)] public ImageDefinition Definition { get; set; } + + internal ImageDefinitionReactor() { } + + internal ImageDefinitionReactor(ImageDefinition definition) + { + this.Definition = definition; + } } }