NX二次开发工具日志.docx
- 文档编号:30424419
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:26
- 大小:451.56KB
NX二次开发工具日志.docx
《NX二次开发工具日志.docx》由会员分享,可在线阅读,更多相关《NX二次开发工具日志.docx(26页珍藏版)》请在冰豆网上搜索。
NX二次开发工具日志
日志
日志是快速实用的NX二次开发工具,通过录制、编辑和回放用户交互操作,日志自动生成大量的程序代码,可以用来创建二次开发解决方案。
日志基于通用应用程序接口和.NET框架,它在NX交互进程中创建一个脚本文件,通过脚本文件回放用户交互操作。
在脚本文件的基础上,进行进一步编辑修改,通过添加的用户接口和编程逻辑可以快速进行客户化的定制开发。
日志功能支持VisualBasic,C++,Java和C#等语言,日志录制前需要选择其中一种通用的API语言。
日志录制完成后,通过修改编辑应用于的应用程序中。
目前Windows平台只支持VisualBasic.NET和C#.NET两种语言,其他语言可以在UNIX平台上使用。
本章介绍日志的录制、编辑和回放,以及如何使用日志功能辅助进行NX二次开发,提高开发效率。
2.1日志操作
日志的基本功能包括日志的录制、回放和编辑等。
作为NX二次开发的重要手段,NX二次开发的编程人员首先必须熟练掌握日志的使用方法。
图1日志菜单工具条
日志命令可以操作菜单,也可以点击相应的工具条,见图1。
日志录制完成后,生成日志文件,用户可以对日志文件进行编辑和回放。
回放日志时,在日志管理器中浏览并选择日志文件,点击运行按钮来执行日志。
使用日志的回放功能可以重现日志录制的交互操作过程。
在录制日志前,先设置录制编程语言,选择Preferences→UserInterface,在参数设置对话框里打开日志标签,在语言选项中选择编程语言。
如图2,本章默认选择的编程语言为C#语言。
图2日志语言选择
2.1.1日志指示器
并不是所有NX命令都支持日志,日志录制时,每一个NX命令都有一个标记来表示该命令是否支持日志,这个标记叫做日志指示器,在菜单和工具条上都有显示。
表1显示了日志指示器的标识及其意义。
部分支持意味着并非支持所有的NX命令。
表1:
日志指示器标识
标识
说明
菜单命令支持日志
菜单命令部分支持日志
工具条支持日志
工具条部分支持日志
日志录制时,如果日志指示器没有显示,可以通过修改环境变量UGII_JOURNAL_INDICATOR来控制日志指示器的关闭和显示。
当该环境变量的值为0时,日志指示器关闭,环境变量为其他值或者没有设置时,打开日志显示器。
2.1.2录制日志
点击工具条录制按钮或者选择Tools→Journal→Record录制日志,指定输出文件存储日志。
日志录制完成后,选择Tools→Journal→StopRecording停止录制,指定路径下生成了一个日志脚本文件,比如QuickExtrud.cs。
所有支持日志的NX命令可以录制成通用应用程序接口代码。
如果录制语言选用C#,可以录制的日志文件的后缀名为.cs,如果选用VB.NET语言,则后缀名为.vb。
详细步骤如下:
步骤一、新建或者打开一个部件。
点击RecordJournal工具条命令或者菜单Tools→Journal→Record。
弹出JournalRecord对话框,要求用户输入录制文件名,见图3,文件类型为*.cs,如果文件类型是*.vb,在参数预设置中设置录制的编程语言即可。
假设输入录制的文件名为QuickExtrude,单击OK后,进入录制状态。
图3日志录制选择存储文件
步骤二、录制日志,录制日志的实质是用脚本语言来记录用户的交互操作,注意只有日志指示器中支持的命令才能被录制成脚本文件。
录制过程中可以灵活使用Journal命令,比如可以暂停录制、插入注释等。
比如用户操作是在NX交互环境中,选择了一个草图,进行拉伸。
步骤三、录制完成
用户选择菜单Journal→StopRecording,可以停止录制。
录制完成后,在步骤一指定的路径下,生成一个用户命名的脚本文件,比如QuickExtrude.cs。
2.1.2编辑回放日志
日志录制完成后,选择菜单Tools→Journal→Play回放日志,在日志管理器中,点击Browse按钮,选择录制的日志文件,点击Run按钮,回放日志。
通过回放日志,可以重显录制的交互操作。
在部件导航器中,删除录制的拉伸草图的特征。
见图4。
图4日志回放生成的特征
如图5,在日志管理器中选择录制的QuickExtrude.cs日志文件,单击Run,运行日志文件。
在部件导航器中生成了一个拉伸特征,该拉伸特征和录制的交互操作产生的拉伸特征完全相同。
编辑日志时,在日志管理器中,点击Edit按钮,在管理器中打开选定的脚本文件,用户可以直接修改,编辑完成后回放日志。
如果编辑的日志文件存在错误,回放时候,弹出错误信息窗口,同时在日志管理器中高亮显示错误行,见图6。
错误信息为:
存在语法错误,代码行尾缺分号,提醒用户修改错误。
编辑日志文件可以使用其他任意文本编辑器。
专业编程人员可以使用VisualStudio.NET,利用它强大的语法纠错能力,进行脚本文件的修改,编译测试错误,可以极大的提高开发效率。
图5日志回放
图6日志错误显示
2.2日志在NX二次开发中的应用
日志可用于NX的二次开发,但是直接录制日志没有用户界面,而且回放时,根据确定的对象名称重复录制的步骤。
本节将讨论如何修改日记提供用户界面,使日志支持通用的应用程序的开发。
也将讨论如何把日志迁移到一个完全编译和链接的应用程序。
修改日志,在日志中添加对话框等操作的后日志的日志称为日志应用程序。
把其他需要编译链接的应用成为完全编译和链接的应用程序。
把录制的日志应用到完全编译链接的应用程序中是日志的非常重要的应用。
表2显示了不同应用程序的差异,一个是录制的日志,另外一个是加入到应用程序中的日志,另外一个是完全编译和链接的应用程序。
表2不同日志应用程序
日志(被记录)
日志应用程序(添加用户界面)
完全被编译和链接的应用程序
单个源文件
单个源文件
任何数量的源文件
操作和录制时相同命名的对象,由作者使用参数输入
对于用户选择的对象,由用户在运行时使用参数输入
对于用户选择的对象,由用户在运行时使用参数输入
限NX命令的支持日志
可以用所有.NET支持的通用API的类
可以使用所有通用API的类和任何所需的.NET类
在NX启动阶段不提供初始化事件
在NX启动阶段不提供初始化事件
在NX启动阶段,应用程序可以被自动加载,启动方法可以被定义为注册事件来处理,以支持对话框,用户定义的对象和许多其他运行选项
基于许可检验的特征
基于许可检验的特征
在开发周期中需要作者许可,在向用户发布前需要签名
使用日志辅助创建NX二次开发项目时候,需注意以下几点。
1.在Window平台上,日志语言目前仅限于VisualBasic.NET和C#.NET。
如果需要开发其他语言的应用程序,可以编译日志生成动态链接库,并与创建的NX二次开发应用程序连接起来。
2.一个日志中可能无法调用其他日志中的方法。
如果一个文件中编写代码太庞大而复杂,需要多个文件时候,可以把它们编译和链接到同一个应用程序中。
3.一个日志首次运行时,由于.NET库的加载,第一次执行需要较长的时间。
4.NX只能与部分.NET库链接。
如果日志链接到还没支持.NET库的时候,将发生错误。
在NX7.5版本中,日志支持.NET库包含:
mscorlib.dll
System.dll
System.Windows.Forms.dll
System.Drawing.dll
除了这些库,.NET功能中的其他类库无法在日志中回放。
如果应用程序需要其他库,编译和链接该库到应用程序中。
例如,如果应用程序需要实现一个客户机/服务器体系结构,需要编译链接System.Runtime.Remoting.dll。
2.3日志应用程序范例
范例QuickExtrude演示了录制日志、编辑日志和运行日志等使用日志创建日志应用程序的整个过程。
使用该案例需要先打开或者创建一个部件,该部件中至少含有一个草图特征。
日志录制时先选择一个草图,然后通过拉伸创建实体。
录制完成后编辑日志源代码,要求能够弹出用户界面让用户交互选择草图,在对话框中输入拉伸起始距离和终止距离,进行拉伸操作。
本例的关键在于如何在录制的代码中,添加用户界面包含用户输入拉伸起始和终止位置的对话框以及草图选择的对话框。
这个例子也说明了如何通过编辑一个日志文件来创建日志应用程序。
2.3.1添加拉伸位置对话框
草图拉伸时,需要用户输入拉伸的起始位置和终止位置,日志根据交互操作用户输入的值设置拉伸起始和终止值(0.0和1.0),进行拉伸。
C#代码如下:
extrudeBuilder1.Limits.StartExtend.Value.RightHandSide="0";
extrudeBuilder1.Limits.EndExtend.Value.RightHandSide="1";
如果使用对话框的形式动态确定草图拉伸的起始和终止位置,需要修改代码,添加一个简单的用户界面,用对话框输入框控件的值代替0.0和1.0。
NXOpen的.NET库中的类NXInputBox类提供了2种静态函数GetInputNumber和GetInputString,分别用来创建数值输入对话框和字符串输入对话框。
静态函数GetInputNumber和GetInputString分别有多个重载的静态函数,重载的静态函数的区别在于输入参数个数的不同,有关这2个静态函数的重载见表3。
表3NXInputBox静态函数说明
函数名
重载函数形式
说明
GetInputNumber
GetInputNumber(String)
一个字符串输入参数表示数值输入框的标签
GetInputNumber(String,String)
两个字符串输入参数,第一个表示数值输入框的标签,第二个表示对话框标题
GetInputNumber(String,String,String)
含有三个字符串输入参数,第一个表示数值输入框的标签,第二个表示对话框标题,第三个表示,输入数值的默认字符串。
GetInputNumber(String,String,Double)
三个输入参数,前2个字符串输入参数,分别表示数值输入框标签和对话框标题,第三个Double类型的参数,表示输入的数值的默认值
GetInputString
GetInputString(String)
一个字符串输入参数,表示字符串输入框的标签
GetInputString(String,String)
2个字符串输入参数,第一个表示字符串标签,第二个表示对话框的标题
GetInputString(String,String,String)
3个字符串输入参数,第一个表示字符串输入对话框的标签,第二个表示对话框的标题,第三个表示输入对话框的字符串的默认值
本例使用静态函数GetInputString函数的第三种重载形式定义2个含有一个字符输入框的对话框。
使用下面4行代码替换上面录制的2行代码。
stringstart_value=NXInputBox.GetInputString("SettheStartLimit:
","ExtrudeLimit","0");
stringend_value=NXInputBox.GetInputString("SettheEndLimit:
","ExtrudeLimit","1");
extrudeBuilder1.Limits.StartExtend.Value.RightHandSide=start_value;
extrudeBuilder1.Limits.EndExtend.Value.RightHandSide=end_value;
替换代码中定义列2个string类型的变量start_value和end_value,使用NXInputBox类GetInputString方法给他们赋值。
NXInputBox的静态函数弹出对话框中要求用户输入需要的拉伸的位置值。
要访问该接口类,必须包含NXOpenUI名称空间。
UsingNXOpenUI;
通过NXInputBox类的GetInputString静态方法添加了2个对话框,对话框形式见图7。
图7拉伸位置对话框
2.3.2添加草图选择对话框
为了添加草图选择,创建一个静态函数SelectSketch,该函数的功能添加并获取用户界面选择的草图。
在添加对象选择对话框之前必须了解日志中对象的选择粘性。
日志录制的是精确事件,在录制过程中用户选择的对象和操作中都是确定的。
日志中的对象不是“意图”选择,也不是一系列用户操作获得的一类的对象。
相反地,日志记录的是所选对象实际名称,以及对这些对象调用的具体方法。
日志回放时只能对相同命名的对象进行操作。
这种行为被称为选择粘性SelectionStickiness。
例如,录制抑制视图中的所有基准面的交互操作,日志记录的是抑制的每个基准面的名称和抑制基准面的最终方法。
日志回放时将根据录制对象的名称进行操作。
如果日志脱离它原始记录的环境,选择粘性有时会导致回放失败。
例如,如果该日志在其他部件文件中回放,并且这个部件文件不包含相同名字的基准面,将会产生错误。
在QuickExtrude的例子中,录制选择粘性的草图名称为“SKETCH_002”,Sketch(12)为草图特征名,拉伸曲线为草图特征中的名为“curveline7”的曲线。
NXOpen.Features.Feature[]features1=newNXOpen.Features.Feature[1];
NXOpen.Features.SketchFeaturesketchFeature1=(NXOpen.Features.SketchFeature)workPart.Features.FindObject("SKETCH(12)");
features1[0]=sketchFeature1;
CurveFeatureRulecurveFeatureRule1;
curveFeatureRule1=workPart.ScRuleFactory.CreateRuleCurveFeature(features1);
section1.AllowSelfIntersection(true);
SelectionIntentRule[]rules1=newSelectionIntentRule[1];
rules1[0]=curveFeatureRule1;
Sketchsketch1=(Sketch)workPart.Sketches.FindObject("SKETCH_002");
Lineline1=(Line)sketch1.FindObject("CurveLine7");
NXObjectnullNXObject=null;
Point3dhelpPoint1=newPoint3d(1.38057758650344,1.03015642718979,4.0);
section1.AddToSection(rules1,line1,nullNXObject,nullNXObject,helpPoint1,NXOpen.Section.Mode.Create,false);
日志录制完成后,根据要求编辑日志,定义对话框让用户动态选择草图,需要删除选择粘性,添加支持草图交互选择代码,下面是进行草图交互选择代码示例。
可以把交换选择草图功能定义为类的静态函数进行调用。
在当前工作部件中实现动态的选择草图的功能,需要在程序中设置选择范围,可以采取以下步骤:
1.定义选择范围
2.定义选择屏蔽
3.使用SelectionManager类中的SelectObject方法选择一个特定的对象。
SelectObject的方法调用一个简单的对话框允许选择草图。
要实现用户界面类和选择对象屏蔽,需要包含以下命名空间。
usingNXOpen.UF;
usingNXOpenUI;
交互选择草图参考代码。
publicstaticSketchSelectSketch()
{
UIui=UI.GetUI();
Stringmessage="Selectsketch";
Stringtitle="Selection";
Selection.SelectionScopescope=Selection.SelectionScope.WorkPart;
BooleankeepHighlighted=false;
BooleanincludeFeatures=true;
Selection.SelectionActionselectionAction=Selection.SelectionAction.ClearAndEnableSpecific;
Selection.MaskTriple[]selectionMask_array=newSelection.MaskTriple[2];
selectionMask_array[0].Type=UFConstants.UF_sketch_type;
selectionMask_array[0].Subtype=0;
selectionMask_array[0].SolidBodySubtype=0;
NXObjectselectedObject=null;
Point3dcursor;
ui.SelectionManager.SelectObject(message,title,scope,selectionAction,includeFeatures,keepHighlighted,selectionMask_array,outselectedObject,outcursor);
Sketchsketch=(Sketch)selectedObject;
if(sketch==null)
returnnull;
returnsketch;
}
草图选择的调用方法可以添加到日志开始部分。
Sketchsketch1=SelectSketch();
if(sketch1==null)
return;
录制日志使用FindObject方法引用一个特定名字的对象。
比如录制所选的草图对象是“SKETCH(12)”。
下面的代码查找命名的对象,并应用对象到适当的功能中。
//移除的代码
NXOpen.Features.Feature[]features1=newNXOpen.Features.Feature[1];
NXOpen.Features.SketchFeaturesketchFeature1=(NXOpen.Features.SketchFeature)workPart.Features.FindObject("SKETCH(12)");
features1[0]=sketchFeature1;
为了实现草图的交互选择,例子中使用SelectSketch静态函数提供用户交互选定的草图对象。
在录制日志中,给拉伸操作中的拉伸选项添加实际曲线也是通过使用特定命名的对象来完成的。
//移除的代码
Sketchsketch1=(Sketch)workPart.Sketches.FindObject("SKETCH_002");
Lineline1=(Line)sketch1.FindObject("CurveLine7");
日志中的选择意图是特征曲线,即选择选定特征中的所有曲线。
因此,需要查找草图特征中的曲线,并用交互式选定草图中的曲线更换FindObject()方法调用。
//新增的代码
NXObject[]geoms=sketch1.GetAllGeometry();
NXObjectnXObject1=geoms[0];
用Addsection方法中的nXObject1替换arc1的应用
//移除的代码
section1.AddToSection(rules1,line1,nullNXObject,nullNXObject,helpPoint1,NXOpen.Section.Mode.Create,false);
//新增的代码
NXObjectnullNXObject=null;
section1.AddToSection(rules1,nXObject1,nullNXObject,nullNXObject,helpPoint1,Section.Mode.Create,false);
2.3.3日志回放
按照要求编辑日志文件后回放日志,本例中回放日志要求当前的部件必须包含一个草图特征。
回放时首先选择对话框选择一个草图特征。
在成功选择草图后,依次弹出拉伸起始值和拉伸终止值对话框,在对话框的SetStartLimit和SetEndLimit输入框中分别输入开始值和终止值。
日志回放完成后,通过选择的草图创建了一个拉伸特征,拉伸的起始位置和终止位置由用户输入确定。
2.4日志创建编译和链接的应用程序
编译和链接的应用程序不仅对通用API和.NET框架完全访问,也提供了对NX的事件,NX的对话框和用户定义对象的完全访问。
编译应用程序还需要作者许可,应用程序加载过程中检查作者许可,并运行签署功能。
日志仅限于单个的源文件,能够访问大多数通用API功能。
日志不要求作者许可。
日志和编译过的应用程序都使用运行时基于许可检查的特征。
把日志应用程序移到编译和链接过的应用程序通常取决于应用程序的复杂性和效率。
尽管日志和编译链接的应用程序存在很多差异,但是可以使用日志功能,对编译链接的应用程序开发起到辅助的功能,可以极大的提高编译和链接的应用程序的开发效率。
2.4.1日志在编译链接应用程序中的应用范例
使用上节日志应用程序范例QuickExtrude,使用Visualstudio创建拉伸位置对话框来表示拉伸的起始和终止值。
步骤一、创建项目
以VisualStudio2005为例,新建一个project,项目类型选择VisualC#,模板选择Class Library,项目名称为Quick_Extrude,如图7,单击OK后,创建了一个新的项目。
图7新建应用程序项目
步骤二、添加NXOpen.NET库的引用
选择%ugii_base_dir%\managed,下面的NXOpen.dll、NXOpen.UF.dll、NXOpen.Utilities.dll、NXOpenUI.dll.
图8添加.NET引用
步骤三、添加日志录制文件
删除项目中自动建立的Class1.cs,把日志录制文件Extrude.cs复制到项目文件夹下,添加已存在的item,选择Extrude.cs,见图9。
图9添加录制文件
步骤四、添加WindowsFormItem
定义拉伸输入值对话框,使用VisualStudio创建一个用WinForm对话框,用来表示用户输入的拉伸操作的起始值和终止值对话框。
见图10。
图10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NX 二次开发 工具 日志