如何在VTK中为非结构化网格(.vtu)着色?代码执行异常
VTK中VTU模型着色失败排查
完整源代码及测试用block.vtu文件已准备好,以下是关键函数说明:
1. 获取Actor所有列名
public static List<string> getColumns(int actorIndex) { List<string> colums = new List<string>(); vtkActor actor = actors[actorIndex]; var output = actor.GetMapper().GetInputAsDataSet(); var cell = output.GetCellData(); for (int i = 0; i < cell.GetNumberOfArrays(); i++) { var colm = cell.GetArrayName(i); if (colm != null) colums.Add(colm); } return colums; // 返回列名列表,如['CU_OK','D1','Domain','IJK','IX','IY'...] }
2. 为指定列给模型着色
public static void setColors(int actorIndex, string column) { List<string> colums = new List<string>(); vtkActor actor = actors[actorIndex]; var output = actor.GetMapper().GetInputAsDataSet(); var colors = vtkUnsignedCharArray.New(); colors.SetNumberOfComponents(3); colors.SetName("Colors"); var cell = output.GetCellData(); for (int i = 0; i < cell.GetNumberOfArrays(); i++) { var cells = cell.GetArray(i); if (cells == null) continue; if (column != cell.GetArrayName(i)) continue; for (int j = 0; j < cells.GetNumberOfTuples(); j++) { var c = color_range((cells.GetComponent(i, j) / cell.GetArray(i).GetRange()[1]) * 100); var R = c.R; var G = c.G; var B = c.B; colors.InsertNextTuple3((double)R, (double)G, (double)B); colors.InsertNextTuple3((double)R, (double)G, (double)B); // 试过加/不加这一行,都没用 } } output.GetPointData().SetScalars(colors); // 试过换成GetCellData(),依然无效 }
3. 获取指定列的数值范围(min, max)
public static double[] getRange(int actorIndex, string column) { List<string> colums = new List<string>(); vtkActor actor = actors[actorIndex]; var output = actor.GetMapper().GetInputAsDataSet(); var cell = output.GetCellData(); for (int i = 0; i < cell.GetNumberOfArrays(); i++) { var colm = cell.GetArrayName(i); var arr = cell.GetArray(i); if (column == colm) { if (arr == null) return null; return arr.GetRange(); // 返回{min, max}数组 } } return null; }
问题现象
- .vtp与.vtk文件着色效果正常(示例:彩色钻孔模型)
- .vtu文件无法正常着色:预期效果为ParaView中显示的彩色块模型,但实际仅显示无彩色的模型
- 所有.vtp文件着色正常,所有.vtu文件均失败,且.vtu文件在ParaView中可正常显示彩色
已尝试的解决方法
参考相关问题、切换Cell Data/Point Data、使用查找表等,均未解决问题。
内容的提问来源于stack exchange,提问作者softycode
相关产品推荐
相关产品推荐

