目录
1、简介
前面我们讲过使用 EKL 创建产品节点树(3DE 知识工程 —— 使用 EKL 创建产品节点树),今天我们来介绍如何使用 EKL 批量布置设备,这在某些场景下可能会非常有用,例如在产品设计初期,使用 EKL 批量布置设备的占位模型,待设计成熟后,再批量将占位模型替换为实际的设备模型,设计人员仅需对实际设备模型稍作调整即可,从而可以节省大量的设备布置时间。具体操作步骤如下:
2、操作步骤
2.1 获取设备库信息
布置设备当然要有设备库模型,假设项目中已经创建好占位模型库(图 1),布置时需根据占位模型的属性信息( ID、Version )来加载相应的模型进行布置,可以使用 EKL 来获取所有占位模型的属性信息并输出到表格。
![](https://img-blog.csdnimg.cn/direct/d1922756746244949fe269b945588bff.png)
获取占位模型属性信息的示例代码如下:
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 来直接获取所有舱室的位置信息(中心点坐标)。
![](https://img-blog.csdnimg.cn/direct/7d26001bbb444bc898cf383828880edd.png)
从舱室空间模型获取舱室位置信息的示例代码如下:
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),以下是表格示例:
序号 | 舱室 | 占位模型 | ID | Version | X | Y | Z |
1 | A001 | 占位模型-1 | prd-xxx-00000003 | A | 2000mm | 2000mm | 1000mm |
2 | A001 | 占位模型-2 | prd-xxx-00000005 | A | 2000mm | 2000mm | 1000mm |
3 | B002 | 占位模型-3 | prd-xxx-00000007 | A | 4000mm | 5000mm | 1000mm |
... | ... | ... | ... | ... | ... | ... | ... |
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 实现批量布置设备,下面是本例的布置视频:
![](https://img-blog.csdnimg.cn/direct/ba6459f2b9e34bc39a9941097e1d3628.gif)