NX二次开发(C#)-UIStyler-获取UI选择对象

Posted NX二次开发专注者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NX二次开发(C#)-UIStyler-获取UI选择对象相关的知识,希望对你有一定的参考价值。

用C#语言进行NX二次开发时,对于初学者,设计UI Styler后,不知道如何获取选择的对象。本文基于C#+NX1957介绍怎么在C#中获取UI选择对象

首先,设计一个UI界面,如下所示,包括了:

1、选择对象

2、选择面

3、选择体

4、选择特征

 在设计完成界面后,将其保存为C#格式的.dlx和.cs,建立对应的工程项目。

在public int update_cb(NXOpen.BlockStyler.UIBlock block)方法中,找到对应的块:

如选择对象,则是  if (block == _ObjectSelect)

在代码段中添加如下代码:

                 if (block == _ObjectSelect)
                {
                    //---------Enter your code here-----------
                    TaggedObject[] taggedObjects = _ObjectSelect.GetSelectedObjects();

                    foreach(var to in taggedObjects)
                    {
                        NXObject nXObject = (NXObject)to;
                        int type;
                        int subType;
                        uFObj.AskTypeAndSubtype(nXObject.Tag, out type, out subType);
                        MessageBox.Show(nXObject.JournalIdentifier+"\\n"+type.ToString()+"\\n"+subType.ToString());
                    }

                }

选择的对象以TaggedObject类型获取,即:

TaggedObject[] taggedObjects = _ObjectSelect.GetSelectedObjects();

按照foreach循环读取每个taggedObjects中的对象,将其强制转换为NXObject类型,即:

NXObject nXObject = (NXObject)to;

如果不知道选择对象的类型,则用uf函数类来获取其类型和子类型:

 int type;
 int subType;
 uFObj.AskTypeAndSubtype(nXObject.Tag, out type, out subType);

通过类型来相应的转化为对应的对象。

如果type=70,则是实体对象,即可以转换为Body类型,即是:

                if (block == _ObjectSelect)
                {
                    //---------Enter your code here-----------
                    TaggedObject[] taggedObjects = _ObjectSelect.GetSelectedObjects();

                    foreach(var to in taggedObjects)
                    {
                        NXObject nXObject = (NXObject)to;
                        int type;
                        int subType;
                        uFObj.AskTypeAndSubtype(nXObject.Tag, out type, out subType);
                        if(type==70)
                        {
                            Body body = (Body)nXObject;
                            MessageBox.Show("当前选择的对象是实体,其tag为:" + body.Tag.ToString());
                        }
                    }

                }

运行效果如下:

 

对于面选择、体选择,其形式是一样的。

对于面选择:

                    TaggedObject[] taggedObjects = _FaceSelect.GetSelectedObjects();
                    Face[] faces = new Face[0];
                    foreach (var to in taggedObjects)
                    {
                        Face face = (Face)to;
                        Array.Resize(ref faces, faces.Length + 1);
                        faces[faces.Length - 1] = face;                       
                    }
                    MessageBox.Show("选择    " + faces.Length.ToString() + "  个面");

其运行效果为:

 

以上是关于NX二次开发(C#)-UIStyler-获取UI选择对象的主要内容,如果未能解决你的问题,请参考以下文章

NX二次开发(C#)-UIStyler-枚举

UG NX二次开发(C#)-UI Styler-批量选择点

UG NX二次开发(C#)-UIStyler-ListBox操作

UG NX二次开发(C#)-UIStyler-ListBox操作

UG NX二次开发(C#)-CAM-获取所有的加工刀具表单

UG NX二次开发(C#)-CAM-UIStyler中切换到CAM不能正常显示加工界面的解决方法