LightningChart数据可视化图形控件使用篇36-3D模型空间中的·SurfaceGridSeries3D

472 阅读7分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

SurfaceGridSeries3D

演示示例: Simple 3D surface grid; Surface grid, flat projections; Surface grid, value coloring; Surface grids, water and ground

SurfaceGridSeries3D 可以将数据可视化为一个3D面。在SurfaceGridSeries3D中, 节点在X维度上是等距的,在Z维度上也是如此。

微信截图_20220516144944.png 图:采用默认样式的面网格系列。高度数据用正弦公式表示。图例框显示高度着色间隔。

微信截图_20220516145016.png 图:面网格节点。SizeX = 5, SizeZ = 7.

节点距离自动计算如下:

微信截图_20220516145052.png

设置面网格数据

• 用RangeMinX 和RangeMaxX 属性来设置X轴值域,根据指定的X轴对最小值和最大值排序。

• 用 RangeMinZ 和RangeMaxZ 属性来设置Z轴值域,根据指定的Z轴对最小值和最大值排序。

• 设置SizeX 和SizeZ 属性,将网格的尺寸大小设置为以列和行表示。

• 为所有节点设置 Y值:

采用数据数组索引的方法

for (int nodeIndexX = 0; nodeIndexX < columnCount; nodeIndexX ++)
{
        for (int nodeIndexZ = 0; nodeIndexZ < rowCount; nodeIndexZ ++)
        {
            Y =//一些高度值
            gridSeries.Data[iNodeX, iNodeZ].Y = Y;
        }
}
gridSeries.InvalidateData(); // 准备好新值后通知刷新

采用SetDataValue的另一种方法

