SamplingGrid.cs
上传用户:tjjgrl
上传日期:2019-04-04
资源大小:1010k
文件大小:4k
源码类别:

电子政务应用

开发平台:

C#

  1. using System;
  2. namespace ThoughtWorks.QRCode.Geom
  3. {
  4. /// <summary> This class is used for sampling grid
  5. /// It allows one area to have a different size from another area
  6. /// </summary>
  7. public class SamplingGrid
  8. {
  9. virtual public int TotalWidth
  10. {
  11. get
  12. {
  13. int total = 0;
  14. for (int i = 0; i < grid.Length; i++)
  15. {
  16. total += grid[i][0].Width;
  17. if (i > 0)
  18. total -= 1;
  19. }
  20. return total;
  21. }
  22. }
  23. virtual public int TotalHeight
  24. {
  25. get
  26. {
  27. int total = 0;
  28. for (int i = 0; i < grid[0].Length; i++)
  29. {
  30. total += grid[0][i].Height;
  31. if (i > 0)
  32. total -= 1;
  33. }
  34. return total;
  35. }
  36. }
  37.         /// <summary> A grid for a single area</summary>
  38. private class AreaGrid
  39. {
  40.             private SamplingGrid enclosingInstance;
  41.             private Line[] xLine;
  42.             private Line[] yLine;
  43. private void  InitBlock(SamplingGrid enclosingInstance)
  44. {
  45. this.enclosingInstance = enclosingInstance;
  46. }
  47. virtual public int Width
  48. {
  49. get
  50. {
  51. return (xLine.Length);
  52. }
  53. }
  54. virtual public int Height
  55. {
  56. get
  57. {
  58. return (yLine.Length);
  59. }
  60. }
  61. virtual public Line[] XLines
  62. {
  63. get
  64. {
  65. return xLine;
  66. }
  67. }
  68. virtual public Line[] YLines
  69. {
  70. get
  71. {
  72. return yLine;
  73. }
  74. }
  75. public SamplingGrid Enclosing_Instance
  76. {
  77. get
  78. {
  79. return enclosingInstance;
  80. }
  81. }
  82. public AreaGrid(SamplingGrid enclosingInstance, int width, int height)
  83. {
  84. InitBlock(enclosingInstance);
  85. xLine = new Line[width];
  86. yLine = new Line[height];
  87. }
  88. public virtual Line getXLine(int x)
  89. {
  90. return xLine[x];
  91. }
  92. public virtual Line getYLine(int y)
  93. {
  94. return yLine[y];
  95. }
  96. public virtual void  setXLine(int x, Line line)
  97. {
  98. xLine[x] = line;
  99. }
  100. public virtual void  setYLine(int y, Line line)
  101. {
  102. yLine[y] = line;
  103. }
  104. }
  105. private AreaGrid[][] grid;
  106. public SamplingGrid(int sqrtNumArea)
  107. {
  108. grid = new AreaGrid[sqrtNumArea][];
  109. for (int i = 0; i < sqrtNumArea; i++)
  110. {
  111. grid[i] = new AreaGrid[sqrtNumArea];
  112. }
  113. }
  114. public virtual void  initGrid(int ax, int ay, int width, int height)
  115. {
  116. grid[ax][ay] = new AreaGrid(this, width, height);
  117. }
  118. public virtual void  setXLine(int ax, int ay, int x, Line line)
  119. {
  120. grid[ax][ay].setXLine(x, line);
  121. }
  122. public virtual void  setYLine(int ax, int ay, int y, Line line)
  123. {
  124. grid[ax][ay].setYLine(y, line);
  125. }
  126. public virtual Line getXLine(int ax, int ay, int x)
  127. {
  128. return (grid[ax][ay].getXLine(x));
  129. }
  130. public virtual Line getYLine(int ax, int ay, int y)
  131. {
  132. return (grid[ax][ay].getYLine(y));
  133. }
  134. public virtual Line[] getXLines(int ax, int ay)
  135. {
  136. return (grid[ax][ay].XLines);
  137. }
  138. public virtual Line[] getYLines(int ax, int ay)
  139. {
  140. return (grid[ax][ay].YLines);
  141. }
  142. public virtual int getWidth()
  143. {
  144. return (grid[0].Length);
  145. }
  146. public virtual int getHeight()
  147. {
  148. return (grid.Length);
  149. }
  150. public virtual int getWidth(int ax, int ay)
  151. {
  152. return (grid[ax][ay].Width);
  153. }
  154. public virtual int getHeight(int ax, int ay)
  155. {
  156. return (grid[ax][ay].Height);
  157. }
  158. public virtual int getX(int ax, int x)
  159. {
  160. int total = x;
  161. for (int i = 0; i < ax; i++)
  162. {
  163. total += grid[i][0].Width - 1;
  164. }
  165. return total;
  166. }
  167. public virtual int getY(int ay, int y)
  168. {
  169. int total = y;
  170. for (int i = 0; i < ay; i++)
  171. {
  172. total += grid[0][i].Height - 1;
  173. }
  174. return total;
  175. }
  176. public virtual void  adjust(Point adjust)
  177. {
  178. int dx = adjust.X, dy = adjust.Y;
  179. for (int ay = 0; ay < grid[0].Length; ay++)
  180. {
  181. for (int ax = 0; ax < grid.Length; ax++)
  182. {
  183. for (int i = 0; i < grid[ax][ay].XLines.Length; i++)
  184. grid[ax][ay].XLines[i].translate(dx, dy);
  185. for (int j = 0; j < grid[ax][ay].YLines.Length; j++)
  186. grid[ax][ay].YLines[j].translate(dx, dy);
  187. }
  188. }
  189. }
  190. }
  191. }