EONSDK教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

EONSDK使用教程1EONSDK概述EONSDK是一套专为EONStudio研发节点与模块的二次开发工具,EONReality公司本身也使用EONSDK开发EONStudio。尽管EONStudio提供许多功能优异的节点,有些特殊功能仍无法支持,通过EONSDK,可以新增节点或模块,将EONStudio的功能延伸。EONSDK基于COM技术开发,安装后,将在VisualC++中加入两个向导(wizards),可以将编写好的源程序代码连接到EON运行平台及资料库。新增的节点除了提供新功能之外,也能提升或取代原有的标准节点,使用方法与EONStudio内部节点完全一样,可与系统完全整合。在大型系统的开发过程中,EONStudio中不可能有现成的满足要求的功能节点可以使用,使用EONSDK针对系统的特性专用节点,能够把精力集中在交互事件的处理上,同时利用EONStudio强大的图形渲染功能,提高开发效率。图1EONStudio中的节点由EONSDK开发的节点与EON中原来的其他节点具有相同的地位。EON中的节点能够通过入事件属性域(EventIn)接收外部数据,经过内部处理后通过出事件属性域(EventOut)输出结果数据。充分理解EON中节点的功能以及运行原理,有助于理解以及使用EONSDK。需要指出的是,许多EONSDK能够实现的功能都可以用Script节点来实现。但Script是解释型运行程序,在处理大运算量的程序时,速度比较慢。而且Script节点只能处理EON场景的内部事件,可扩展性差,EONSDK基于C++语言,扩展能力强。学习EONSDK时,可以借鉴Script的开发流程。2EONSDK的安装安装EONSDK前,最好记录下VC编译文件的路径,以免安装后出现编译路径丢失的情况。安装EONSDK成功后,EONSDK将自动加入到VC的编译路径。同时系统将自动在VisualC++环境中加入EON节点向导(EONNodeWizards)和EON模块向导(EONModuleWizards),如图2所示。Node1Node2EventInEventOutNode3EventInEventOut图2VCAppWizard中的EON节点和模块向导EONSDK原本的eondllutil.h头文件编译时会报错,把出错部分的语句注释后重新保存了一个新版本,以后需要时直接引用新版本的eondllutil.h头文件。3创建节点新建VC工程,选择EONNodeWizard,确定后将出现EON节点属性设置对话框,如图3所示。图3EON节点属性设置对话框在EON节点属性设置对话框中可以设置要创建节点的名称和所在的节点群组。在Methods部分为EON节点设置一些特殊功能的属性,这些功能并不是EON节点所必须的,选择了这些属性,系统将在下一步创建的源代码框架中将加入相应的代码。(1)Update。选择这一选项,系统运行时,节点每帧都将刷新一次数据。SDK在生成的源代码框架中将加入Update()函数,在场景每一帧的绘制中被调用。EON节点向导EON模块向导(2)IsSensor。传感器属性设置。选择该属性,系统把节点当成传感器看待,允许节点在没有收到入事件(eventIn)的情况下产生出事件(eventOut)。(3)EventsProcessed。在接收到入事件的情况下,系统每一帧都执行该函数。(4)Serialize。用于节点数据类型的保存和读取。设置好节点的属性参数后,选择确定,EONSDK将自动生成节点开发的程序框架代码,直接往程序框架添加代码,即可根据用户要求创建节点。创建成功后,应关闭工程,然后重新打开。编译工程,VC自动为节点注册。可在注册表中HKEY_LOCAL_MACHINE-SOFTWARE-EONREALITY-EON-5.0-Popup-Agent中找到新建的节点。4EONSDK的程序开发(参考EONSDK帮助文件)EONSDK自动生成了节点开发的程序框架代码,用户只需往程序框架添加代码,即可根据要求创建节点。利用EONSDK开发节点的主要过程如下:(1)创建属性域。在节点头文件中的公有枚举成员变量中的枚举元素FID_FIRST与FID_LAST之间插入自定义的属性域。所有属性域的名称均以“FID_”开头,后面是属性域的名字,即节点在EONStudio中所能看到的名字。在节点源文件中的类定义函数InitClass中加入上一步的自定义属性域,EONSDK使用如下的宏来加入自定义的属性域:ADD_eventIn(FieldName,Type);//加入eventIn属性域。ADD_eventOut(FieldName,Type);//加入eventOut属性域。ADD_exposedField(FieldName,Type,Value);//加入exposedField属性域。ADD_field(FieldName,Type,Value);//加入field属性域。(2)节点事件的处理。节点能够与外部环境通讯,因此必须能够接收外部节点发送过来的消息并进行处理。在节点程序框架中有FieldChanged函数专门负责接收并处理外部事件,代码如下:voidVD_SceneManager::FieldChanged(intID){switch(ID){caseFID_Test://接收到事件的属性域。Initialize();//事件处理函数。break;caseFID_Test2:function1();break;……default:CEonBase::FieldChanged(ID);}}每当节点接收到入事件时,该节点的FieldChanged函数被调用,根据属性域名称自动跳转到相应的位置,执行处理程序。(3)使用EONSDK的接口函数。EONSDK内部编写了几十个接口(Interface),提供了对节点、属性域以及键盘鼠标等输入设备的完整控制。常用的接口及接口方法见表1。表1本文使用的EONSDK接口及接口方法接口方法功能描述INode指向场景中任一节点的指针GetParent获取本节点父节点的指针GetChild获取本节点指定的某个子节点的指针GetName获取本节点名字RemoveChild从场景中删除某一节点IEonField指向场景中某节点的任意属性域的指针GetMFElement获取一个多维属性域AddMFElement往一个多维属性域添加元素_RemoveMFElement删除多维属性域中的一个元素_SetMFCount设定多维属性域的元素个数GetSFXXX获取某一单维属性域的值SetSFXXX设置某一单维属性域的值INodeBag管理场景中各节点之间的关系CreateNode在场景中动态创建一个新节点CopyNode复制节点MoveChild移动节点IRouteManager管理场景中的路由关系AddRoute动态创建一条连接两个节点的路由RemoveRoute删除一条指定的路由常用函数EonFindNodeEonGetNameEonGetRootEonReportErrorInternalGetField实例演示:Homework:1.利用EONSDK编写一个节点,该节点能够获取父节点的名称,并显示在弹出对话框上。2.利用EONSDK编写一个节点,用于控制一个物体来回移动。5节点的注册与卸载EONSDK基于COM技术开发,创建的节点实际上是COM对象。每个COM对象都有一个唯一的CLSID用于标识身份,要使用COM对象,首先必须注册该COM对象,把该COM对象的CLSID写入系统注册表。同理,EONSDK开发的新节点也必须先经过注册才能使用。利用EONNodeWizard创建节点时,系统程序框架自动加入了实现注册的代码,程序在编译过程中自动向系统注册表写入节点的注册信息。如果要在其他计算机上使用该节点,必须手动注册该节点,手动注册节点的方法有两种,一是在系统运行对话框中输入“regsve32.exenodename”注册节点,另一种是在程序运行时注册。本文使用程序注册方法注册节点,关键代码如下:voidOnRegister(){CStringpath=GetDlgItemText(IDC_DLLPATH,path);//要注册的库文件名if(path!=){typedefHRESULT(WINAPI*FREG)();TCHARszWorkPath[MAX_PATH];//保存当前进程的工作目录::GetCurrentDirectory(sizeof(szWorkPath),szWorkPath);HMODULEhDLL=::LoadLibrary(path);//动态装载组件if(hDLL){//取得注册函数指针DllRegisterServerFREGlpfunc=(FREG)::GetProcAddress(hDLL,_T(DllRegisterServer));if(lpfunc)lpfunc();//执行注册。::FreeLibrary(hDLL);}::SetCurrentDirectory(szWorkPath);//切换回原先的进程工作目录}}与节点注册相对应,卸载节点的代码如下:voidOnUnregister(){CStringpath=GetDlgItemText(IDC_DLLPATH,path);//要卸载的库文件名if(path!=){……HMODULEhDLL=::LoadLibrary(path);//动态装载组件}if(hDLL){//取得注册函数指针DllRegisterServerFREGlpfun=(FREG)::GetProcAddress(hDLL,_T(DllUnregisterServer));if(lpfunc)lpfunc();::FreeLibrary(hDLL);}……}}

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功