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操作的主要内容,如果未能解决你的问题,请参考以下文章