SamplingGrid.cs
资源名称:QRCodeLib.rar [点击查看]
上传用户:tjjgrl
上传日期:2019-04-04
资源大小:1010k
文件大小:4k
源码类别:
电子政务应用
开发平台:
C#
- using System;
- namespace ThoughtWorks.QRCode.Geom
- {
- /// <summary> This class is used for sampling grid
- /// It allows one area to have a different size from another area
- /// </summary>
- public class SamplingGrid
- {
- virtual public int TotalWidth
- {
- get
- {
- int total = 0;
- for (int i = 0; i < grid.Length; i++)
- {
- total += grid[i][0].Width;
- if (i > 0)
- total -= 1;
- }
- return total;
- }
- }
- virtual public int TotalHeight
- {
- get
- {
- int total = 0;
- for (int i = 0; i < grid[0].Length; i++)
- {
- total += grid[0][i].Height;
- if (i > 0)
- total -= 1;
- }
- return total;
- }
- }
- /// <summary> A grid for a single area</summary>
- private class AreaGrid
- {
- private SamplingGrid enclosingInstance;
- private Line[] xLine;
- private Line[] yLine;
- private void InitBlock(SamplingGrid enclosingInstance)
- {
- this.enclosingInstance = enclosingInstance;
- }
- virtual public int Width
- {
- get
- {
- return (xLine.Length);
- }
- }
- virtual public int Height
- {
- get
- {
- return (yLine.Length);
- }
- }
- virtual public Line[] XLines
- {
- get
- {
- return xLine;
- }
- }
- virtual public Line[] YLines
- {
- get
- {
- return yLine;
- }
- }
- public SamplingGrid Enclosing_Instance
- {
- get
- {
- return enclosingInstance;
- }
- }
- public AreaGrid(SamplingGrid enclosingInstance, int width, int height)
- {
- InitBlock(enclosingInstance);
- xLine = new Line[width];
- yLine = new Line[height];
- }
- public virtual Line getXLine(int x)
- {
- return xLine[x];
- }
- public virtual Line getYLine(int y)
- {
- return yLine[y];
- }
- public virtual void setXLine(int x, Line line)
- {
- xLine[x] = line;
- }
- public virtual void setYLine(int y, Line line)
- {
- yLine[y] = line;
- }
- }
- private AreaGrid[][] grid;
- public SamplingGrid(int sqrtNumArea)
- {
- grid = new AreaGrid[sqrtNumArea][];
- for (int i = 0; i < sqrtNumArea; i++)
- {
- grid[i] = new AreaGrid[sqrtNumArea];
- }
- }
- public virtual void initGrid(int ax, int ay, int width, int height)
- {
- grid[ax][ay] = new AreaGrid(this, width, height);
- }
- public virtual void setXLine(int ax, int ay, int x, Line line)
- {
- grid[ax][ay].setXLine(x, line);
- }
- public virtual void setYLine(int ax, int ay, int y, Line line)
- {
- grid[ax][ay].setYLine(y, line);
- }
- public virtual Line getXLine(int ax, int ay, int x)
- {
- return (grid[ax][ay].getXLine(x));
- }
- public virtual Line getYLine(int ax, int ay, int y)
- {
- return (grid[ax][ay].getYLine(y));
- }
- public virtual Line[] getXLines(int ax, int ay)
- {
- return (grid[ax][ay].XLines);
- }
- public virtual Line[] getYLines(int ax, int ay)
- {
- return (grid[ax][ay].YLines);
- }
- public virtual int getWidth()
- {
- return (grid[0].Length);
- }
- public virtual int getHeight()
- {
- return (grid.Length);
- }
- public virtual int getWidth(int ax, int ay)
- {
- return (grid[ax][ay].Width);
- }
- public virtual int getHeight(int ax, int ay)
- {
- return (grid[ax][ay].Height);
- }
- public virtual int getX(int ax, int x)
- {
- int total = x;
- for (int i = 0; i < ax; i++)
- {
- total += grid[i][0].Width - 1;
- }
- return total;
- }
- public virtual int getY(int ay, int y)
- {
- int total = y;
- for (int i = 0; i < ay; i++)
- {
- total += grid[0][i].Height - 1;
- }
- return total;
- }
- public virtual void adjust(Point adjust)
- {
- int dx = adjust.X, dy = adjust.Y;
- for (int ay = 0; ay < grid[0].Length; ay++)
- {
- for (int ax = 0; ax < grid.Length; ax++)
- {
- for (int i = 0; i < grid[ax][ay].XLines.Length; i++)
- grid[ax][ay].XLines[i].translate(dx, dy);
- for (int j = 0; j < grid[ax][ay].YLines.Length; j++)
- grid[ax][ay].YLines[j].translate(dx, dy);
- }
- }
- }
- }
- }