有没有办法以一种可以保留原始值的方式操作曲面图的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是否有跟踪更改并可以恢复阵列的功能?
答案 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是一个用原始数据加载一次的静态属性。使用上面的代码完成任何更新