AMCAX Kernel
Geometry kernel for CAD/CAE/CAM
九韶内核 1.0.0.0
载入中...
搜索中...
未找到
网格尺寸控制示例

概述

本教程提供了网格剖分中多种局部尺寸场的详细配置方法,用于控制生成网格的尺寸。

功能描述

  • 通过设置局部尺寸场控制网格尺寸,如依据曲率或狭窄区域自适应计算网格尺寸,或人为指定某区域尺寸等。
  • 支持多种局部尺寸场,json文件的基类为LocalSizeField,其中的成员函数有:AutomaticField,MaxField, MinField,BallField,BoxField,CylinderField,DistanceField,ThresholdField,RestrictField。

局部尺寸场设置

  • 可设置多个局部尺寸场,只能设置一个背景场,背景场将用于控制全局的网格尺寸。
  • DistanceField一般与ThresholdField一起使用。
  • 如果尺寸场设置出现循环依赖问题,程序中将断言禁止。 如MinField调用RestrictField,RestrictField调用ThresholdField,ThresholdField调用MinField。MinField->RestrictField->ThresholdField->MinField

Json 模板示例

{
"MeshSize": [
{
"MaxSize": 5,
"MinSize": 0.5,
"GrowthRate": 1.4,
"MeshingDim": 2,
"SelectedEntities": []
}
],
"LocalSizeField": {
"BGField": 1,
"AutomaticField": {
"CurvatureFactor": 0.5,
"NarrowRegionResolution2D": 1.0,
"NarrowRegionResolution3D": 0.5,
"GrowthRate": 1.4,
"Tag": 1
},
"MinField": {
"SelectedFieldTags": [
4,
6,
7
],
"Tag": 2
},
"MaxField": {
"SelectedFieldTags": [
4,
6,
7
],
"Tag": 3
},
"BallField": [
{
"Center": [
11.0,
13.0,
15.5
],
"Radius": 20.0,
"InterLocSize": 1,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 4
},
{
"Center": [
11.0,
13.0,
15.5
],
"Radius": 20.0,
"InterLocSize": 1,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 5
}
],
"BoxField": [
{
"MinPoint": [
0.0,
0.0,
0.0
],
"MaxPoint": [
20.0,
20.0,
20.0
],
"InterLocSize": 1.0,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 6
}
],
"CylinderField": [
{
"Center": [
0.0,
0.0,
0.0
],
"Axis": [
0.0,
0.0,
1.0
],
"Radius": 20.0,
"InterLocSize": 1,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 7
}
],
"DistanceField": [
{
"SelectedVertexTags": [
0,
1,
2
],
"SelectedEdgeTags": [
69,
73
],
"SelectedFaceTags": [
20,
48
],
"SelectedSolidTags": [],
"Tag": 8
}
],
"ThresholdField": [
{
"MinDist": 5.0,
"MaxDist": 10.0,
"MaxSize": 5.0,
"MinSize": 1.0,
"SelectedFieldTag": 8,
"Tag": 9
}
],
"RestrictField": [
{
"IsBoundary": true,
"SelectedVertexTags": [
0,
1,
2
],
"SelectedEdgeTags": [
73
],
"SelectedFaceTags": [
20
],
"SelectedSolidTags": [],
"SelectedFieldTag": 8,
"Tag": 10
}
]
}
}
是否必需 取值范围 默认值 备注
LocalSizeField BGField 【1, inf】整数类型 1 其值为局部尺寸场的Tag,即选择该尺寸场做为背景尺寸场
LocalSizeField AutomaticField 依据曲率和狭窄区域自动计算全局的网格尺寸
AutomaticField CurvatureFactor 【0, inf】 0.5 依据是否设置判断是否启动曲率计算尺寸,其值越小在高曲率区域尺寸越小,网格越密集
AutomaticField NarrowRegionResolution2D 【0, inf】 1 依据是否设置判断是否依据2D狭窄区域(几何曲面自身的狭窄区域)计算尺寸,其值代表狭窄区域内网格的层数,越大狭窄区域的网格越密集
AutomaticField NarrowRegionResolution3D 【0, inf】 1 依据是否设置判断是否依据3D狭窄区域(几何曲面间的狭窄区域)计算尺寸,其值代表狭窄区域内网格的层数,越大狭窄区域的网格越密集
AutomaticField GrowthRate 【1, inf】 1.4 自动尺寸场尺寸间允许的增长率
AutomaticField Tag 【1,inf】整数类型 1 当前尺寸场的Tag(不能与其它尺寸场Tag重复)

LocalSizeField MinField 【1,inf】整数类型 从所有输入的尺寸场中取尺寸最小值
MinField SelectedFieldTags 【1,2,3...】 —— 输入用来取尺寸最小值的尺寸场Tag,注意,输入的尺寸场必须存在

