/* * GNU AFFERO GENERAL PUBLIC LICENSE * Version 3, 19 November 2007 * Copyright (C) 2007 Free Software Foundation, Inc. * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. */ using System.Collections.Generic; using System.Drawing; using System.Linq; using UVtools.Core.Extensions; namespace UVtools.Core.Layers; public sealed class IssueOfContours : Issue { /// /// Gets the points contours of the issue /// public Point[][] Contours { get; init; } public IssueOfContours() { } public IssueOfContours(Layer layer, IEnumerable contours, Rectangle boundingRectangle, double area) : base(layer, boundingRectangle, area) { Contours = contours.ToArray(); PixelsCount = (uint)area; FirstPoint = Contours[0][0]; } public IssueOfContours(Layer layer, IEnumerable contours, Rectangle boundingRectangle = default) : this(layer, contours, boundingRectangle, boundingRectangle.Area()) { } private bool Equals(IssueOfContours other) { if (!base.Equals(other)) return false; if (Contours.Length != other.Contours.Length) return false; for (int i = 0; i < Contours.Length; i++) { if (!Contours[i].SequenceEqual(other.Contours[i])) return false; } return true; } public override bool Equals(object? obj) { return ReferenceEquals(this, obj) || obj is IssueOfContours other && Equals(other); } public override int GetHashCode() { return (Contours != null ? Contours.GetHashCode() : 0); } }