using System; using System.Collections.Generic; using System.Text; using FastReport.Utils; using System.IO; using System.Globalization; using System.ComponentModel; namespace FastReport.Map { /// /// Represents four coordinates that define a bounding box. /// [TypeConverter(typeof(ExpandableObjectConverter))] public class BoundingBox { #region Fields private double minX; private double minY; private double maxX; private double maxY; #endregion // Fields #region Properties /// /// Gets or sets the minimum X-coordinate of a bounding box. /// public double MinX { get { return minX; } set { minX = value; } } /// /// Gets or sets the minimum Y-coordinate of a bounding box. /// public double MinY { get { return minY; } set { minY = value; } } /// /// Gets or sets the maximum X-coordinate of a bounding box. /// public double MaxX { get { return maxX; } set { maxX = value; } } /// /// Gets or sets the maximum Y-coordinate of a bounding box. /// public double MaxY { get { return maxY; } set { maxY = value; } } #endregion // Properties #region Private Methods private string ToString(double value) { return value.ToString(CultureInfo.InvariantCulture.NumberFormat); } private double FromString(string value) { return double.Parse(value, CultureInfo.InvariantCulture.NumberFormat); } #endregion #region Public Methods /// /// Copies the contents of another instance. /// /// Source box to copy the contents from. public void Assign(BoundingBox src) { MinX = src.MinX; MinY = src.MinY; MaxX = src.MaxX; MaxY = src.MaxY; } internal string GetAsString() { StringBuilder result = new StringBuilder(); result.Append(ToString(minX)).Append(","). Append(ToString(minY)).Append(","). Append(ToString(maxX)).Append(","). Append(ToString(maxY)); return result.ToString(); } internal void SetAsString(string value) { string[] arr = value.Split(','); minX = FromString(arr[0]); minY = FromString(arr[1]); maxX = FromString(arr[2]); maxY = FromString(arr[3]); } internal void Load(Stream stream) { byte[] buffer8 = new byte[8]; stream.Read(buffer8, 0, buffer8.Length); MinX = BitConverter.ToDouble(buffer8, 0); stream.Read(buffer8, 0, buffer8.Length); MinY = BitConverter.ToDouble(buffer8, 0); stream.Read(buffer8, 0, buffer8.Length); MaxX = BitConverter.ToDouble(buffer8, 0); stream.Read(buffer8, 0, buffer8.Length); MaxY = BitConverter.ToDouble(buffer8, 0); } internal void Save(Stream stream) { byte[] buffer8 = BitConverter.GetBytes(MinX); stream.Write(buffer8, 0, buffer8.Length); buffer8 = BitConverter.GetBytes(MinY); stream.Write(buffer8, 0, buffer8.Length); buffer8 = BitConverter.GetBytes(MaxX); stream.Write(buffer8, 0, buffer8.Length); buffer8 = BitConverter.GetBytes(MaxY); stream.Write(buffer8, 0, buffer8.Length); } #endregion // Public Methods } }