李大琳(吉林大学珠海学院广东519041)
孙 岩(江城电器安装有限公司310000)
Unigraphics(UG)软件是一套以机械产品为主的CAD/CAE/CAM一体化软件,是通用的设计与制造平台,专业针对性较差。那么根据具体需求,进行相应的二次开发十分必要。
UG的二次开发接口是多语言支持、全开放的编程接口,虽然这让用户能够像UG的研发人员一样开发自己的UG功能,但是问题是:接口太多、太复杂了。如何迅速找到可用的开发接口和正确的语法逻辑完成开发,又成为UG二次开发者的新难题。
好在UG提供了Journaling技术,用户将自己的操作记录并生成代码,然后在此基础上修改代码来作为自己的二次开发代码使用。
Journaling是一种软件自动化技术,具有该技术的软件中最著名的就是Microsoft的宏(Macro)。用户在使用软件时避免重复相同的动作,把常用的动作写成宏,工作时,利用宏来自动运行,以实现自动化。
Journaling的实现也是通过录制,把前次的建模等相关操作记录成日志文件,下次再使用时,直接执行该文件即可完成建模。
然而UG的使用者几乎不会每次都建相同的模型。而且UG的特点是参数化建模,如果只是按照“录制->重放”的思路来使用Journaling,就无法参数化。
因此,Journaling的一般思路是“录制->生成代码文件->修改代码文件->生成单独的DLL文件和UG命令”。这样Journaling代码就成为UG菜单上一个独立的、参数化的命令。
笔者认为,Journaling的意义在于为初学者和虽然建模经验丰富、但是编程经验不足的人提供了示范作用和快速获得代码的途径。例如下面这段代码:
Dim point1 As Point(1)
p o i n t 1 = b l o c k F e a t u r e B u i l d e r 1.O r i g i n P o i n t(2)
b l o c k F e a t u r e B u i l d e r 1.O r i g i n P o i n t = p o i n t 1(3)
Dim originPoint1 As Point3d = New Point3d(0.0, 0.0, 0.0)(4)
blockFeatureBuilder1.SetOriginAndLengths(originPoint1, "100", "100","200")(5)
blockFeatureBuilder1.SetBooleanOperationAndTarget(Features.Feature.BooleanType.Create, nullBody) (6)
这是绘制一条直线,直线的起点是(0,0,0),终点是(100,100,200),代码首先用点point1来获得系统当前初始点。然后用点originPoint1作为直线的起点,最后通过方法SetOriginAndLengths()设置直线的起点和长度。这段代码中的Point3d和blockFeatureBuilder数据类型都是NX Open API对象模型中定义的变量。
对于使用者,Journaling并不是什么复杂的操作。把复杂的问题简单化是一款优秀软件最基本的特征。但是Journaling生成的代码中有大量的冗余代码,上例中的代码行(1)、(2)、(3)就是冗余的。
这三句获得了当前系统原点位置,但是绘制一条直线,只要知道起点和终点或者起点和长度就足够了。因此,做好Journaling代码优化,建立高质量代码就是Journaling二次开发的关键。
要实现这个目标是一个长期的过程,初学者可以分两个阶段实现:
1.正确性,可以使用UG的“日志回放”功能作为调试器。调试通过后,再进行DLL文件开发。实践证明这是一个高效的方法。
2.提高质量,这是一个需要长时间磨练的过程。国内当前UG二次开发主要还是沿用UG Open接口,是C语言开发。很难找到很好的关于Journaling技术的开发资料。为大家推荐下面这个网站:
http://www.nxjournaling.com/。这是一个Journaling技术交流论坛。
基于上述,前面的代码可以优化成以下形式:
Dim originPoint1 As Point3d = New Point3d(-0.0, -0.0, -0.0)
blockFeatureBuilder1.SetOriginAndLengths(originPoint1, 100, 100, 100)
Journaling是UG提供的一种自动生成代码的软件自动化技术。是开发者学习UG二次开发的最好教材,然而,国内深入讨论Journaling技术的资料不多。希望本文能为UG开发者抛砖引玉,重视起Journaling的代码示范作用。