1.Python Calculator过滤器
表达式(expression):
volume(inputs[0])
Array Association:
Cell Data
2.vtkCellSizeFilter
- @brief计算单元格大小。
- 计算VTK中所有类型单元格的单元格大小。对于三角形、四边形、四角形和六角形,使用vtkMeshQuality中的静态方法。
- 为了更高的准确性,这是通过Verdict来实现的。
- 其他类型的Cell在可能的情况下单独进行分析,在不可能的情况下分解成三角形或四角形。当细胞分裂成三角形或四角形时,精确度可能会降低。默认情况下,会计算所有大小(但可以选择忽略):顶点计数、长度、面积和体积单元。每个请求的大小都使用单独的数组(例如,如果请求长度和体积,则将从该筛选器输出两个数组)。这4个数组可以单独命名,默认值为VertexCount、Length、Area和Volme。对于未计算大小的单元格尺寸,将给出0的值。
- 对于应该计算大小但无法计算的单元格,过滤器将返回-1。
- ComputeSum选项将对单元格大小(不包括重影单元格)求和,并将值放入以相应单元格数据数组名称命名的vtkFieldData数组中。对于复合数据集,所有数据块的总和也将添加到顶层数据块的字段数据中进行总和。
相关过滤器:vtkPCellSizeFilter
std::string inputname = "test.vtu";
vtkSmartPointer<vtkXMLUnstructuredGridReader> inputReader = vtkSmartPointer<vtkXMLUnstructuredGridReader>::New();
inputReader->SetFileName(inputname.c_str());
inputReader->Update();
vtkNew<vtkCellSizeFilter> filter;
filter->SetInputConnection(inputReader->GetOutputPort());
//filter->ComputeSumOn();
//filter->ComputeVolumeOn();
filter->Update();
vtkDoubleArray* vertexCount = vtkDoubleArray::SafeDownCast(
vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("VertexCount"));
vtkDoubleArray* length = vtkDoubleArray::SafeDownCast(
vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("Length"));
vtkDoubleArray* area = vtkDoubleArray::SafeDownCast(
vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("Area"));
vtkDoubleArray* volume = vtkDoubleArray::SafeDownCast(
vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("Volume"));
vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid= vtkUnstructuredGrid::SafeDownCast(filter->GetOutput());
vtkCellData* cell = unstructuredGrid->GetCellData();
vtkDoubleArray* volume = vtkDoubleArray::SafeDownCast(cell->GetArray("Volume"));
vtkSmartPointer <vtkXMLUnstructuredGridWriter> polyWriter = vtkSmartPointer <vtkXMLUnstructuredGridWriter>::New();
polyWriter->SetFileName("mycellsize.vtu");
polyWriter->SetInputData(unstructuredGrid);
polyWriter->SetDataModeToAscii();
polyWriter->Write();
3. vtkMeshQuality
vtkMeshQuality
您可以尝试使用SettQualityMeasureToVolume(或类似函数)
@class vtkMeshQuality
@brief计算网格元素的质量函数
vtkMeshQuality为网格的每个二维和三维单元(三角形、四边形、四面体或六面体)计算一个或多个(几何)质量函数。
然后在整个网格上平均这些质量函数。每种类型单元的最小、平均、最大和无偏质量方差存储在输出网格的FieldData中。
FieldData阵列被命名为“网格三角形质量”、“网格四边形质量”、“网格四面体质量”和“网格六面体质量”每个数组都有一个包含5个组件的元组。前4个组成部分是上述质量统计数据;最终值是给定类型的单元格数。最后一个组件使分布式网格数据的统计数据聚合成为可能。
默认情况下,每个单元的质量将添加到网格的单元数据中,该数据位于名为“质量”的数组中不支持的单元格类型
此筛选器的条目为0。使用SaveCellQualityOff()仅存储最终统计信息。
菲利普·佩贝(Philippe Pebay)和大卫·汤普森(David Thompson)编写的这个版本的滤镜超过了罗巴特研究所成像研究实验室的莱拉·巴格达迪(Leila Baghdadi)、哈尼夫·拉达克(Hanif Ladak)和大卫·斯坦曼(David Steinman)编写的旧版本。
该版本只支持四面体半径比。请参阅CompatibilityModeOn()成员,了解如何使此筛选器的行为与之前的实现类似的信息。
有关此类三角形质量函数的更多信息,请参阅Pebay&Baker 2003,三角形质量度量分析,数学综合72:244。
有关此类四边形质量函数的更多信息,请参阅Pebay 2004,《平面四边形质量度量》,英文版20:2。
@警告
虽然比以前更一般,但这个类并没有处理许多单元类型,包括3D中的楔形和棱锥体,2D中的三角形带和扇形(等等)。
大多数四边形质量函数仅适用于平面四边形。
严格来说,最小角度不是一个质量函数,但它之所以被提供,是因为许多作者使用了它。