MinField Tag 【1,inf】整数类型 1 当前尺寸场的Tag

LocalSizeField MaxField 从所有输入的尺寸场中取尺寸最大值
MaxField SelectedFieldTags 【1,2,3...】 —— 输入用来取尺寸最大值的尺寸场Tag,注意,输入的尺寸场必须存在
MaxField Tag 【1,inf】整数类型 1 当前尺寸场的Tag
LocalSizeField BallField 指定规定球内的尺寸值
BallField Center 任意三维坐标 —— 球心坐标,三个浮点数
BallField Radius 【0,inf】 0.0 球半径
BallField InterLocSize 【0,inf】 0.0 球内部的尺寸值
BallField OutLocSize 【0,inf】 0.0 球外部尺寸值
BallField Thickness 【0,inf】 0.0 球边界过渡层,即从球面向外扩张一层,这一层的尺寸通过InterLocSize和OutLocSize插值而来,设置Thickness则必须设置OutLocSize
BallField Tag 【1,inf】整数类型 1 当前尺寸场的Tag
LocalSizeField BoxField 指定规定立方体内的尺寸值,依据最小最大端点确定立方体
BoxField MinPoint 任意三维坐标 —— 立方体最小端点
BoxField MaxPoint 任意三维坐标 —— 立方体最大端点
BoxField InterLocSize 【0,inf】 0.0 立方体内部尺寸值
BoxField OutLocSize 【0,inf】 0.0 立方体外部尺寸值
BoxField Thickness 【0,inf】 0.0 立方体边界过渡层,与BallField类似。设置Thickness则必须设置OutLocSize
BoxField Tag 【1,inf】整数类型 1 当前尺寸场的Tag
LocalSizeField CylinderField 指定规定圆柱内的尺寸值
CylinderField Center 任意三维坐标 —— 圆柱中心坐标,三个浮点数
CylinderField Axis 任意三维非零向量 —— 圆柱轴,三个浮点数
CylinderField Radius 【0,inf】 0.0 圆柱半径
CylinderField InterLocSize 【0,inf】 0.0 圆柱内部的尺寸
CylinderField OutLocSize 【0,inf】 0.0 圆柱外部的尺寸
CylinderField Thickness 【0,inf】 0.0 圆柱边界过渡层,与BallField类似。设置Thickness则必须设置OutLocSize
CylinderField Tag 【1,inf】整数类型 1 当前尺寸场的Tag
LocalSizeField DistanceField 与输入的几何形状(点,边,面,体)的距离作为尺寸,通常与ThresholdField结合使用
DistanceField SelectedVertexTags 【1,2,3...】 —— 输入点Tag
DistanceField SelectedEdgeTags 【1,2,3...】 —— 输入边Tag
DistanceField SelectedFaceTags 【1,2,3...】 —— 输入面Tag
DistanceField SelectedSolidTags 【1,2,3...】 —— 输入体Tag
DistanceField Tag 【1,inf】整数类型 1 当前尺寸场的Tag
LocalSizeField ThresholdField 基于输入场计算的尺寸在MinDist到MaxDist范围中插值新的尺寸
ThresholdField MinDist 【0,inf】 0.0 最小尺寸阈值
ThresholdField MaxDist 【0,inf】 0.0 最大尺寸阈值
ThresholdField MaxSize 【0,inf】 0.0 输入场计算的尺寸超过MinDist,则返回MaxSize
ThresholdField MinSize 【0,inf】 0.0 输入场计算的尺寸小于MinDist,则返回MinSize
ThresholdField SelectedFieldTag 【1,inf】整数类型 1 输入尺寸场Tag,一般使用DistanceField
ThresholdField Tag 【1,inf】整数类型 1 当前尺寸场的Tag
LocalSizeField RestrictField 只在输入的几何形状(点,边,面,体)上使用输入的尺寸场计算尺寸
RestrictField IsBoundary 【true,false】 true 是否在输入几何形状边界上计算尺寸
RestrictField SelectedVertexTags 【1,2,3...】 —— 输入点Tag
RestrictField SelectedEdgeTags 【1,2,3...】 —— 输入边Tag
RestrictField SelectedFaceTags 【1,2,3...】 —— 输入面Tag
RestrictField SelectedSolidTags 【1,2,3...】 —— 输入体Tag
RestrictField SelectedFieldTag 【1,inf】整数类型 1 输入尺寸场Tag
RestrictField Tag 【1,inf】整数类型 1 当前尺寸场的Tag

功能说明

在上面的json文件中给出了每一种尺寸场的设置方式,具体使用中可以依据自己的需求设置相应的尺寸场,或改变上面json文件中BGField的值以使用不同的尺寸场。接下来,我们将在上面的json文件中设置不同BGField的值以使用不同的尺寸场。

