用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() +
" 个面");
其运行效果为:
转载:https://blog.csdn.net/yang19861007/article/details/116404842
查看评论