有没有一种方法可以以可以保留原始值的方式来操纵表面图的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/