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

Posted GimiGimmy

tags:

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

简介

列表框是UIStyler的一个重要组件,如图 所示。

点击后,在dialog中显示属性列表如图所示。

从属性列表中,可以看出其具有的属性如下:
 BlockID-在UIStyler的唯一标识符
 Enable-是否起作用
 Label-标签
 Show-控制是否显示
 ListItems-列表项
 ShowAddButton-是否显示添加的按钮
 ShowDeleteButton-是否显示删除的按钮
 ShowModeUpDownButton-是否显示上下移动的按钮
 SingleSelect-单选还是多选
对ListBox的操作主要是对ListBox的属性进行操作。
下面以一个开发实例来说明ListBox的代码开发。

创建一个具有列表框的Dialog

在UG NX1984的“开发人员”模块中,选择”块UI样式编辑器“

将列表框的增加、上下移动、删除按钮显示设为真。即:

保存对话框,获得.dlx文件和.cs文件。

添加代码

功能简介

这段代码的目的是选择体对象,在列表框中显示选择体的面Tag号;在列表框中选择Tag号,点击“add”按钮,添加体的所有面的Tag号;在列表框中选择Tag号,如果是体,则不再选择体,如果选择面,则不再选择面所属的体;可以单选,也可以多选。

初始化列表框

在 public void dialogShown_cb()函数中,添加

#region 链表初始化
     _ListBox.Show = true;                          //列表框显示         
     _ListBox.SingleSelect = false;             //将列表框选择设置为多选
     _ListBox.ShowAddButton = true;
     _ListBox.IsAddButtonSensitive = true; //列表框增加按钮可用
     _ListBox.IsDeleteButtonSensitive = true;//列表框删除按钮可用
 #endregion

注册SetAddHandler和SetDeleteHandler句柄函数

注意:在注册句柄函数时,不能让setAddHandler放在初始化函数中,不然出现没有注册回调函数的错误,把这个函数放在dialogShown_cb()中。

//--------------------------------------------------------------------
//--------------------------------------------------------------------
    //Registration of ListBox specific callbacks
    //--------------------------------------------------------------
    _ListBox.SetAddHandler(new NXOpen.BlockStyler.ListBox.AddCallback(AddCallback));

_ListBox.SetDeleteHandler(new NXOpen.BlockStyler.ListBox.DeleteCallback(DeleteCallback));

在体选择操作按钮中添加

if (block == _BodySelect)

//---------Enter your code here-----------
TaggedObject[] taggedObjects = _BodySelect.GetSelectedObjects();
string[] listBoxString = new string[0];
if (taggedObjects.Length==0)

listBoxString = new string[0];
_ListBox.SetListItems(listBoxString);
return 1;

else

foreach(var to in taggedObjects)

Body body = (Body)to;
Array.Resize(ref listBoxString, listBoxString.Length + 1);
listBoxString[listBoxString.Length - 1] = body.Tag.ToString();

ListBox.SetListItems(listBoxString);



添加Add的回调函数AddCallback

public static int AddCallback(NXOpen.BlockStyler.ListBox list_box)
         
if (list_box == _ListBox)

if (list_box.GetSelectedItems().Length == 0)

return 0;

else

string[] listBoxString = _ListBox.GetListItems();
foreach (var st in list_box.GetSelectedItemStrings())

NXObjectManager nXObjectManager = new NXObjectManager();
Tag tag = (Tag)int.Parse(st);
Body body = null;
FindBody(tag, out body);
if (body != null)

Face[] faces = body.GetFaces();
foreach (var fc in faces)

Array.Resize(ref listBoxString, listBoxString.Length + 1);
listBoxString[listBoxString.Length - 1] = fc.Tag.ToString();



_ListBox.SetListItems(listBoxString);


return 1;


添加删除的回调函数DeleteCallback

    public static int DeleteCallback(NXOpen.BlockStyler.ListBox list_box)
        
            if (list_box == _ListBox)
            
                TaggedObject[] taggedObjects = _BodySelect.GetSelectedObjects();
                List<Body> selectBodiesList = new List<Body>();
    
                foreach(var to in taggedObjects)
                
                    selectBodiesList.Add((Body)to);
                
                if (list_box.GetSelectedItems().Length == 0)
                
                    return 0;
                
                else
                
                    
                    foreach (var st in list_box.GetSelectedItemStrings())
                    
                        NXObjectManager nXObjectManager = new NXObjectManager();
                        Tag tag = (Tag)int.Parse(st);
                        Body body = null;
                        FindBody(tag, out body);
                        if (body != null)
                        
                            if(selectBodiesList.Exists(a=>a==body))
                            
                                selectBodiesList.Remove(body);
                            
                        
                        else
                        
                            Face face = null;
                            FindFace(tag, out face);
                            if(face!=null)
                            
                                Body body1 = face.GetBody();
                                if(body1!=null)
                                
                                    if (selectBodiesList.Exists(a => a == body))
                                    
                                        selectBodiesList.Remove(body);
                                    
                                
                            
                        
                    
                    string[] listBoxString = new string[0];
                    TaggedObject[] taggedObjects1 = new TaggedObject[0];
                    foreach(var bd in selectBodiesList)
                    
                        Array.Resize(ref listBoxString, listBoxString.Length + 1);
                        listBoxString[listBoxString.Length - 1] = bd.Tag.ToString();
                        Array.Resize(ref taggedObjects1, taggedObjects1.Length + 1);
                        taggedObjects1[taggedObjects1.Length - 1] = bd;
                    

                    _ListBox.SetListItems(listBoxString);
                    _BodySelect.SetSelectedObjects(taggedObjects1);
                
            
            return 1;
        

添加找到体和面的函数

public static void FindBody(Tag tag,out Body body)
        
            body = null;
            BodyCollection bodyCollection = workPart.Bodies;
            Body[] bodies = bodyCollection.ToArray();
            foreach(var bd in bodies)
            
                if(bd.Tag==tag)
                
                    body = bd;
                
            
        

        public static void FindFace(Tag tag,out Face face)
        
            face = null;
            BodyCollection bodyCollection = workPart.Bodies;
            Body[] bodies = bodyCollection.ToArray();
            foreach (var bd in bodies)
            
                Face[] faces = bd.GetFaces();
                foreach(var fc in faces)
                
                    if(fc.Tag==tag)
                    
                        face = fc;
                    
                
            
        


生成dll

点击“生成解决方案”,生成dll

测试listbox

在图形区,选择两个长方体对象,则列表框中显示两个长方体对象的Tag号

在列表框中选择第一个体,点击“添加”按钮,则有:

选择列表框中热任意一个对象,点击 “删除”按钮,则有:

结论

列表框的操作是UIStyler的一个很重要的组件,这里是简单介绍,有需要更多了解的可以私信我,相互学习共同成长。

以上是关于UG NX二次开发(C#)-UIStyler-ListBox操作的主要内容,如果未能解决你的问题,请参考以下文章

UG NX二次开发(C#)-装配-替换组件

UG NX二次开发(C#)-装配-替换组件

UG NX二次开发(C#)-建模-获得NX当前打开的所有part文件

UG NX二次开发(C#)-同步建模-删除倒圆(圆角)

UG NX二次开发(C#)-装配-添加组件

UG NX二次开发(C#)- 查询part历史信息