for (int nodeIndexX = 0; nodeIndexX < columnCount; nodeIndexX ++)
{
        for (int nodeIndexZ = 0; nodeIndexZ < rowCount; nodeIndexZ ++)
        {
            Y =//一些高度值
            gridSeries.SetDataValue(nodeIndexX, nodeIndexX,
                    0, // X值与网格无关
                    Y,
                    0,// Z值与网格无关 Color.Green); //本例中没有使用源点颜色,所以这里用什么颜色都行
        }
}
gridSeries.InvalidateData(); // 准备好新值后通知刷新

根据位图文件创建曲面

演示示例: Large surface

用SetHeightDataFromBitmap方法可根据位图图像来创建曲面。面可获得位图尺寸(若没有使用反锯齿或重新采样)。对于每个位图图像像素,对红色、绿色和蓝色值求和。和越大,该节点的高度数据值就越高。黑色与暗色的值较低,而明亮和白色的值较高。

微信截图_20220516145352.png 图:源位图与计算所得的曲面高度数据。暗色值较低,而亮色值较高。

填充样式

用Fill 属性来选择曲面的填充样式。可以使用以下选项:

• None: 使用此选项,不进行填充。这一选项对线框网眼很有用。

• FromSurfacePoints: 使用数据属性节点的颜色。

• Toned: 应用ToneColor

• PalettedByY: 根据调色板按Y值着色,参阅后续Error! Reference source not found.章节

• PalettedByValue: 根据调色板按SurfacePoint's Value 字段着色,参阅后续Error! Reference source not found.章节

• Bitmap: 将位图图像拉伸来覆盖整个曲面。在BitmapFill属性中对位图图像进行设置。属性具有子属性可用于进行垂直和水平镜像。

微信截图_20220516145505.png 左图:FromSurfacePoints 填充;每个数据点的颜色。 右图:Toned 填充.

微信截图_20220516145600.png 左图:PalettedByY 右图:Bitmap 填充.

微信截图_20220516145648.png 图:PalettedByValue.

轮廓调色板

ContourPalette 属性可以为高度着色定义颜色阶。ContourPalette 可用于:

• Fill (参阅第 Error! Reference source not found.章节)

• Wireframe mesh (参阅第 Error! Reference source not found.章节)

• Contour lines (参阅第 Error! Reference source not found.章节)

为轮廓调色板可以定义无限数量的色阶。每一阶都有一个高度值以及一个对应的颜色。

调色板包括MinValue、Type 和Steps 属性。Type属性包括两个选择: Uniform 和Gradient。图7-39的轮廓调色板显示了如下信息:

• MinValue: 0

• Type: Gradient (渐变)

• Steps:

• [0]阶: MaxValue(最大值): 25, Color(颜色): Red红色 • [1] 阶: MaxValue(最大值): 50, Color(颜色): Blue蓝色 • [2] 阶: MaxValue(最大值): 75, Color(颜色): Lime绿黄色 • [3] 阶: MaxValue(最大值): 100, Color(颜色): White白色 使用第一阶的颜色给第一阶值下面的高度值着色。

微信截图_20220516145824.png 图:曲面网格系列轮廓调色板样式(Type)设置为渐变(Gradient)。

线框网眼

用WireframeType 来选择线框样式。选项有:

• None: 无线框

• Wireframe: 一个纯色线框。可以用 WireframeLineType.Color 来设置颜色。

• WireframePalettedByY: 线框着色依据SurfacePoint的Y字段ContourPalette进行(参阅第 Error! Reference source not found.章节)

• WireframePalettedByY: 线框着色依据SurfacePoint的Value字段ContourPalette进行(参阅第 Error! Reference source not found.章节)

• WireframeSourcePointColored: 线框着色依据曲面节点的颜色进行

• Dots: 在节点位置绘制纯色点。

• DotsPalettedByY: 在节点位置绘制点,并根据SurfacePoints 的Y字段按照ContourPalette来着色。

• DotsPalettedByValue: 在节点位置绘制点,并根据SurfacePoints的Value字段按照ContourPalette来着色。

• DotsSourcePointColored: 在节点位置绘制点,依据曲面节点颜色来着色

线框线条样式(color、width、pattern)可通过WireframeLineStyle来编辑。

注意! 调色板彩色线框线和点可能与 WireframeLineStyle.Patternsettings 冲突,例如线框设置为 Dots 的 Dash 线条样式。 请在其中一个中使用实线。

微信截图_20220516145931.png 左图:WireframeType = Wireframe. 右图:WireframeType = WireframePalettedByY.

微信截图_20220516150019.png 左图:WireframeType = SourcePointColored. 右图:WireframeType = Dots.

微信截图_20220516150058.png 左图:WireframeType = DotsPalettedByY. 右图:WireframeType = DotsSourcePointColored.

线框与填充同时使用的注意事项

当在3D模型中同样的位置绘制填充与线框时,可能会出现深度冲突(Z-Fighting)现象。这可以看成是线框线条中断。这是因为GPU不可能判断出哪个对象更靠近摄像头。

微信截图_20220516150217.png 图:采用填充的曲面网格线框。Z-fighting看上去像断损的线框线条。

为避免出现Z-fighting现象 ,可使用 WireframeOffset 或DrawWireframeThrough 属性。利用 WireframeOffset,可在3D模型空间中轻微移动线框。 DrawWireframeThrough 通过填充来绘制线框,无论该表面的部分是否对摄像头可见。

微信截图_20220516150501.png 左图:WireframeOffset = (X=0; Y=0.1; Z=0). 右图:DrawWireframeThrough开启.

轮廓线

轮廓线可以快速表明高度数据,而不用采取调色板填充来填充曲面。轮廓线可以与填充线框结合使用。通过设置 ContourLineType 属性,可以用不同的样式来绘制轮廓线:

• None: 不显示轮廓线

• FastColorZones: 轮廓线可绘制为细的直立带。这可以进行非常强的渲染,很适合不断更新或动画表面。陡峭的高度变化以细线表示,平缓倾斜的高度差以粗线表示。所有线条都使用由ContourLineStyle.Color属性定义的同样颜色。带的高度可以用FastContourZoneRange属性来设置。

• FastPalettedZones: 和FastColorZones类似, 但是线条着色是依据ContourPalette 选项进行(参阅本文轮廓调色板章节)。

• ColorLineByY 和ColorLineByValue: 轮廓线是由实际线制成的。渲染用时比FastColorZones久。 线条宽度可以用ContourLineStyle.Width属性来调节。轮廓线也能用WireframeOffset 属性进行移位,以消除填充时可能出现的Z-fighting现象。

• PalettedLineByY 和PalettedLineByValue: 与ColorLineByY 和ColorLineByValue类似,但是线条着色依据 ContourPalette 选项进行(参阅本文轮廓调色板章节)。

微信截图_20220516150719.png 左图:ContourLineType = FastColorZones. 右图:ContourLineType = FastPalettedZones.

微信截图_20220516150814.png 左图:ContourLineType = ColorLine. 右图:ContourLineType = PalettedLine.

微信截图_20220516150918.png 图:ContourLineType = PalettedLineByValue.

消退

演示示例: Spectrum 3D

SurfaceGridSeries3D、SurfaceMeshSeries3D 和WaterfallSeries3D 具有一种 FadeAway 属性,可以将系列向图表的后部淡出。 Fadeaway 是以百分比计算,有效范围从0 (默认值,无消退)到 100 (完全消退)。值越高,具有高Z值的数据越透明。

滚动曲面数据

演示示例: Spectrogram

SurfaceGridSeries3D 和SurfaceMeshSeries3D 具有InsertRowBackAndScroll 和InsertColumnBackAndScroll 方法,可用于性能优化的定期数据添加。他们在曲面系列的数据表中插入一个新的数据行或列,同时丢掉最早的值,即除去第一个数据行。思考一下下面的3D光谱显示(图6-54)。新的FFT值作为一个新行添加(靠近摄像头),并滚动旧数据与时间轴(Z轴)。最早的曲面值必须丢弃掉。

InsertRowBackAndScroll 和InsertColumnBackAndScroll 将新数据作为双数组,但也需要为曲面系列和滚动轴设置新的最小值和最大值(Z 维度/轴用InsertRowBackAndScroll ,X 维度/轴用 InsertColumnBackAndScroll). 这种不断调整的系列和轴的范围,使滚动发挥作用。

微信截图_20220516151059.png 用曲面网格表示3D光谱。InsertRowBackAndScroll 方法用于性能优化的数据添加。Fadeaway 属性设为100 ,使表面平滑地向图表的后部消退。采用的是透视摄像头。

微信截图_20220516151133.png 图:采用表面网格的光谱图。采用的是 InsertColumnBackAndScroll 方法。在模型上方的正投摄像头给出了连续垂直的投影。 SuppressLighting开启后可移除不需要的光反射。设置Fadeaway = 0可让网格系列完全可见。

关于LightningChart数据可视化图形控件使用篇36-3D模型空间中的·SurfaceGridSeries3D章节就分享到这里了。

如果在实际应用中遇到技术问题或需要帮助,可以添加下方微信号联系官方技术支持。

微信号:lightningchart_china

如果您想进一步使用LightningChart数据可视化图形控件,请添加后回复“学习”可免费领取一套全功能版LightningChart数据可视化控件。

后续我会不断更新LightingChart更详细的使用方法,写文不易,还望多多回复关注支持!谢谢!

最新版V10 LightningChart下载地址:猛击下载