ILNumerics ILSurface调整Z值

时间:2016-02-17 19:39:52

标签: ilnumerics

有没有办法以一种可以保留原始值的方式操作曲面图的Z值范围,这样我就可以使用GetLimits()方法创建一个带有最小值和最大值的范围滑块,然后更新数据数组Z值,所以我可以设置新的限制,但前后移动幻灯片调整最小/最大Z值,看看情节如何调整?

鉴于此代码

            ILArray<float> tempArray = ILMath.tosingle(myDoubleArray);

            dataArray.a = tempArray;

            var plotCube = ilPanel1.Scene.First<ILPlotCube>();
            var surface =  plotCube.First<ILFastSurface>();

            surface.Update(Z: dataArray, colormap: new ILColormap(ILColormaps.ILNumerics));
            ilPanel1.Refresh();

MinValue和MaxValue控件初始化如下。

            float maxZ, minZ;
            dataArray.GetLimits(out minZ, out maxZ);
            var zRange = maxZ - minZ;

            MinValue.Maximum = (decimal)maxZ;
            MinValue.Minimum = (decimal)minZ;
            MinValue.Value = (decimal)minZ;

            MaxValue.Maximum = (decimal)maxZ;
            MaxValue.Minimum = (decimal)minZ;
            MaxValue.Value = (decimal)maxZ;

我希望能够像这样操作数组中的Z值

        dataArray[dataArray < (float)MinValue.Value] = (float)MinValue.Value;
        dataArray[dataArray > (float)MaxValue.Value] = (float)MaxValue.Value;

        var plotCube = ilPanel1.Scene.First<ILPlotCube>();
        var surface = plotCube.First<ILFastSurface>();

        surface.Update(Z: dataArray, colormap: new ILColormap(ILColormaps.ILNumerics));
        ilPanel1.Refresh();

问题是dataArray正在使用新的最小/最大值进行更改。如果要更改回更大的最小值/最大值,如何还原dataArray?我只是克隆dataArray并使用它来改变情节吗?或者ILArray是否有跟踪更改并可以恢复阵列的功能?

1 个答案:

答案 0 :(得分:1)

此问题的解决方案是使用临时数组并克隆原始数组,然后规范化临时数组并使用它更新表面。

        float min = surface.GetRangeMinValue(AxisNames.CAxis) + minOffs;
        float max = surface.GetRangeMaxValue(AxisNames.CAxis) + maxOffs;

         ILArray<float> tempArray = _dataArray.C;
        tempArray[tempArray < min] = min;
        tempArray[tempArray > max] = max;

        surface.Update(Z: tempArray);

_dataArray是一个用原始数据加载一次的静态属性。使用上面的代码完成任何更新