欢迎加入我的VTK社区 雪易VTK社区-CSDN社区云
前言:在研究3-matic软件中smooth Edge和Local Smoothing功能时,先对数据的网格进行了重新的划分,即3-matic软件中的Remesh功能。本博文主要针对Remesh进行展开。
目录
网格质量
vtkMeshQuality
vtkCellQuality
网格质量
网格质量是影响模型好坏的重要因素,vtk中提供了两种质量相关接口vtkCellQuality/vtkMeshQuality。
vtkMeshQuality
描述:
vtkMeshQuality为网格的每个2-D和3-D单元(三角形、四边形、四面体或六面体)计算一个或多个(几何)质量函数。然后在整个网格上平均这些质量函数。每种类型单元格的最小值、平均值、最大值和无偏方差都存储在输出网格的FieldData中。FieldData数组被命名为“网格三角形质量”、“网格四边形质量”、“网格四面体质量”和“网格六面体质量”。每个数组都有一个包含5个组件的元组。前4个组成部分是上面提到的质量统计;最后的值是给定类型的单元格数。最后一个组件使分布式网格数据的统计信息聚合成为可能。
默认情况下,每个单元格的质量被添加到网格的单元格数据中,在一个名为“quality”的数组中。此筛选器不支持的单元格类型的条目为0。使用SaveCellQualityOff()只存储最终的统计数据。
示例
vtkSmartPointer<vtkSphereSource> sphereSource =
vtkSmartPointer<vtkSphereSource>::New();
sphereSource->Update();
vtkSmartPointer<vtkTriangleFilter> triangleFilter =
vtkSmartPointer<vtkTriangleFilter>::New();
triangleFilter->SetInputConnection(sphereSource->GetOutputPort());
triangleFilter->Update();
vtkPolyData* mesh = triangleFilter->GetOutput();
std::cout << "There are " << mesh->GetNumberOfCells() << " cells." << std::endl;
vtkSmartPointer<vtkMeshQuality> qualityFilter =
vtkSmartPointer<vtkMeshQuality>::New();
qualityFilter->SetInputData(mesh);
qualityFilter->SetTriangleQualityMeasureToArea();
qualityFilter->Update();
vtkSmartPointer<vtkDoubleArray> qualityArray =
dynamic_cast<vtkDoubleArray*>(qualityFilter->GetOutput()->GetCellData()->GetArray("Quality"));
std::cout << "There are " << qualityArray->GetNumberOfTuples() << " values." << std::endl;
for(vtkIdType i = 0; i < qualityArray->GetNumberOfTuples(); i++)
{
double val = qualityArray->GetValue(i);
std::cout << "value " << i << " : " << val << std::endl;
}
vtkSmartPointer<vtkPolyData> polydata =
vtkSmartPointer<vtkPolyData>::New();
polydata->ShallowCopy(qualityFilter->GetOutput());
vtkCellQuality
描述:
vtkCellQuality为网格的每个单元计算一个或多个(几何)质量函数。每个单元格的质量被添加到网格的单元格数据中,在一个名为“CellQuality”的数组中。此过滤器不支持的单元格类型或支持的单元格类型的未定义质量将具有-1的条目。
Remesh
介绍3-matic中的集中Remesh的方法:Adaptive Remesh,
Adaptive Remesh
Adaptive Remesh允许在保留实体几何形状的同时对其进行Remesh。与Uniform Remesh相比,该工具对生成的网格提供了更精细的控制,甚至可以将网格限制在一个感兴趣的小区域;然而,根据参数的不同,结果可能并不一致。