Ejemplo n.º 1
0
        public CubicGrid(int3 dimensions)
        {
            Dimensions   = dimensions;
            DimensionSet = GetDimensions(Dimensions);

            Values = new float[dimensions.Elements()];
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }