public CubicGrid(int3 dimensions) { Dimensions = dimensions; DimensionSet = GetDimensions(Dimensions); Values = new float[dimensions.Elements()]; }
private static IntPtr MakeEinspline(float[] values, int3 dims, float3 margins) { DimensionSets DimSet = GetDimensions(dims); switch (DimSet) { case DimensionSets.XYZ: return(CPU.CreateEinspline3(values, dims, margins)); case DimensionSets.XY: return(CPU.CreateEinspline2(values, new int2(dims.X, dims.Y), new float2(margins.X, margins.Y))); case DimensionSets.XZ: return(CPU.CreateEinspline2(values, new int2(dims.X, dims.Z), new float2(margins.X, margins.Z))); case DimensionSets.YZ: return(CPU.CreateEinspline2(values, new int2(dims.Y, dims.Z), new float2(margins.Y, margins.Z))); case DimensionSets.X: return(CPU.CreateEinspline1(values, dims.X, margins.X)); case DimensionSets.Y: return(CPU.CreateEinspline1(values, dims.Y, margins.Y)); case DimensionSets.Z: return(CPU.CreateEinspline1(values, dims.Z, margins.Z)); case DimensionSets.None: return(IntPtr.Zero); } return(IntPtr.Zero); }
public CubicGrid(int3 dimensions, float[] values, bool centeredSpacing = false) { Dimensions = dimensions; DimensionSet = GetDimensions(Dimensions); if (centeredSpacing) { Margins = new float3(1f / Dimensions.X, 1f / Dimensions.Y, 1f / Dimensions.Z) / 2; if (Dimensions.X == 1) { Margins.X = 0; } if (Dimensions.Y == 1) { Margins.Y = 0; } if (Dimensions.Z == 1) { Margins.Z = 0; } } Values = new float[dimensions.Elements()]; Array.Copy(values, Values, (int)Dimensions.Elements()); Einspline = MakeEinspline(Values, Dimensions, Margins); }
public CubicGrid(int3 dimensions, float[] values, float3 margins) { Dimensions = dimensions; DimensionSet = GetDimensions(Dimensions); Margins = margins; Values = new float[dimensions.Elements()]; Array.Copy(values, Values, (int)Dimensions.Elements()); Einspline = MakeEinspline(Values, Dimensions, Margins); }
public CubicGrid(int3 dimensions, float valueMin, float valueMax, Dimension gradientDirection, bool centeredSpacing = false) { Dimensions = dimensions; DimensionSet = GetDimensions(Dimensions); if (centeredSpacing) { Margins = new float3(1f / Dimensions.X, 1f / Dimensions.Y, 1f / Dimensions.Z) / 2; if (Dimensions.X == 1) { Margins.X = 0; } if (Dimensions.Y == 1) { Margins.Y = 0; } if (Dimensions.Z == 1) { Margins.Z = 0; } } float Step = valueMax - valueMin; if (gradientDirection == Dimension.X) { Step /= Math.Max(1, dimensions.X - 1); } else if (gradientDirection == Dimension.Y) { Step /= Math.Max(1, dimensions.Y - 1); } else if (gradientDirection == Dimension.Z) { Step /= Math.Max(1, dimensions.Z - 1); } Values = new float[dimensions.Elements()]; for (int z = 0; z < dimensions.Z; z++) { for (int y = 0; y < dimensions.Y; y++) { for (int x = 0; x < dimensions.X; x++) { float Value = valueMin; if (gradientDirection == Dimension.X) { Value += x * Step; } if (gradientDirection == Dimension.Y) { Value += y * Step; } if (gradientDirection == Dimension.Z) { Value += z * Step; } Values[(z * Dimensions.Y + y) * Dimensions.X + x] = Value; } } } Einspline = MakeEinspline(Values, Dimensions, Margins); }