3DE 知识工程 —— 使用 EKL 提取特征的拓扑元素

目录

1、简介

2、详细介绍

2.1  提取顶点

2.2  提取边线

2.3  提取面

2.4  使用参数控制提取类型

2.5  提取阵列元素


1、简介

在定义模板的时候,有时候需要提取特征的拓扑元素,但特征的拓扑元素是不稳定的,当参数发生改变时,有些拓扑元素可能会提取失败。

例如下面的示例中使用阵列生成多个曲面特征,如果采用直接提取的方式创建提取特征,改变阵列的实例数量会出现以下两种情况:

  • 当阵列的实例数量增多时:部分曲面没有被提取到,可能影响模板的适用性。
  • 当阵列的实例数量减少时:模型直接报错,提取失败,直接影响模板的使用。
图 1  提取阵列的曲面

为解决上述这种问题,本文介绍一种使用 EKL 提取特征拓扑元素的方法。 

2、详细介绍

使用 EKL 提取特征拓扑元素主要用到以下两个函数:

List GetSubElements(Integer dimension, Boolean duplicates)
WireFrame extract(CATCell cell, Integer propagationType)
  • GetSubElements() 方法用于获取特征的拓扑元素,返回相应子元素的列表,dimension 参数指定提取元素的维度,它只有 3 个合法值(0 表示提取顶点,1 表示提取边线,2 表示提取面),duplicates 有默认值,可不传入。
  • extract() 方法用于提取拓扑元素生成几何特征,返回线框类型特征,cell 参数是要提取的拓扑元素,propagationType 表示连续性(0 表示 G0,1 表示 G1,2 表示 G2,其他值表示不连续),此参数指定提取时将符合 propagationType 连续性的拓扑元素一起提取。

2.1  提取顶点

顶点的类型为 CATVertex,下面是一个提取顶点的示例:

iFeature :  GeometricFeature 
--------------------------

let parent(OpenBodyFeature)
set parent = `提取元素`

let vertex(CATVertex)
for vertex inside iFeature->GetSubElements(0)
{
	let wf(Wireframe)
	set wf = new("Point", "", parent)
	wf = extract(vertex)
}

parent->Update()
图 2  提取顶点

2.2  提取边线

边线的类型为 CATEdge,下面是一个提取边线的示例:

iFeature :  GeometricFeature 
--------------------------

let parent(OpenBodyFeature)
set parent = `提取元素`

let edge(CATEdge)
for edge inside iFeature->GetSubElements(1)
{
	let wf(Wireframe)
	set wf = new("Curve", "", parent)
	wf = extract(edge)
}

parent->Update()
图 3  提取边线

2.3  提取面

面的类型为 CATFace,下面是一个提取面的示例:

iFeature :  GeometricFeature 
--------------------------

let parent(OpenBodyFeature)
set parent = `提取元素`

let face(CATFAce)
for face inside iFeature->GetSubElements(2)
{
	let wf(Wireframe)
	set wf = new("Surface", "", parent)
	wf = extract(face)
}

parent->Update()
图 4  提取面

2.4  使用参数控制提取类型

上面分别提取的方式有些繁琐,因为拓扑元素都属于 CATCell 类型,我们可以使用一个参数来控制提取类型,示例如下:

iFeature :  GeometricFeature,iExtract :  String 
--------------------------

let parent(OpenBodyFeature)
set parent = `提取元素`

let dimension(Integer)
if iExtract == "Point" dimension = 0
if iExtract == "Curve" dimension = 1
if iExtract == "Surface" dimension = 2

let cell(CATCell)
for cell inside iFeature->GetSubElements(dimension)
{
	let wf(Wireframe)
	set wf = new(iExtract, "", parent)
	wf = extract(cell)
}

parent->Update()
图 5  使用参数控制提取类型

2.5  提取阵列元素

上面的示例中都需要手动执行提取操作,在简介中提到的提取阵列问题需要实现自动提取,怎么解决呢?

有两种解决方法:

  1. 使用规则的自动执行特性进行自动提取;
  2. 使用反应监控参数的修改来调用提取操作。

这里我们使用规则来进行自动提取,示例如下:


let parent(OpenBodyFeature)
set parent = `提取元素`

// 删除“提取元素”里已经存在的提取特征
let feat(Feature)
for feat inside parent.Children
{
	feat->Delete()
}

// 执行提取操作
let geoFeature(GeometricFeature)
set geoFeature = `零件几何体\圆形阵列.1`

let extractType(String)
extractType = `提取类型`

let dimension(Integer)
if extractType == "Point" dimension = 0
if extractType == "Curve" dimension = 1
if extractType == "Surface" dimension = 2

let i = 1
let cell(CATCell)
for cell inside geoFeature->GetSubElements(dimension)
{
	let wf(Wireframe)
	set wf = new(extractType, "曲面." +  i, parent)
	wf = extract(cell)
	i = i + 1
}

parent->Update()
图 6  应用规则提取阵列元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值