public override ExtentAdjusterBase AdjustCellSize(decimal cellSize) { ExtentRectangle rawExtent = new ExtentRectangle(OutExtent); rawExtent.CellWidth = cellSize; rawExtent.CellHeight = OutExtent.CellHeight < 0 ? cellSize * -1m : cellSize; ExtentRectangle divExtent = rawExtent.GetDivisibleExtent(); return(new ExtentAdjusterNoReference(SrcExtent, divExtent, Precision)); }
public override ExtentAdjusterBase AdjustDimensions(decimal top, decimal right, decimal bottom, decimal left) { int rows = (int)Utility.DynamicMath.SafeDivision(Math.Max(top - bottom, 0), OutExtent.CellWidth); int cols = (int)Utility.DynamicMath.SafeDivision(Math.Max(right - left, 0), OutExtent.CellWidth); ExtentRectangle rawExtent = new ExtentRectangle(top, left, OutExtent.CellHeight, OutExtent.CellWidth, rows, cols); ExtentRectangle divExtent = rawExtent.GetDivisibleExtent(); return(new ExtentAdjusterNoReference(SrcExtent, divExtent, Precision)); }
/// <summary> /// /// </summary> /// <param name="srcextent">Extent of the source raster that is being adjusted</param> public ExtentAdjusterBase(ExtentRectangle srcextent) { _SrcExtent = srcextent; _numDecimals = GetInitialNumDecimals(srcextent.CellWidth); ExtentRectangle temp = new ExtentRectangle(srcextent); temp.CellWidth = Math.Round(srcextent.CellWidth, _numDecimals); temp.CellHeight = temp.CellWidth * (srcextent.CellHeight < 0 ? -1m : 1m); _OutExtent = temp.GetDivisibleExtent(); }
public override ExtentAdjusterBase AdjustPrecision(ushort precision) { decimal rawCellWidth = (decimal)Math.Round((double)OutExtent.CellWidth, precision); decimal rawCellHeight = (decimal)Math.Round((double)OutExtent.CellHeight, precision); // Abort if f the new precision causes the cell width or height to be zero. // e.g. cell width is 0.5 and the user passes precision 0 if (rawCellWidth == 0m || rawCellHeight == 0m) { return(this); } ExtentRectangle rawExtent = new ExtentRectangle(OutExtent.Top, OutExtent.Left, rawCellHeight, rawCellWidth, OutExtent.Rows, OutExtent.Cols); ExtentRectangle divExtent = rawExtent.GetDivisibleExtent(); return(new ExtentAdjusterNoReference(SrcExtent, divExtent, precision)); }
public void MakeDivisibleTest() { /// /// Here's an already divisible raster. Make sure we don't change it. /// ExtentRectangle eA1 = new ExtentRectangle(5.1m, 6.4m, 0.1m, 0.2m, 100, 100); // This should do nothing ExtentRectangle eA1result = eA1.GetDivisibleExtent(); Assert.AreEqual(eA1result.Top, eA1.Top); Assert.AreEqual(eA1result.Bottom, eA1.Bottom); Assert.AreEqual(eA1result.Left, eA1.Left); Assert.AreEqual(eA1result.Right, eA1.Right); Assert.AreEqual(eA1result.Rows, eA1.Rows); Assert.AreEqual(eA1result.Cols, eA1.Cols); Assert.IsTrue(eA1result.Width >= eA1.Width); Assert.IsTrue(eA1result.Height >= eA1.Height); Assert.IsTrue(eA1result.IsDivisible()); /// /// NEGStep 1: Negative Cell Height, Positive Cell Width /// ExtentRectangle eNotDivisible = new ExtentRectangle(5.09m, 6.5m, -0.1m, 0.2m, 100, 100); Assert.IsFalse(eNotDivisible.IsDivisible()); // Now Make it divisible in the right way ExtentRectangle eDivisible = eNotDivisible.GetDivisibleExtent(); Assert.AreEqual(eDivisible.Top, 5.1m); Assert.AreEqual(eDivisible.Bottom, -5.0m); Assert.AreEqual(eDivisible.Left, 6.4m); Assert.AreEqual(eDivisible.Right, 26.6m); Assert.AreEqual(eDivisible.Rows, 101); Assert.AreEqual(eDivisible.Cols, 101); Assert.IsTrue(eDivisible.Width >= eNotDivisible.Width); Assert.IsTrue(eDivisible.Height >= eNotDivisible.Height); Assert.IsTrue(eDivisible.IsDivisible()); /// /// NEGStep 1: Negative Cell Height, Positive Cell Width /// ExtentRectangle eNegStep1NonDivisible = new ExtentRectangle(5.09m, 6.39m, -0.1m, 0.2m, 100, 100); Assert.IsFalse(eNegStep1NonDivisible.IsDivisible()); //Now Make it divisible in the right way ExtentRectangle eNegStep1 = eNegStep1NonDivisible.GetDivisibleExtent(); Assert.AreEqual(eNegStep1.Top, 5.1m); Assert.AreEqual(eNegStep1.Bottom, -5.0m); Assert.AreEqual(eNegStep1.Left, 6.2m); Assert.AreEqual(eNegStep1.Right, 26.4m); Assert.AreEqual(eNegStep1.Rows, 101); Assert.AreEqual(eNegStep1.Cols, 101); Assert.IsTrue(eNegStep1.Width >= eNegStep1NonDivisible.Width); Assert.IsTrue(eNegStep1.Height >= eNegStep1NonDivisible.Height); Assert.IsTrue(eNegStep1.IsDivisible()); /// /// NEGStep 2: Positive Cell Height, Negative Cell Width /// ExtentRectangle eNegStep2NonDivisible = new ExtentRectangle(5.09m, 6.39m, 0.1m, -0.2m, 100, 100); Assert.IsFalse(eNegStep2NonDivisible.IsDivisible()); //Now Make it divisible in the right way ExtentRectangle eNegStep2 = eNegStep2NonDivisible.GetDivisibleExtent(); Assert.AreEqual(eNegStep2.Top, 5.0m); Assert.AreEqual(eNegStep2.Bottom, 15.1m); Assert.AreEqual(eNegStep2.Left, 6.4m); Assert.AreEqual(eNegStep2.Right, -13.8m); Assert.AreEqual(eNegStep2.Rows, 101); Assert.AreEqual(eNegStep2.Cols, 101); Assert.IsTrue(eNegStep2.Width >= eNegStep2NonDivisible.Width); Assert.IsTrue(eNegStep2.Height >= eNegStep2NonDivisible.Height); Assert.IsTrue(eNegStep2.IsDivisible()); /// /// NegWorldNEGStep 1: Negative Coordinates, Negative Cell Height, Positive Cell Width /// ExtentRectangle eNWNegStep1NonDivisible = new ExtentRectangle(-5.09m, -6.39m, -0.1m, 0.2m, 100, 100); Assert.IsFalse(eNWNegStep1NonDivisible.IsDivisible()); //Now Make it divisible in the right way ExtentRectangle eNWNegStep1 = eNWNegStep1NonDivisible.GetDivisibleExtent(); Assert.AreEqual(eNWNegStep1.Top, -5.0m); Assert.AreEqual(eNWNegStep1.Bottom, -15.1m); Assert.AreEqual(eNWNegStep1.Left, -6.4m); Assert.AreEqual(eNWNegStep1.Right, 13.8m); Assert.AreEqual(eNWNegStep1.Rows, 101); Assert.AreEqual(eNWNegStep1.Cols, 101); Assert.IsTrue(eNWNegStep1.Width >= eNWNegStep1NonDivisible.Width); Assert.IsTrue(eNWNegStep1.Height >= eNWNegStep1NonDivisible.Height); Assert.IsTrue(eNWNegStep1.IsDivisible()); /// /// NegWorldNEGStep 2: Negative Coordinates, Positive Cell Height, Negative Cell Width /// ExtentRectangle eNWNegStep2NonDivisible = new ExtentRectangle(-5.09m, -6.39m, 0.1m, -0.2m, 100, 100); Assert.IsFalse(eNWNegStep2NonDivisible.IsDivisible()); //Now Make it divisible in the right way ExtentRectangle eNWNegStep2 = eNWNegStep2NonDivisible.GetDivisibleExtent(); Assert.AreEqual(eNWNegStep2.Top, -5.1m); Assert.AreEqual(eNWNegStep2.Bottom, 5.0m); Assert.AreEqual(eNWNegStep2.Left, -6.2m); Assert.AreEqual(eNWNegStep2.Right, -26.4m); Assert.AreEqual(eNWNegStep2.Rows, 101); Assert.AreEqual(eNWNegStep2.Cols, 101); Assert.IsTrue(eNWNegStep2.Width >= eNWNegStep2NonDivisible.Width); Assert.IsTrue(eNWNegStep2.Height >= eNWNegStep2NonDivisible.Height); Assert.IsTrue(eNWNegStep2.IsDivisible()); // GCD user reported raster issue 2017/01/15 by P ExtentRectangle user1_src = new ExtentRectangle(114.58069247m, 122.938517551m, -0.003m, 0.003m, 4410, 11487); Assert.IsFalse(user1_src.IsDivisible()); ExtentRectangle user1_out = user1_src.GetDivisibleExtent(); Assert.AreEqual(user1_out.Top, 114.582m); Assert.AreEqual(user1_out.Bottom, 101.349m); Assert.AreEqual(user1_out.Left, 122.937m); Assert.AreEqual(user1_out.Right, 157.401m); Assert.AreEqual(user1_out.Rows, 4411); Assert.AreEqual(user1_out.Cols, 11488); Assert.IsTrue(user1_out.Width >= user1_src.Width); Assert.IsTrue(user1_out.Height >= user1_src.Height); Assert.IsTrue(user1_out.Rows >= user1_src.Rows); Assert.IsTrue(user1_out.Cols >= user1_src.Cols); Assert.IsTrue(user1_out.IsDivisible()); // GCD user reported raster issue 2017/11/15 by AT ExtentRectangle user2_src = new ExtentRectangle(5629639.30575m, 558111.051499m, -1m, 1m, 47, 46); Assert.IsFalse(user2_src.IsDivisible()); ExtentRectangle user2_out = user2_src.GetDivisibleExtent(); Assert.AreEqual(user2_out.Top, 5629640m); Assert.AreEqual(user2_out.Bottom, 5629592m); Assert.AreEqual(user2_out.Left, 558111m); Assert.AreEqual(user2_out.Right, 558158m); Assert.AreEqual(user2_out.Rows, 48); Assert.AreEqual(user2_out.Cols, 47); Assert.IsTrue(user2_out.Width >= user2_src.Width); Assert.IsTrue(user2_out.Height >= user2_src.Height); Assert.IsTrue(user2_out.Rows >= user2_src.Rows); Assert.IsTrue(user2_out.Cols >= user2_src.Cols); Assert.IsTrue(user2_out.IsDivisible()); // GCD user reported raster issue 2018/09/04 by M ExtentRectangle user3_src = new ExtentRectangle(7111409.27802m, 445073.27318m, -0.05m, 0.05m, 11800, 10160); Assert.IsFalse(user3_src.IsDivisible()); ExtentRectangle user3_out = user3_src.GetDivisibleExtent(); Assert.AreEqual(user3_out.Top, 7111409.3m); Assert.AreEqual(user3_out.Bottom, 7110819.25m); Assert.AreEqual(user3_out.Left, 445073.25m); Assert.AreEqual(user3_out.Right, 445581.30m); Assert.AreEqual(user3_out.Rows, 11801); Assert.AreEqual(user3_out.Cols, 10161); Assert.IsTrue(user3_out.Width >= user3_src.Width); Assert.IsTrue(user3_out.Height >= user3_src.Height); Assert.IsTrue(user3_out.Rows >= user3_src.Rows); Assert.IsTrue(user3_out.Cols >= user3_src.Cols); Assert.IsTrue(user3_out.IsDivisible()); // Sulphur Creek Sanity Check ExtentRectangle user4_src = new ExtentRectangle(592252.5m, 1958980.5m, -0.5m, 0.5m, 583, 413); ExtentRectangle user4_out = user4_src.GetDivisibleExtent(); Assert.AreEqual(user4_out.Top, 592252.5m); Assert.AreEqual(user4_out.Bottom, 591961m); Assert.AreEqual(user4_out.Left, 1958980.5m); Assert.AreEqual(user4_out.Right, 1959187m); Assert.AreEqual(user4_out.Rows, 583); Assert.AreEqual(user4_out.Cols, 413); Assert.IsTrue(user4_out.Width >= user4_src.Width); Assert.IsTrue(user4_out.Height >= user4_src.Height); Assert.IsTrue(user4_out.Rows >= user4_src.Rows); Assert.IsTrue(user4_out.Cols >= user4_src.Cols); Assert.IsTrue(user4_out.IsDivisible()); }