目录
1、简介
2、EKL 函数重用
2.1 直接调用
2.2 本地库重用
2.3 全局库重用
3、EKL 功能扩展
1、简介
本文介绍两种方法以展示 EKL 更为强大的能力:一是重用 EKL 函数,二是使用 EKL 调用 VB Script 宏中的函数以扩展其功能。
2、EKL 函数重用
使用 EKL 在单个 Action 中实现复杂的功能时比较比较麻烦:首先是调试困难,其次是代码增多后变量变得繁多,不利于后续的理解及修改;此外对于一些经常使用的代码块(如读写表格)要在每个 Action 中重复拷贝。因此本文介绍以下几种在 EKL 中重用函数的方法。
2.1 直接调用
这种方式是直接在一个 Action 中调用其他的 Action ,可以用于编写较为复杂的功能,特别是对于单个功能点的调试极为有用。直接调用的方法很简单,示例如下:
如图 1 所示,Main 为主调 Action,实现功能的主要业务逻辑(调用其他 Action),Add 为被调 Action,实现单个具体的功能(进行加法运算)
Add 脚本的代码如下(图 2):
Main 脚本的代码如下(图 3):
let act(AdvisorAction)
set act = Relations\Addlet a, b, sum(Real)
a = 5
b = 3
sum = 0
act->Run(a, b, sum)Notify("#", sum)
2.2 本地库重用
对于一些常用的功能,可以将其封装到函数库中,避免重复拷贝到每个 Action 中,具体示例如下:
首先需要在 Know How Libraries 中创建一个函数库(使用 Quality Rules Capture 模块创建),然后在函数库中将功能(如上面的 Add 函数)进行封装,如图 4:
函数库中的 Add 函数与 Action 略有不同,它可以有返回值。如图 5 所示,此处返回一个 Boolean 值表示函数执行状态:
要使用函数库中的 Add 函数,需要在本地创建一个资源表,然后将函数库添加到资源表中(图 6、图 7)
Main 脚本中调用方式也有所变化,需要使用 include 关键字引入函数库(库名为资源表中的逻辑名而不是函数库本身的名字),调用函数时需要加上库名和域限定符,代码如下(图 8):
include "EKLLib"let a, b, sum(Real)
a = 5
b = 3
sum = 0let hr(Boolean)
hr = EKLLib::Add(a, b, sum)if hr == TRUENotify("#", sum)
elseNotify("Error")
2.3 全局库重用
在本地资源表中创建的函数库只能本地使用,3DE 平台是基于服务器架构的,只需将函数库添加到 DataSetup 的资源表中就可以实现全局重用(即本项目所有参与者均可使用)。具体示例如下:
在 DataSetup 的 Includable EKL Libraries 下创建一个资源表(图 9):
然后将函数库添加到资源表中,并将资源表绑定到项目合作区,再在 Main 脚本中调用即可,操作方法与本地库重用的方法一样。
注意:应避免本地资源表和 DataSetup 资源表中函数库的逻辑名称相同。
3、EKL 功能扩展
在 3DE 知识工程 —— 使用 EKL 创建参数化线框(Wireframe)特征 一文中我们介绍过使用 EKL 调用 VB Script 脚本的方法,这里我们再介绍更进阶的用法:将 VB Script 脚本封装为 EKL 可直接调用的函数库,并通过 EKL 获取 VB Script 的返回值。示例如下:
首先创建一个 VBA 宏,在 VBA 宏中编写函数,如图 10
然后在本地添加资源表,并将 VBA 宏添加到资源表,如图 11
在 Main 脚本中调用 VBA 宏中的函数,代码如下(图 12):
iPart : PartFeature,iBody : OpenBodyFeature
--------------------------
let myPoint(Point)
ExecuteVBResource("VBLib", "CreatePointCoord", myPoint, iPart, "part", iBody, "body", 50, "x", 100, "y", 0, "z")if myPoint == NULLNotify("Error")
elsemyPoint.Name = "MyPoint"iPart->Update()
上述代码的关键在于 ExecuteVBResource 函数,其用法说明如下(图 13):
同 EKL 函数重用一样,VBA 宏也可以添加到 DataSetup 的 Knowledge Resources 的资源表中(图 14)
调用 DataSetup 资源表中 VBA 宏库的函数时,Main 脚本中 ExecuteVBResource 函数修改如下(注意第一个参数的变化,VBLib 表示 VBA 宏在资源表的逻辑名称,KnowledgeResources 表示 DataSetup 中的资源表):
ExecuteVBResource("KnowledgeResources|VBLib", "CreatePointCoord", myPoint, iPart, "part", iBody, "body", 50, "x", 100, "y", 0, "z")
采用这种方式将 VB Script 函数封装为 VBA 宏之后,可以极大的扩展 EKL 的能力。
注意:应避免本地资源表和 DataSetup 资源表中 VBA 宏的逻辑名称相同。
本文简单介绍了 EKL 函数重用和功能扩展的方法,如果你对 3DE 知识工程感兴趣以及想更深入的交流,欢迎评论留言。