有没有一种方法可以以可以保留原始值的方式来操纵表面图的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具有跟踪更改并可以恢复阵列的功能?

最佳答案

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

        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是一次将原始数据加载的静态属性。任何更新都是通过上面的代码完成的

关于ilnumerics - ILNumerics ILSurface调整Z值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35466145/

10-14 21:18