AutomaticField:依据曲率及狭窄区域自动计算全局尺寸

设置"BGField": 1,此时BGField为AutomaticField的Tag参数。因此将会使用AutomaticField。

"AutomaticField": {
"CurvatureFactor": 0.5,
"NarrowRegionResolution2D": 1.0,
"NarrowRegionResolution3D": 0.5,
"GrowthRate": 1.4,
"Tag": 1
}

如果需要与其它尺寸场耦合使用,则设置MinField或MaxField为背景场,在MinField或MaxField中输入AutomaticField和其它需要耦合使用的尺寸场的Tag即可。
结果如下:

MinField:从所有输入的尺寸场中取尺寸最小值

设置"BGField": 2,此时BGField为MinField的Tag参数。因此将会使用MinField。

"MinField": {
"SelectedFieldTags": [
4,
6,
7
],
"Tag": 2
}

即对任意点,从所有输入场中计算该点尺寸,返回尺寸最小值。结果如下:

MaxField:从所有输入的尺寸场中取尺寸最大值

设置"BGField": 3,此时BGField为MaxField的Tag参数。因此将会使用MaxField。

"MaxField": {
"SelectedFieldTags": [
4,
6,
7
],
"Tag": 3
}

即对任意点,从所有输入场中计算该点尺寸,返回尺寸最大值。结果如下:

BallField:指定球内的网格尺寸

设置"BGField": 4,此时BGField为BallField的Tag参数。因此将会使用BallField。

"BallField": [
{
"Center": [
11.0,
13.0,
15.5
],
"Radius": 20.0,
"InterLocSize": 1,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 4
}
]

可以不用设置Thickness和OutLocSize,结果如下:

BoxField:指定立方体内的尺寸

设置"BGField": 6,此时BGField为BoxField的Tag参数。因此将会使用BoxField。

"BoxField": [
{
"MinPoint": [
0.0,
0.0,
0.0
],
"MaxPoint": [
20.0,
20.0,
20.0
],
"InterLocSize": 1.0,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 6
}
]

可以不用设置Thickness和OutLocSize,结果如下:

CylinderField:指定圆柱内的尺寸

设置"BGField": 7,此时BGField为CylinderField的Tag参数。因此将会使用CylinderField。

"CylinderField": [
{
"Center": [
0.0,
0.0,
0.0
],
"Axis": [
0.0,
0.0,
1.0
],
"Radius": 20.0,
"InterLocSize": 1,
"OutLocSize": 5,
"Thickness": 10,
"Tag": 7
}
]

可以不用设置Thickness和OutLocSize,结果如下:

DistanceField:计算模型上任意点到输入几何(点,边,面,体)的距离

设置"BGField": 8,此时BGField为DistanceField的Tag参数。因此将会使用DistanceField。

"DistanceField": [
{
"SelectedVertexTags": [
0,
1,
2
],
"SelectedEdgeTags": [
69,
73
],
"SelectedFaceTags": [
20,
48
],
"SelectedSolidTags": [],
"Tag": 8
}
]

即将距离作为网格尺寸,因此在距离小于全局的minsize时取minsize,在距离大于全局的maxsize时取maxsize。可以不设置某些几何,结果如下:

ThresholdField:依据查找点的距离或尺寸值返回合适的尺寸

设置"BGField": 9,此时BGField为ThresholdField的Tag参数。因此将会使用ThresholdField。

"ThresholdField": [
{
"MinDist": 5.0,
"MaxDist": 10.0,
"MaxSize": 5.0,
"MinSize": 1.0,
"SelectedFieldTag": 8,
"Tag": 9
}
]

一般与DistanceField结合使用(即在DistanceField指定选择尺寸场为DistanceField)。 当查找点的距离或尺寸值ls<MinDist 返回MinSize(阈值场中的MinSize); 当查找点的距离或尺寸值ls>MaxDist 返回MaxSize(阈值场中的MaxSize); 当查找点的距离或尺寸值MinDist<ls<MaxDist 依据MinSize和MaxSize插值一个新的尺寸。
结果如下:

RestrictField:只在输入几何(点,边,面,体)上应用输入的尺寸场

设置"BGField": 10,此时BGField为RestrictField的Tag参数。因此将会使用RestrictField。

"RestrictField": [
{
"IsBoundary": true,
"SelectedVertexTags": [
0,
1,
2
],
"SelectedEdgeTags": [
73
],
"SelectedFaceTags": [
20
],
"SelectedSolidTags": [],
"SelectedFieldTag": 8,
"Tag": 10
}
]

结果如下:

点击这里example03可获得网格尺寸控制示例完整源码,大家根据学习需要自行下载。