为了测试目的,我的全部源代码都是这里,包括block.vtu文件。我将在这里讨论重要的功能。
此代码可着色*.vtp,*.vtk。但是相同的代码不能为*.vtu着色。
我有vtkactors的列表。并指定要从哪个参与者设置属性。
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'...]
}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); //even tried with and without inserting second tuple
}
}
output.GetPointData().SetScalars(colors); //even tried with GetCellData(), but no luck
}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(); // new double[] { min, max }
}
}
return null;
}VTP和VTK的实际产出(良好):
结果很好。这就是我的代码显示钻孔的方式。

VTU的预期产出(好):
看看它的颜色。这就是PARAVIEW软件所能展示的:

VTU的实际产出(坏):
我的代码就是这样显示模型的:

我也试过:
我试着跟踪问题,但是vtu的颜色没有影响。我也尝试过单元数据而不是点数据。我还试过查找表,它用颜色标尺显示,但对模型颜色没有影响。
奇怪的是:
发布于 2022-08-16 07:50:37
我不确定这是否是一个合适的解决方案,但是如果您在setColors函数的末尾创建一个新的映射器,它可能会工作。
output.GetPointData().SetScalars(colors);
+ vtkDataSetMapper mapper = vtkDataSetMapper.New();
+ mapper.SetInput(output);
+ actor.SetMapper(mapper);
}https://stackoverflow.com/questions/73247453
复制相似问题