从 ug nx二次开发程序中导出VRML文件

目的:导出VRML文件用于在Java中显示3D模型。

导出VRML的接口很奇怪,不支持Journal,直接搜NX 6.0的API也找不到相关的东西。 后来找到了从二次开发程序中运行宏的方法,试图用宏来实现自动导出VRML,然而这方法又没办法以独立模式运行。

后来想,也许Server/Client模式可以实现:先执行一个函数打开文件,函数结束,GUI更新;此时可以正常地执行宏;调用宏的函数执行完毕之后,再用第三个函数关闭文件。

于是试了下自带的远程例子,结果还没完成就因为太复杂被老板叫停。心得见Java RMI(Remote Method Invocation) 入坑心得。然后老板发给我一篇知网论文,其中提到了一个int UF_STD_create_vrml_file( char * file_name , double tolerance ,int mode_flags)函数,定义在uf_std.h。之所以我折腾半天没找到这个函数,是因为这是一个C风格函数,不在nxopen那套框架之内(但是也是有封装的),所以属于不鼓励使用的范畴,Java文档中都没有提到。之前也确实见到了名字类似的文档,但那是NX 10专用的Python接口。

整体认识很重要,学习时别太忙着去写Hello world代码。看到Python文档后我一掠而过,但如果稍加注意,并且我对于NX的二次开发接口分类有一些认识的话,很容易注意到此函数的名字是直接封装的C函数,然后就可以推断存在这么一个C接口,而C接口是挺老的东西了,NX 10.0的文档既然有,那么极有可能它从4.0时代就存在了。

��索要全面,Google+英文搜索对待绝大多数代码问题很强,但也不是全部。

Java nxopen对此接口还是进行了封装,但遮遮掩掩,估计是自己也知道这么搞十分不优雅吧。要调用这类一对一封装的C接口,需要使用nxopen.UFSession,而非一般用到的nxopen.Session。代码风格也大相径庭,基本是C风格,调用时上下文很重要,基本没考虑同时打开多个文档的问题。好在同时获取两个Session的话,打开的文件是共享的,所以两组API也可以合作,不过要小心就是了。下面的实现中给出了两个Session互补工作的例子。

//[该内容无法在民用版中显示]

实现期间还出了一个插曲:Java nxopen编辑参数之后doUpdate时JRE崩溃

  • 最后更改: 2019/07/26 08:52