public static void Map2DNoZ(MappingMode mappingMode, Double[,] array, ImplicitModuleBase module, MappingRanges ranges)
{
var width = array.GetLength(0);
var height = array.GetLength(1);
for (var x = 0; x < width; ++x)
{
for (var y = 0; y < height; ++y)
{
var p = x / (double)width;
var q = y / (double)height;
double nx;
double ny;
double nz;
double dx;
double dy;
var val = 0.00;
switch (mappingMode)
{
case MappingMode.SeamlessNone:
nx = ranges.MapX0 + p*(ranges.MapX1 - ranges.MapX0);
ny = ranges.MapY0 + q*(ranges.MapY1 - ranges.MapY0);
val = module.Get(nx, ny);
break;
case MappingMode.SeamlessX:
dx = ranges.LoopX1 - ranges.LoopX0;
dy = ranges.MapY1 - ranges.MapY0;
p = p*(ranges.MapX1 - ranges.MapX0)/(ranges.LoopX1 - ranges.LoopX0);
nx = ranges.LoopX0 + Math.Cos(p*PI2)*dx/PI2;
ny = ranges.LoopX0 + Math.Sin(p*PI2)*dx/PI2;
nz = ranges.MapY0 + q*dy;
val = module.Get(nx, ny, nz);
break;
case MappingMode.SeamlessY:
dx = ranges.MapX1 - ranges.MapX0;
dy = ranges.LoopY1 - ranges.LoopY0;
q = q*(ranges.MapY1 - ranges.MapY0)/(ranges.LoopY1 - ranges.LoopY0);
nx = ranges.MapX0 + p*dx;
ny = ranges.LoopY0 + Math.Cos(q*PI2)*dy/PI2;
nz = ranges.LoopY0 + Math.Sin(q*PI2)*dy/PI2;
val = module.Get(nx, ny, nz);
break;
case MappingMode.SeamlessXY:
dx = ranges.LoopX1 - ranges.LoopX0;
dy = ranges.LoopY1 - ranges.LoopY0;
p = p*(ranges.MapX1 - ranges.MapX0)/(ranges.LoopX1 - ranges.LoopX0);
q = q*(ranges.MapY1 - ranges.MapY0)/(ranges.LoopY1 - ranges.LoopY0);
nx = ranges.LoopX0 + Math.Cos(p*PI2)*dx/PI2;
ny = ranges.LoopX0 + Math.Sin(p*PI2)*dx/PI2;
nz = ranges.LoopY0 + Math.Cos(q*PI2)*dy/PI2;
double nw = ranges.LoopY0 + Math.Sin(q*PI2)*dy/PI2;
val = module.Get(nx, ny, nz, nw);
break;
}
array[x, y] = val;
}
}
}