3DE 知识工程 —— 使用 EKL 批量布置设备

目录

1、简介

2、操作步骤

2.1  获取设备库信息

2.2  获取舱室位置信息

2.3  处理设备布置信息

2.4  布置设备


1、简介

前面我们讲过使用 EKL 创建产品节点树(3DE 知识工程 —— 使用 EKL 创建产品节点树),今天我们来介绍如何使用 EKL 批量布置设备,这在某些场景下可能会非常有用,例如在产品设计初期,使用 EKL 批量布置设备的占位模型,待设计成熟后,再批量将占位模型替换为实际的设备模型,设计人员仅需对实际设备模型稍作调整即可,从而可以节省大量的设备布置时间。具体操作步骤如下:

2、操作步骤

2.1  获取设备库信息

布置设备当然要有设备库模型,假设项目中已经创建好占位模型库(图 1),布置时需根据占位模型的属性信息( ID、Version )来加载相应的模型进行布置,可以使用 EKL 来获取所有占位模型的属性信息并输出到表格。

图 1  设备模型库

获取占位模型属性信息的示例代码如下:

iReference :  VPMReference 
--------------------------

let referenceList(List)
let reference(VPMReference)
let plmID(String)
let revision(String)

referenceList = iReference->Query("VPMReference", "")

for reference inside referenceList
{
	plmID = reference->GetAttributeString("PLM_ExternalID")
	revision = reference->GetAttributeString("revision")
	
    ... // 输出设备属性信息到表格

}

2.2  获取舱室位置信息

舱室位置信息的获取方式很多,如果项目中已经创建了舱室空间模型(图 2),也可以使用 EKL 来直接获取所有舱室的位置信息(中心点坐标)。

图 2  舱室空间模型

从舱室空间模型获取舱室位置信息的示例代码如下:

iReference :  VPMReference 
--------------------------

let referenceList(List)
let reference(VPMReference)
let spaceVolume(VolumeGeo)
let x(LENGTH)
let y(LENGTH)
let z(LENGTH)

referenceList = iReference->Query("VPMReference", "")

for reference inside referenceList
{
	if reference->IsASortOf("SSM_DesignSpaceRef")
	{
		set spaceVolume = reference->Find("VolumeGeo", "x.Name like \"*空间克隆*\"", TRUE)
		spaceVolume->centerofgravity(x,y,z)

        ... // 输出并记录舱室位置信息

	}
}

2.3  处理设备布置信息

各舱室的设备布置信息是必须的输入信息,假设设备布置信息为电子表格清单,在使用 EKL 进行布置前,还需要将占位模型信息和舱室位置信息补充到表格中(表 1),以下是表格示例:

表 1 - 设备布置信息表
序号舱室占位模型IDVersionXYZ
1A001占位模型-1prd-xxx-00000003A2000mm2000mm1000mm
2A001占位模型-2prd-xxx-00000005A2000mm2000mm1000mm
3B002占位模型-3prd-xxx-00000007A4000mm5000mm1000mm
........................

2.4  布置设备

做完上面的准备步骤,就可以进行设备布置了。

布置的主要思路:使用 EKL 读取设备信息表中的信息,首先根据舱室名称检索是否存在相应舱室节点,如果不存在则创建;然后根据占位模型信息加载相应的占位模型(加载的速度很慢,应考虑同一设备只加载一次);最后根据舱室的位置信息,将设备布置到舱室中心点位置(为避免设备重叠,应考虑同一舱室的设备适当调整位置)。

以下是加载占位模型并布置到舱室中的关键代码:

iParent :  VPMReference 
--------------------------
... // 读取设备布置信息

// 从模型库读取并加载设备
let currentQuery(PLMQuery)
currentQuery = CreatePLMQuery("VPMReference")

currentQuery->AddCriterion("PLM_ExternalID", "prd-xxx-00005979")
currentQuery->AddCriterion("revision", "A")

let resultList(List)
resultList = currentQuery->RunQuery()

let currentResult(PLMQueryResult)
set currentResult = resultList->GetItem(1)

let currentReference(VPMReference)
set currentReference = currentResult->LoadResult()

// 布置设备并调整位置
let currentInstance(VPMInstance)
set currentInstance = new("VPMInstance", currentReference.Name, iParent, currentReference)

let currentInstancePosition(Matrix)
currentInstancePosition = currentInstance.PositionMatrix

currentInstancePosition->Set(1, 4, x)
currentInstancePosition->Set(2, 4, y)
currentInstancePosition->Set(3, 4, z)
currentInstance.PositionMatrix = currentInstancePosition

currentInstance->Update()

通过上述步骤可以使用 EKL 实现批量布置设备,下面是本例的布置视频:

图 3  批量布置设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值