用HOOPS做开发也有段时间了,也曾去北京的一家做虚拟现实的公司做过短期的相关技术交流,觉得有必要利用暑假回家休息这段时间来做些总结。
HOOPS介绍
HOOPS是一个功能齐全性能优良的3D可视化开发套件。追述其历史,可发现一条常见的近乎模板式的从学术到工业的产品化之路。
HOOPS诞生于上世纪八十年代康奈尔大学的CAD实验室中,主要用于学术研究。之后,由于预见到其在工业上巨大的商业价值,Ithaca软件公司成立,致力于商业化运作HOOPS。
期间,有不少公司开始采用它进行CAD/CAM/CAE方面的开发,取得了不错的效果。1993年,CAD界大佬AUTO DESK公司收购了Ithaca,HOOPS也随即成为其旗下的一个产品。
1996年,HOOPS部门又从AUTO DESK分离出来专门成立了一家公司,叫做Tech?Soft?3D,继续开发及推广HOOPS技术至今。
HOOPS和ACIS的结合
一般我们在用HOOPS开发的时候,通常会集成一个几何造型内核,最常见的就是ACIS。
ACIS原先是剑桥大学的几个研究人员根据其研究成果编写出的一个具体实现,然后成立了一家叫Spatial的公司专门运营这个几何造型内核。
后来,Spatial被CAD界的另一个大佬法国的达索系统公司收购。HOOPS作为一个前端可视化开发框架,和几何造型内核的关系就像我们的GUI和操作系统内核的关系一样,一个负责具体的图形图像的显示以及和用户的交互,另一个则专注于核心的算法处理(看不见摸不着的)。
HOOPS和ACIS结合的如此之好,以至于Spatial公司后来买下了HOOPS和ACIS互操作的那个模块,也就是HOOPS?ACIS?Bridge,在很多国家和地区,Spatial甚至负责HOOPS的销售工作,通常的做法是将ACIS和HOOPS捆绑销售。
这个系列文章我主要讲HOOPS的相关东西,ACIS的可能会顺带提一些。我还在考虑是否会另外再写一些文章专门介绍ACIS的相关知识,主要是看有没有那个时间。说实话,HOOPS的东西实在太多,我所了解的也许只有其十之一二,还望感兴趣或者比我了解的人多加探讨和批评。
HOOPS的安装部署
HOOPS的安装较为简单,通常有两种方式,一种是直接通过其exe的安装文件安装,第二种是解压文件至磁盘。
两种方式没什么不同,只不过exe的方式会在安装过程中自动添加系统的环境变量,省去了我们的一步操作。我手头有的是一个压缩包HOOPS,版本为19.19,ACIS版本为R23,另外相关平台信息为:VS2010?SP1,Windows?7?x86。
一般来说,我不太喜欢使用旧版本的东西,除非需要跟别人已经做好的东西做兼容。所以,写文章的时候,我所用的软件套件是我所能够得到的最新版本。
解压HOOPS之后,我们手动添加环境变量HOOPS_INSTALL_DIR,变量值为我们解压HOOPS的磁盘绝对路径。若安装了ACIS,则我们还需添加环境变量A3DT为ACIS安装目录的绝对路径。
HOOPS下载的时候无所谓是VS2008还是VS2010的,两者都可以,因为我们可以在其目录里发现2008和2010的solution文件。
打开hoops_3df_vc10.sln文件,首先需要做一些清理,然后我们可以按F7让整个工程自动编译,也可以手动地只编译acishoopspartviewer和hoopspartviewer这两个工程。
在编译这两个时会在链接的时候缺少某些库,然后单独再去编译那些库。我推荐第二种手动的方法,原因是它只编译我们需要的模块,编译后的整个项目会小得多,另外你可以更清晰地对HOOPS的整个架构有个了解。
若安装了ACIS,在编译acishoopspartviewer的时候需要注意的是,该工程会自动地加载ACIS安装目录里面的src/ha_bridge文件夹中的项目。
原因很简单,该bridge工程就是用于HOOPS和ACIS之间的数据通信的,由于两者毕竟是不同的产品,所以ACIS在发布的时候不可能知道具体的HOOPS是何种版本。因此HOOPS在编译的时候就会去查找ACIS的安装目录,然后编译这个bridge,这样,生成的bridge才能正确连接当前安装的两个版本的ACIS和HOOPS。
不过发现R23的ACIS的bridge有个问题,就是它编译生成的新lib库文件以及dll文件是在ha_bridge目录中的bin文件夹中,没有拷贝到ACIS根目录的bin和lib文件夹;而HOOPS在加载完bridge之后,拷贝的却是ACIS根目录的bin文件夹中的SpaHBridge.dll,因此虽然生成了正确的bridge,可是最终拷贝到HOOPS的bin文件夹中的却是之前已有的,所以还是会造成运行时错误(如果没错,那就是你运气好,因为ACIS发布的时候,发布者使用的HOOPS版本跟你的一样)。
所以,在编译一次之后,我们需要手动地将ha_bridge的bin文件夹中的lib和dll文件拷贝到ACIS根目录的相应位置,然后再编译一遍acishoopspartviewer,此时我们在HOOPS的bin/nt_i386_vc10d文件夹中可以看到时间戳为刚刚编译的SpaHBridge.dll的文件了。
HOOPS的编译成功与否以能否成功运行acishoopspartviewer和hoopspartviewer这两个程序为准。acishoopspartviewer不单单需要能够运行起来,还需要能够成功加载ACIS的sat模型文件。
若程序能跑起来,但是加载sat时出错,则可以肯定的说是ha_bridge这个模块没有编译成功(或者你没有按照我上面说的那样拷贝)。
编译之后,为了能够在VS2010的工程向导中使用HOOPS向导,我们将demo\mfc\hoops_appwizard\vcprojects_NET2010文件夹中的三个文件拷贝到VS2010安装目录的VC\vcprojects文件夹中,
然后修改HOOPSAppWiz.vsz文件,将ABSOLUTE_PATH后面的路径改成HOOPS安装的路径加上demo\mfc\hoops_appwizard\VCWizards\HOOPSAppWiz_NET2010。然后运行VS2010新建一个工程看看,是不是多了一个HOOPS?3D?Application的选项?
如果您有想了解更多关于HOOPS技术的问题,或需要其开发您的应用,欢迎联系我们~