www.pudn.com > QRCodeLib.rar > SamplingGrid.cs, change:2007-06-08,size:4228b

```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;
}
}

}
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;
}
}

}

/// <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;
}
}

public virtual int getY(int ay, int y)
{
int total = y;
for (int i = 0; i < ay; i++)
{
total += grid[0][i].Height - 1;
}
}

{